PowerBI总计不等于明细之和的解决办法

PowerBI总计不等于明细之和的解决办法_第1张图片

上一篇文章最后留了个问题,就是计算大于2000万的城市销售额时,总计金额不等于明细之和,看起来比较奇怪,

PowerBI总计不等于明细之和的解决办法_第2张图片

其实总计和上面的这两个数字都有自己的逻辑,分别代表不同的上下文环境中的销售额,按照常规的汇总逻辑来理解二者关系是没有意义的。但是为了避免误导,有时还是需要避免出现这种状况,这里有两个解决的思路,

(一)明细项目和总计项目不同时显示

(二)让总计额等于明细项之和

下面按这两种思路分别来解决。

(一)明细项目和总计项目不同时显示

也即是让明细项的金额为空值,或者让总计为空值,这里要用到一个新函数:HASONEVALUE,是个逻辑判断函数,如果有单一值,返回ture,否则返回false,具体语法如下:

HASONEVALUE()

参数只有一个:列名,

作用:判断外部上下文中是否为该列中的唯一值,做切片器交互时十分有用。

下面就看看这个函数如何解决上面的问题。

不同时显示又分为不显示总计值和不显示明细项的值

不显示明细项的值

新建度量值[方法1]

= IF(HASONEVALUE('产品明细'[产品名称]),

      BLANK(),

      [大于2000万的城市销售金额])

这个度量值的意思是,如果外部上下文在[产品名称]中,用空值表示,否则运算度量值,结果显示如下,


PowerBI总计不等于明细之和的解决办法_第3张图片
HASONEVALUE函数

如果只想要销售额大于2000万的城市的汇总销售金额,可以用这种方法。

不显示总计值

如果想要总计值为空,和上面的度量值类似,BLANK换个位置就行了,新建度量值[方法2],

= IF(HASONEVALUE('产品明细'[产品名称]),

      [大于2000万的城市销售金额],

      BLANK())

结果如下,和我们期望的一致。


PowerBI总计不等于明细之和的解决办法_第4张图片

(二)让总计额等于明细项之和

实现这种方式还需要再放出一个函数:SUMX.

SUMX(, )

第一个参数为被运算的表table

第二个参数是对表中的每一行计算的表达式

之前也提到过,这是一个迭代函数,可以对表进行逐行运算,用该函数建一个度量值[方法3],

= SUMX('产品明细',

               [大于2000万的城市销售金额])

结果如下,总计正好等于明细项之和,


PowerBI总计不等于明细之和的解决办法_第5张图片
SUMX函数

SUMX函数十分强大,有的时候甚至可以代替CALCULATE,比如用SUMX可以一步实现方法3的效果,而无需借助CALCULATE建立的度量值  [大于2000万的城市销售金额]。

使用SUMX新建度量值[SUMX方法],

= SUMX('产品明细',

               SUMX(FILTER('门店城市',

                                       [销售总额]>20000000),

                           [销售总额]))

结果如下,

PowerBI总计不等于明细之和的解决办法_第6张图片

通过SUMX嵌套实现的效果和之前的方法完全一致,其中内层嵌套的SUMX公式和之前用CALCULATE建的度量值是等效的。不过SUMX的计算原理是逐行运算,如果数据量特别大,这种方式对内存的消耗比较严重,使用这种方式候需要慎重。

通过以上这几种方法,实现了总计和明细之和不相等的问题,实际分析中遇到相似的情况,可根据具体逻辑关系和展现需求选择不同的方式来处理。

微信公总号:PowerBI星球,让你大数据时代同样优秀。

你可能感兴趣的:(PowerBI总计不等于明细之和的解决办法)