当前位置: 首页 > news >正文

PowerBI自定义函数

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

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

  • 告别重复的KPI逻辑构建
  • 形成自己的代码库体系
  • 为用户提供开箱即用的DAX体系
  • 扩展开发者的职业方向

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

语法介绍

DAX查询语法如下:

DEFINE/// Optional description above the functionFUNCTION <FunctionName> = ( [ParameterName]: [ParameterType], ... ) => <FunctionBody>
  • Description:这部分是为函数添加描述的位置,操作与DAX添加备注的方式一致;

  • FunctionName:函数命名,为自定义函数添加名称,后续在DAX中引用均以此名称为主;

  • ParameterName:参数命名,设定参数的名称,以及此自定义函数参数的数量;

  • ParameterType:参数类型/模式,可以设定参数的类型,也可以设定参数的传递模式;

  • 参数类型:目前支持的参数类型为AnyValScalarTableAnyRef,AnyVal代表参数类型为任意,Scalar代表参数是一个标量值,Table代表参数可以是一张表,AnyRef代表参数接受表、列、度量或日期;

  • 参数子类型:当参数为Scalar时,我们可以设定参数的子类型,比如整数、小数、浮点、文本、布尔值等常见的数据类型;

  • 传递模式:valexpr

  • val:在调用函数之前计算一次,将计算结果传递到函数中,后续计算不会根据上下文变化,类似var(变量);

  • expr:表达式的简称,在函数内部计算时,会受到上下文变化的影响,多次引用或参与迭代,则会被多次计算;

  • FunctionBody:自定义函数逻辑计算主体,可在此添加函数的相关计算逻辑。

TMDL视图语法如下:

createOrReplace/// Optional description above the functionfunction <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 )RETURNROW ("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


http://www.dtcms.com/a/393323.html

相关文章:

  • FreeRTOS——信号量,互斥锁,临界区,延时
  • 第三章 模型评估与优化技巧
  • 3.Spring AI的工具调用
  • 如何高效记单词之:学会想像——从字母W聊起
  • Python之Excel操作三:读取Excel文件中的某一列
  • 计网基础知识
  • 【CSP-J模拟题 】 附详细讲解
  • FPGA内实现FIR 抽取滤波器设计
  • 【proteus绿灯5s红灯10s三数码管数字切换电路】2022-12-12
  • 团队任务分配管理软件平台对比测评
  • 集成学习智慧:为什么Bagging(随机森林)和Boosting(XGBoost)效果那么好?
  • 计算机英语缩写
  • 国轩高科校招社招网申线上测评笔试题库结构说明书(适用于研发/工程/职能全部岗位)
  • 3.2.10 虚拟内存管理 (答案见原书 P238)
  • 算法 --- BFS 解决最短路问题
  • Photoshop蒙版的操作
  • cocos shader敌人受到攻击改变颜色
  • cd论文精读
  • USBD_malloc 禁止替换成 malloc 函数
  • 功能测试与测试用例设计方法详解
  • AXI DMA
  • 1:1复刻真实场景,机器人训练不再“纸上谈兵”
  • CMake快速上手:编译、构建与变量管理(包含示例)
  • vscode配置C/C++教程(含常见问题)
  • F021 五种推荐算法之美食外卖推荐可视化系统vue+flask
  • C++学习记录(10)模板进阶
  • cesium案例:三维钢铁厂园区开发平台(附源码下载)
  • 电商开放平台API接口对比爬虫的优势有哪些?
  • SpringDoc-OpenApi 现代化 API 文档生成工具介绍+使用
  • 打造现象级H5答题游戏:《终极主题答题冒险》开源项目详解