去年,微软在DAX中更新了一批函数,其中有一个函数特别让人兴奋:
EVALUATEANDLOG
对于正常使用来说,看不到这个函数的效果。它的作用是通过一种特别的方式返回计算结果。
本文中使用的还是之前我们多次使用的Power BI Desktop数据模型案例。
比如,如果你有一个度量值,
Profit = SUM(Sales[SalesAmount]) - SUM('Sales'[TotalCost])
使用EVALUATEANDLOG函数改写这个度量值,
Profit1 = EVALUATEANDLOG(SUM(Sales[SalesAmount]) - SUM('Sales'[TotalCost]))
很简单,只要将原来的计算公式包括在这个函数中,作为其第一个参数就可以了。
添加一个视觉对象,
这两个度量值并没有什么区别,结果是一样的。
这个函数的真正作用是调试DAX代码。
相信很多人在写DAX公式时都有类似的经历:写了一个复杂的度量值,但是在视觉对象中呈现时,结果错了。然后就要花费很多时间排错。逐步检查计算逻辑,甚至将全过程拆解成一个一个小的结果,逐步看中间结果。
整个过程漫长而痛苦。
这个函数就是为了开发过程中进行调试排错的。它将计算过程中返回的中间结果输出,这样,就可以逐步检查是哪一步出的问题了。
作用机制和查看方式
这个函数返回输出结果是以“事件日志记录”的形式返回的。
所以我们需要一个能够查看事件日志的工具。
微软官方推荐两种:
SQL Server Profiler
DAX Debug Output
前者是微软官方的工具,后者是一个开源的第三方工具。我个人觉得后者更简单一些。
下载地址在这里:
https://github.com/pbidax/DAXDebugOutput/releases/
打开后的界面是这样的,
点击“Connect”,
列出了所有已经打开的Power BI Desktop数据模型文件。
选择你希望调试的那个模型,点击“OK”。
在Power BI Desktop中执行一个查询,比如常见一个视觉对象,
切换到DAX Debug Output窗口中,
左侧上边的窗口中列出了各种事件,其中第3,4条类型是DAXEvaluationLog,选中第3条,
右侧窗口就列出了函数EVALUATEANDLOG的返回结果,这是一个JSON串,其中的数据部分展示了这次计算中每个输入值对应的度量值计算结果。
而且这个结果以表格的形式显示在下面的面板中,更容易查看。
你可能会有疑问:这个视觉对象中的结果不是一样吗?直接看视觉对象的结果就可以了啊。
确实是这样的。
但是使用这个函数可以只展示其中一部分的内容。
将上面的度量值修改一下:
Profit2 = EVALUATEANDLOG(SUM(Sales[SalesAmount])) - SUM('Sales'[TotalCost])
这次,只有其中的第一个销售额的合计是被记录的。
可以看到,这里只是返回了整个公式中我们关心的那一部分的计算结果。
这个函数的使用并不复杂。但是对于那些需要写复杂的DAX公式的场景来说,可以说是非常重要:你可以将那些你怀疑逻辑不太正确的计算都放在这个函数中,然后查看其输出结果,从而更加容易发现问题所在。
不过,使用这个函数会对性能造成一定影响。所以,在排除错误后,记得在最终的公式中去掉这个函数。
最后,这个函数只能用于Power BI Desktop中。
联系客服