SUMMARIZE函数解决之前的总计错误

2021-09-02 09:28:35 浏览数 (1)

小伙伴们,还记得之前的总计栏显示错误问题么?

本期呢,白茶决定来研究解决这个问题,先来看看之前的样例。

放上之前的每笔成交代码:

代码语言:txt复制
每笔成交花费 =
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函数。

语法:

代码语言:txt复制
SUMMARIZE(<table>, <groupBy_columnName>[, <groupBy_columnName>]…[, <name>, <expression>]…)

这个函数以后会仔细的说,本次简单的说我们需要的功能。

当SUMMARIZE函数如下这种:

代码语言:txt复制
DAX =
SUMMARIZE ( '表', '表'[列] )

这种情况下的结果类似于VALUES函数,提取不重复值。

如果是下面这种:

代码语言:txt复制
DAX =
SUMMARIZE ( '表', '表'[列], '表'[列2] )

这种情况相当于构造成了一个笛卡尔积。但是有点不同,就是当表中没有这种组合的时候,那么结果就不会出现。

在数据中先使用SUMMARIZE函数看看效果:

这种就属于利用SUMMARIZE生成了一个只有我们需要维度的表。可能有的小伙伴还没理解,那然后呢?利用SUMX函数外包!

编写代码:

代码语言:txt复制
SUMMARIZE优化结果 =
SUMX ( SUMMARIZE ( 'Sheet1', 'Sheet1'[业务员], 'Sheet1'[日期] ), [每笔成交花费] )

结果如图:

这次的结果显示没问题了,对吧。

这里说一下原因:

首先是利用SUMMARIZE生成了一个只有日期人名的组合表。

之后SUMMARIZE的第一参会受当前上下文筛选限制,只显示每笔销售达成的日期,也就是可见组合

然后,之前说过了,每笔成交花费这个度量值相当于把花费这一列截断了,实际上显示的只有每次成交额的汇总,也就是:22.2,,46,40.6,46.8这四个数值。

最后,是SUMX函数进行当前上下文汇总。

再通俗一点就是SUMMARIZE为SUMX函数提供一个可以计算的维度,而之前的每笔成交花费这个度量值提供需要被计算的值。


小伙伴们❤GET了么?

白茶会不定期的分享一些函数卡片

(文件在知识星球PowerBI丨需求圈)

这里是白茶,一个PowerBI的初学者。

0 人点赞