Forum Discussion
UDF: can we pass a column as parameter?
- 10 months ago
Hii Marcl4
In DAX UDFs you cannot pass a column reference as a parameter.
UDF parameters only accept expressions, not real column metadata, so functions like SUMMARIZE, GROUPBY, SELECTCOLUMNS, etc. cannot use a parameter in place of a column name. This is a current limitation of DAX: column arguments must be hard-coded inside the function body.To achieve dynamic behavior, you must either:
-
write separate UDFs for each column, or
-
redesign the logic to work on values (e.g., using VALUES() or SELECTEDVALUE()), not structural column references.
There is no workaround today to dynamically inject a column into SUMMARIZE via a UDF parameter.
-
- 10 months ago
Hi Marcl4
You used the wrong parameter type. Pls change the type of SourceColumn to anyref, as below:
DEFINE FUNCTION pbi.Subtitle = ( SourceTable : table expr, SourceColumn : anyref, MaxItems : scalar ) => VAR BaseTable = FILTER( SUMMARIZE( SourceTable, SourceColumn, "Cnt", [#Projects] ), [Cnt] > 0 )Did I answer your question? If yes, pls mark my post as a solution and appreciate your Kudos !
Thank you~
- 10 months ago
Workarounds:
1. Create separate UDFs for each column:
pbi.SubtitleCountry = pbi.Subtitle(FACT_ITA, DIM_Geo[CountryName], 😎
pbi.SubtitleRegion = pbi.Subtitle(FACT_ITA, DIM_Geo[RegionName], 😎2. Use Field Parameters to pass column names (not supported in UDFs yet).
3. Rewrite as regular measure with SWITCH:
Sub_UDF =
SWITCH(
SELECTEDVALUE(ColumnSelector[ColumnName]),
"Country", "Countries: " & pbi.SubtitleCountry(FACT_ITA, 8),
"Region", "Regions: " & pbi.SubtitleRegion(FACT_ITA, 8),
BLANK()
)If this answer helped, please click Kudos or Accept as Solution.
-Kedar
LinkedIn: https://www.linkedin.com/in/kedar-pande
Hi Marcl4
You used the wrong parameter type. Pls change the type of SourceColumn to anyref, as below:
DEFINE
FUNCTION pbi.Subtitle = (
SourceTable : table expr,
SourceColumn : anyref,
MaxItems : scalar
)
=>
VAR BaseTable =
FILTER(
SUMMARIZE(
SourceTable,
SourceColumn,
"Cnt", [#Projects]
),
[Cnt] > 0
)
Did I answer your question? If yes, pls mark my post as a solution and appreciate your Kudos !
Thank you~