Tuesday, October 28, 2025

A Actual-World Instance of Utilizing UDF in DAX


Introduction

The characteristic of user-defined capabilities was launched as a primary preview model with the September 2025 launch.

This characteristic allows us to encapsulate enterprise logic in capabilities, which could be known as like every other customary capabilities.

On this piece, I’ll display learn how to use this characteristic with a real-world instance: calculating a forecast primarily based on inflation charges.

You will notice learn how to create a easy operate and deal with a extra advanced state of affairs.

Situation

Let’s think about an organization that desires to forecast its earnings with an inflation simulation.

They need to simulate how totally different inflation charges have an effect on their month-to-month earnings.

For simplicity, we ignore seasonality and use the final recognized month-to-month gross sales quantity to calculate the long run earnings for the remainder of the yr.

The consumer should be capable to set an inflation price and see how the numbers change.

Put together the information mannequin

Now, it is determined by whether or not I begin with a brand new Energy BI file and cargo the information or add this performance to an current one.

The very first thing to do is to activate the Preview characteristic:

Determine 1 – Allow the Preview characteristic for user-defined capabilities (Determine by the Writer)

You is perhaps pressured to restart Energy BI Desktop after enabling it.

For an current Energy BI file, we have to set the right compatibility degree to create user-defined capabilities (UDFs).

You’ll be able to both create a dummy operate, which can routinely improve the compatibility degree, or use Tabular Editor to set it to a minimum of 1702:

Determine 2 – Use Tabular Editor to improve the compatibility degree of the database (Determine by the Writer)

You’ll be able to enter 1702 within the marked area and put it aside.

I’ll display learn how to create a easy UDF later on this piece.

Please go to the Microsoft documentation to study extra about creating a brand new UDF in Energy BI Desktop. You could find the hyperlink within the references part on the finish of this text.

Including the speed choice

Because the consumer should be capable to choose the inflation price, I add a parameter to the information mannequin:

Determine 3 – Add a parameter to the information mannequin for a numeric vary (Determine by the Writer)

After clicking on “Numeric vary” I fill out the shape:

Determine 4 – Establishing the parameter for a share vary (Determine by the Writer)

Since I need to management the share, I set the vary to -0.02 to 0.05, which corresponds to -2% to five%.

After a number of seconds, the brand new slicer was routinely added to the report web page.

But it surely’s displaying solely the decimal numbers.
I need to change the quantity format to see percentages:

Determine 5 – Format the column of the parameter to a share (Determine by the Writer)

Now the slicer exhibits the quantity as wanted:

Determine 6 – The slicer with the numbers as a share (Determine by the Writer)

Now it’s prepared to make use of.

Write the primary operate

First, let’s create a UDF to return the chosen Fee.

I choose writing it in Tabular Editor, as a result of its DAX editor is way quicker than Energy BI Desktop.

However you possibly can create it within the DAX Question view in Energy BI Desktop as nicely.

In Tabular Editor, I am going to the Capabilities Node, right-click on it, and choose “New Person-Outlined operate”:

Determine 7 – Create a brand new UDF in Tabular Editor (Determine by the Writer)

Now I can set a reputation.

For this primary one, I set “ReturnRate”.

That is the code for the operate:

(
    Fee : DECIMAL VAL
)

=>
Fee

Inside the brackets, I outline the Enter parameter.

After the => I can enter the DAX code for the operate.

On this case, I return the Enter parameter.

Now, I create a measure to make use of this Perform:

Get Inflation price = ReturnRate([Inflation rate Value])

The measure [Inflation rate Value] was created after I created the parameter to pick out the Inflation price.

Once I add a card and assign the brand new measure to it, I’ll see the chosen worth from the slicer:

Determine 8 – Two examples displaying that the Measure that calls the capabilities returns the chosen inflation price (Determine by the Writer)

OK, that is an elementary operate, however it’s solely for example the way it works.

Write the actual operate

You might need seen the key phrase VAL within the parameter’s definition.

As you possibly can learn within the two articles beneath in additional element, we’ve got two modes to move parameters:

  • VAL: Go the content material of the parameter as is.
  • EXPR: Go the parameter as an expression, which can be utilized inside the operate like a typical Measure.

Within the following operate, I take advantage of each of them.

Right here is the entire code for the operate MonthlyInflation:

(
    Fee : DECIMAL VAL
    ,InputVal : EXPR
)
=>

VAR CurrentMonth =  MAX( 'Date'[MonthKey] )

VAR LastMonthWithData = CALCULATE(
                                LASTNONBLANK( 'Date'[MonthKey]
                                    , InputVal
                                )
                            , ALLEXCEPT( 'Date', 'Date'[Year] )
                        )
                        
