BI学习笔记

PowerBI自定义函数

2025-09-19  本文已影响0人  Fabric丨白茶

Power BI Desktop 9月份版本已经正式发布。相信很多小伙伴已经关注到了本次版本更新有一个重量级功能的推出自定义函数。那么这个功能对于Power BI的开发者来说很重要么?是否每个人都需要掌握此功能呢?

对此,白茶想说是的,这个功能的推出对于每一位Power BI开发者来说都是非常重要的。掌握了自定义函数(UDF)功能,会对日常的BI开发工作产生以下影响:

接下来我们通过具体的函数介绍和实际案例,来向大家介绍UDF功能。

语法介绍

DAX查询语法如下:

DEFINE
    /// Optional description above the function
    FUNCTION <FunctionName> = ( [ParameterName]: [ParameterType], ... ) => <FunctionBody>

TMDL视图语法如下:

createOrReplace
    /// Optional description above the function
    function <FunctionName> = ( [ParameterName]: [ParameterType], ... ) => <FunctionBody>

除了声明有所区别之外,语法内容基本一致,这里就不做过多的介绍了。

案例

案例数据

创建UDF

DEFINE 
FUNCTION
//创建快捷日期表函数
Dim_Date=
(FactDate:anyref expr)=>
GENERATE (
    CALENDAR ( MIN ( FactDate ), MAX ( FactDate ) ),
    VAR DA = [Date]
    VAR YEAR =
        YEAR ( DA )
    VAR QUARTER =
        "Q" & FORMAT ( DA, "Q" )
    VAR MONTE =
        FORMAT ( DA, "MM" )
    VAR DAY =
        DAY ( DA )
    RETURN
        ROW (
            "Year", YEAR,
            "Quarter", QUARTER,
            "Month", MONTE,
            "DayOfMonth", DAY,
            "YearQuarter", YEAR & QUARTER,
            "YearMonth", YEAR & MONTE,
            "YearMonthCount",
                YEAR * 12 + MONTE
        )
) 
FUNCTION
//创建快捷计算环比上期
LastMonthValue=(SalesVal:numeric expr)=>
CALCULATE (
    SalesVal,
    FILTER (
        ALL ( 'Dim_Date' ),
        'Dim_Date'[YearMonthCount]
            = MAX ( 'Dim_Date'[YearMonthCount] ) - 1
    )
)
FUNCTION
//创建快捷计算去年同期
LastYearValue=(SalesVal:numeric expr)=>
CALCULATE (
    SalesVal,
    FILTER (
        ALL ( 'Dim_Date' ),
        'Dim_Date'[YearMonthCount]
            = MAX ( 'Dim_Date'[YearMonthCount] ) - 12
    )
)

使用更改更新模型

结果如下

添加的自定义函数会出现在模型中函数的选项里面,接下来我们就可以使用已经创建好的自定义函数了。

创建日期表

Dim_Date =
Dim_Date ( 'Sales'[Date] )

结果如下:

创建度量值

模型关系连接完毕后,我们就可以通过之前创建的自定义函数,来构建指标了。

基础度量值

Quantity = 
SUM ( Sales[Quantity] )

上期

上期 =
LastMonthValue ( 'DAX'[Quantity] )

同期

同期 = 
LastYearValue ( 'DAX'[Quantity] )

结果如下

到这里,自定义函数(UDF)功能的介绍就基本结束了,不过值得注意的是,此功能目前还属于预览状态,有诸多限制。

注意

常规:

• 无法在服务中创建或定义DAX UDF
• 无法在模型中隐藏或取消隐藏用户定义函数(UDF)。
• 无法将UDF放入显示文件夹中。
• 功能区中没有“创建函数”按钮。
• 无法将用户自定义函数(UDF)与翻译合并。• 在没有表格的模型中不支持UDF

定义UDF:

• 不支持递归相互递归
• 不支持函数重载。
• 不支持显式返回类型。

UDF参数:

• 不支持可选参数。
• 不支持参数说明。
UDF无法返回值enum
• 接受enum值作为其函数参数的内置函数将无法在该上下文中使用UDF
• 未绑定的类型提示expr参数不被计算。

IntelliSense支持:

• 尽管UDF可以在实时连接或复合模型中使用,但没有IntelliSense支持。
• 尽管UDF可用于视觉计算,但视觉计算公式栏没有对UDF的IntelliSense支持。
• TMDL视图对UDF没有适当的IntelliSense支持。

已知Bug:

• 目前已知以下问题,可能会影响功能:
• 重命名这些对象时,不会自动更新对UDF中的表格模型对象(例如度量值、表、列)的引用。
• 如果重命名UDF所依赖的对象,函数正文仍将包含旧名称。 必须手动编辑UDF表达式才能更新对重命名对象的所有引用。
• 涉及UDF的某些高级方案可能会导致分析程序不一致。 例如,当用户将列作为expr参数传递或使用非限定列引用时,可能会看到红色下划线或验证错误。

微软UDF功能介绍[1]

感谢语

因为个人工作原因,白茶大概停更了1年多的时间。这一年的时间里,很多小伙伴通过各种方式联系白茶,询问白茶的状况,感谢各位的关怀和支持。后续白茶会看情况更新的,谢谢大家。

引用链接

[1] 微软UDF功能介绍: https://learn.microsoft.com/zh-cn/dax/best-practices/dax-user-defined-functions#considerations-and-limitations


上一篇 下一篇

猜你喜欢

热点阅读