不管是Power BI中还是在Excel的Power Pbiot中使用DAX,都支持VAR变量的写法。变量的方法不仅提高了代码的性能,还能减少代码的重复使用带来的阅读不方便。
但是很多的新手朋友们在编写表达式的时候,使用变量可能会犯这样一个错误。来看看你是不是也有这样的习惯和问题。先来看一下数据模型。
比如,要计算每个大区的订单金额占所有大区订单总金额的占比。这是一个简单的度量值,新手朋友们有可能的一种编写的代码是:
代码语言:javascript
复制
订单金额占比 =VAR salestotal = SUM ( 'T05_订单子表'[F_06_产品销售金额] )VAR salespct = DIVIDE ( salestotal, CALCULATE( salestotal, ALL ( 'D00_大区表'[F_02_大区] ) ) )RETURN salespct
然后我们将其放入到矩阵中,来观察一下结果。发现结果全是100%.如图所示:
上述公式虽然没有报错,但是其本身计算的结果是硬错误的,因为每个大区的订单金额占比都是100%,这是显而易见的。出现这种错误的原因是,代码关于VAR变量的理解是不正确的:
变量只在定义的时候计算,不会在使用变量的时候计算结果,并且变量的计算只进行一次。在这个例子中,已经定义的salestotal的变量不会受到CALCULATE函数的影响,即不考虑调用变量时的筛选上下文,所以后面的占比计算的时候,每一个大区返回的都是一样的值值。
所以,上述错误的代码,可以分成来写成2个度量值:
代码语言:javascript
复制
订单金额: = SUM ( 'T05_订单子表'[F_06_产品销售金额] )
再编写金额占比的度量值,如下:
代码语言:javascript
复制
订单金额占比 =DIVIDE ( [订单金额], CALCULATE ( [订单金额], ALL( 'D00_大区表'[F_02_大区] ) ))
再来看一下结果,就正确了。
所以,你知道你写的变量为什么总是返回100%了嘛~
作者新书
发布:刘恩惠
审核:陈歆懿
代码语言:javascript
复制
▼点击阅读原文,了解本书详情~