KeepFilters 函数针对筛选后汇总行的影响

我们有这样一张表及汇总金额。

基础数据

要求:

  • 求3个月的平均金额
  • 求2年的平均金额

这种要求看起来还是比较简单的,因为是以日历的天为计算颗粒,直接写度量即可。

AverageX('表1',[金额总和])

平均销售

但是如果我想把未展开的数据作为一个整体来进行计算的话则不一样了。

要求:

  • 求每月的平均销售额

针对月份,我们可以使用Values来进行计算。

AverageX(Values('日历'[月]),[金额总和])

专注月平均总计出错

但是请注意使用这个公式的时候在总计这里出错了,我们要求的总计应该是(25+45+65+85+105+125)/6=75,而这里却是150。

是因为什么原因导致的呢?这个150是怎么计算的出来的呢?

  • 实际上这个150是这样算出来的(25+45+65+85+105+125)/3=150

因为我们使用Valuse的是会对月份进行去重的,所以2018年和2019年加起来通过values求得的是3,所以最终除以的也是3。

那如何根据我们原先的需求去计算呢?
这个时候我们在计算values的时候要把2018年的月份和2019年的月份区分开,把月份作为唯一值进行计算。

专注月平均正确:=AverageX(Values('日历'[MMM-YYYY]),[金额总和])

这样我们计算的结果才是我们想要的。

专注月平均正确

之前我们知道有这个专注月份这个度量:

AverageX(Values('日历'[月]),[金额总和])

结果是合计后除以values计算后的月份个数,但有一个问题,我们看下

专注月平均筛选总计出错

我们对数据做了筛选,但结果却依旧没有改变。
那我们还是依旧想使用筛选过后的数据除以values计算出来的月份数量该如何操作呢?

这个时候就可以使用KeepFilters函数了。在原有进行计算values的时候加多一层KeepFilters,就可以保证在计算的时候可以随着具体的筛选来进行变动的计算。

专注月平均KeepFilters:=AverageX(KeepFilters(Values('日历'[月])),[金额总和])

我们来看下使用这个函数后的结果。

KeepFilters不重复月份

KeepFilters重复月份

要点:

  • 如果是月份不重复,他的结果就和专注月平均正确这个度量值相同的计算结果。
  • 如果月份有重复则按照之前的原则进行计算。
    第2张图片的计算原理也就是(25+45+105+125)/3=100

我们最后在反过来看下这个函数名称KeepFilters,也就是保持筛选,代表着筛选是会起作用的。

我们再思考下,如果需要计算的是(25+230)/2=127.5这种结果,我们该怎么写?

思考