Power BI系列:为什么度量值计算的占比全是100%?

不管是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
复制

▼点击阅读原文,了解本书详情~