VAR LastValueWithData = CALCULATE(InputVal
                                        ,ALLEXCEPT('Date', 'Date'[Year])
                                        ,'Date'[MonthKey] = LastMonthWithData
                                    )
                            
VAR MonthDiff = CurrentMonth - LastMonthWithData
VAR End result = IF(MonthDiff<=0
                    ,InputVal
                    ,(1 + ( Fee * MonthDiff ) ) * LastValueWithData
                    )

                                    
RETURN
    End result

The primary parameter of the operate is as earlier than.

The second parameter would be the expression of the enter measure.

Inside the operate, I can use the parameter identify to vary the filter context and different issues. I need to set the parameter as EXPR after I must work on this manner inside the operate.

The operate performs the next steps:

  1. I get the very best MonthKey and retailer it within the variable CurrentMonth
    The content material is the month of the present filter context within the numerical kind YYYYMM.
  2. I get the most recent month of the present yr with a worth from the enter parameter (measure) and retailer it into the variable LastMonthWithData
  3. I subtract the present month from the most recent month with information to get the distinction. This would be the issue to calculate the inflation price. The result’s saved within the variable MonthDiff
  4. If MonthDiff is smaller than or equal to 0, then the filter context (Month) accommodates a worth from the enter variable
  5. If not, the filter context (Month) is sooner or later, and we are able to calculate the outcome.

What I’m doing right here is to multiply the chosen inflation price by the variety of months for the reason that final month with information (LastMonthWithData).

Now, I can create a measure to dynamically calculate the forecast month-by-month primarily based on the chosen inflation price:

On-line Gross sales With Inflation =
    MonthlyInflation([Inflation rate Value], [Sum Online Sales])

That is the outcome for an inflation price of three%:

Determine 9 – Results of utilizing the brand new UDF to calculate the income monthly primarily based on the chosen inflation price (Determine by the Writer)

The blue-marked months comprise precise information, and the red-marked months are calculated primarily based on the chosen inflation price.

The sweetness is that I can move any DAX expression to the measure that I would like.

For instance, I can add On-line Gross sales with Retail Gross sales:

Determine 10 – End result with the Complete Gross sales when including up On-line and Retail Gross sales when calling the operate.

The measure for that is the next:

Complete Gross sales With Inflation =
    MonthlyInflation([Inflation rate Value], [Sum Online Sales] + [Sum Retail Sales])

Effectively, that’s very simple.

I do know that the calculation could be very simplistic, however I used this instance to showcase what could be carried out with UDFs.

What’s the purpose?

So, that’s the purpose with UDFs?

Many of the issues proven right here can be carried out with Calculation teams.

Effectively, that’s true.

However utilizing a UDF is way simpler than utilizing a Calculation Merchandise.

Furthermore, we are able to write model-independent UDFs and reuse them throughout a number of fashions.

Check out Prolong Energy BI with DAX Lib.

This can be a rising assortment of model-independent UDFs containing logic that can be utilized in any information mannequin.

Different differentiating factors between UDFs and Calculation Objects are:

  • UDFs can’t be grouped, however Calculation Objects could be grouped in Calculation Teams.
  • Calculation Objects don’t have parameters.
  • UDF could be straight known as like every other DAX operate.

Attempt it out to study extra concerning the prospects of UDFs.

Conclusion

are a terrific addition to the toolset in Energy BI and Material.

I’m positive it should turn out to be more and more necessary to know learn how to work with UDFs, as their potential will turn out to be extra obvious over time.

As we’re within the early levels of the introduction of this characteristic, we have to keep tuned to see what Microsoft will do subsequent to enhance it.

There are some restrictions on this characteristic. You discover them right here: Issues and limitations of DAX user-defined capabilities.

There’s sufficient room for enchancment.

Let’s see what’s coming subsequent.

References

Right here, the Microsoft documentation for user-defined capabilities: Utilizing DAX user-defined capabilities (preview) – Energy BI | Microsoft Be taught.

That is the SQL BI article that explains the characteristic in nice element: Introducing user-defined capabilities in DAX – SQLBI.

A group of free to make use of model-independent UDF: Prolong Energy BI with DAX Lib.

Like in my earlier articles, I take advantage of the Contoso pattern dataset. You’ll be able to obtain the ContosoRetailDW Dataset without cost from Microsoft right here.

The Contoso Knowledge can be utilized freely beneath the MIT License, as described on this doc. I modified the dataset to shift the information to up to date dates.

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles

PHP Code Snippets Powered By : XYZScripts.com