SUMMARIZE 函数解决之前的总计错误
小伙伴们,还记得之前的总计栏显示错误问题么?
本期呢,白茶决定来研究解决这个问题,先来看看之前的样例。
放上之前的每笔成交代码:
每笔成交花费 =
VAR CQ = []
每一笔消费达成日期
VAR DQ =
IF (
SUM ( Sheet1[销售额] ) > 0,
CALCULATE (
[每一笔消费达成日期],
FILTER (
ALL ( Sheet1[日期] ),
'Sheet1'[日期] < CQ
&& CALCULATE ( SUM ( Sheet1[销售额] ) ) > 0
)
),
BLANK ()
)
VAR HQ =
FILTER ( ALL ( Sheet1[日期] ), 'Sheet1'[日期] <= CQ && 'Sheet1'[日期] > DQ )
RETURN
CALCULATE ( SUM ( Sheet1[花费] ), HQ )
这些都是之前的文件,这里拿出来是为了方便小伙伴们观看对比使用的。先来说一下什么意思:
两个人总计花费187.20元,但是实际需求中,可能BOSS只会处理你的有效花费。什么叫有效花费,就是这个钱你花了,并且达成销售了,BOSS才会给你报销。其他的都算在无效消费里面。
也就是需要在总计栏呈现的结果是:187.20元-12.20元-13.20元-6.20元。即155.6元,而不是6.20元。那么该如何处理呢?
先来了解一下SUMMARIZE函数。
语法:
SUMMARIZE(<table>, <groupBy_columnName>[, <groupBy_columnName>]…[, <name>, <expression>]…)
这个函数以后会仔细的说,本次简单的说我们需要的功能。
当SUMMARIZE函数如下这种:
DAX =
groupby是什么函数
SUMMARIZE ( '表', '表'[列] )
这种情况下的结果类似于VALUES函数,提取不重复值。
如果是下面这种:
DAX =
SUMMARIZE ( '表', '表'[列], '表'[列2] )
这种情况相当于构造成了一个笛卡尔积。但是有点不同,就是当表中没有这种组合的时候,那么结果就不会出现。
在数据中先使用SUMMARIZE函数看看效果:
这种就属于利用SUMMARIZE 生成了一个只有我们需要维度的表。可能有的小伙伴还没理解,那然后呢?利用SUMX 函数函数外包!编写代码:
SUMMARIZE 优化结果 =
SUMX ( SUMMARIZE ( 'Sheet1', 'Sheet1'[业务员], 'Sheet1'[日期] ), [每笔成交花费] )
结果如图:
这次的结果显示没问题了,对吧。
这里说一下原因:
首先是利用SUMMARIZE生成了一个只有[日期]与[人名]的组合表。
,也就是可见组合。
当前上下文筛选限制,只显示[每笔销售达成的日期],也就是可见组合
之后SUMMARIZE的第一参会受当前上下文
然后,之前说过了,[每笔成交花费]这个度量值相当于把[花费]这一列截断了,实际上显示的只有每次成交额的汇总,也就是:22.2,,46,40.6,46.8这四个数值。
当前上下文汇总。
最后,是SUMX函数进行当前上下文
再通俗一点就是SUMMARIZE为SUMX函数提供一个可以计算的维度
可以计算的维度,而之前的[每笔成交花费]这个度量值提供需要被计算的值。