美文网首页BI学习笔记
销售需求丨移动周期汇报(修)

销售需求丨移动周期汇报(修)

作者: Fabric丨白茶 | 来源:发表于2020-09-08 22:13 被阅读0次

    既然已经做了周分析,固定日期汇报,那么,咱们继续做一下移动周期汇报!既然已经做了,那就做到最好!

    BOSS:就是就是!这还用我说么?
    白茶:......你走开!

    先来看看本期的示例文件:

    (示例文件会放到知识星球中,小伙伴们可以搜索“PowerBI丨需求圈”,文章结尾处会有二维码。)

    将其导入到PowerBI中,结果如下:

    编写基础的代码如下:

    聚合 = 
    SUM ( '示例'[销售金额] )
    

    结果如图:

    到这里,准备工作基本完成。

    开始思考一下思路。这道题的难点在于什么,在于判定最新日期!

    首先要考虑这个固定的时间节点,让其不受筛选上下文影响。那么该使用哪个函数呢?小伙伴思考一下。

    1
    2
    3
    4
    5

    有的小伙伴说了,可以用MAX函数,因为它可以MAX文本。白茶说一下,这么说MAX函数也没有错误,但是MAX函数受当前上下文影响哦。继续思考。

    1
    2
    3
    4
    5

    现在可以公布答案:想跳出当前筛选上下文,那么就需要判定行上下文的最新日期值。判定行上下文属于什么?迭代啊!所以,正确答案是用MAXX函数(或者是其他迭代函数,比如MINX函数)!

    迭代的问题解决了,那么接下来的就好弄了,算移动日期可以使用正常的加减法就行,也可以使用时间智能函数,当然TOPN也是可以的。

    这里说一下,使用时间智能函数日期必须是连续不间断的,需要添加自己的日期表。用TOPN可以忽略日期挂蛋的问题,一切以事实表数据为基础,小伙伴们可以根据自己的需求自行选择。

    编写如下代码:

    周期 = 
    VAR CQ =
        MAXX ( ALL ( '示例'[日期] ), '示例'[日期] )
    VAR SQ =
        SELECTEDVALUE ( '示例'[日期] )
    VAR DQ =
        TOPN ( 1, FILTER ( ALL ( '示例'[日期] ), '示例'[日期] = SQ - 7 ), '示例'[日期], DESC )
    VAR LS =
        CALCULATE (
            '示例'[聚合],
            FILTER ( ALL ( '示例'[日期] ), '示例'[日期] <= SQ && '示例'[日期] > DQ )
        )
    RETURN
        LS
    

    结果放在TABLE中查看:

    右边TABLE的计算结果没什么问题,但是显示的不对,想按照之前的方式显示,只显示最新日期以及相隔七天的累计值,这种情况该怎么处理呢?

    (白茶想说:@冬哥威武!)
    有请MOD函数!

    语法=
    MOD(<number>, <divisor>)
    

    MOD函数的第一参数是被除数,第二参数是除数,结果返回的是余数。需要注意的是除数不能为0。

    修改代码如下:

    七日周期 = 
    VAR CQ =
        MAXX ( ALL ( '示例'[日期] ), '示例'[日期] )
    VAR SQ =
        SELECTEDVALUE ( '示例'[日期] )
    VAR DQ =
        TOPN ( 1, FILTER ( ALL ( '示例'[日期] ), '示例'[日期] = SQ - 7 ), '示例'[日期], DESC )
    VAR LS =
        CALCULATE (
            '示例'[聚合],
            FILTER ( ALL ( '示例'[日期] ), '示例'[日期] <= SQ && '示例'[日期] > DQ )
        )
    RETURN
        IF ( MOD ( CQ - SQ, 7 ) = 0, LS, BLANK () )
    

    结果如下:

    这次显示的没有任何问题,解释一下代码含义:

    CQ在这里是跳出筛选上下文,利用MAXX函数迭代行上下文获取最新日期。

    SQ是利用SELECTEDVALUE函数智能匹配当前上下文的数值。

    DQ是利用TOPN函数,返回固定间隔的日期。

    LS利用CALCULATE+FILTER函数的经典模式分别求出各个时间段的累计值。

    最后,IF利用MOD函数判断余数是否为0,如果日期正好间隔7天,那么数据显示,否则显示空。

    小伙伴们,明白了么?修改一下代码,求出上期:

    七日上期 = 
    VAR CQ =
        MAXX ( ALL ( '示例'[日期] ), '示例'[日期] )
    VAR SQ =
        SELECTEDVALUE ( '示例'[日期] )
    VAR DQ =
        TOPN ( 1, FILTER ( ALL ( '示例'[日期] ), '示例'[日期] = SQ - 7 ), '示例'[日期], DESC )
    VAR LS =
        CALCULATE (
            '示例'[聚合],
            FILTER ( ALL ( '示例'[日期] ), '示例'[日期] <= SQ-7 && '示例'[日期] > DQ-7 )
        )
    RETURN
        IF ( MOD ( CQ - SQ, 7 ) = 0, LS, BLANK () )
    

    结果如图:

    这里修改一下时间间隔就可以了。原本到这里是可以结束的,但是!还有最后一个问题,移动!所以咱们继续。

    根据自己的需求,添加属于自己的参数值,修改代码如下:

    移动周期 = 
    VAR CQ =
        MAXX ( ALL ( '示例'[日期] ), '示例'[日期] )
    VAR SQ =
        SELECTEDVALUE ( '示例'[日期] )
    VAR DQ =
        TOPN (
            1,
            FILTER ( ALL ( '示例'[日期] ), '示例'[日期] = SQ - [移动周期 值] ),
            '示例'[日期], DESC
        )
    VAR LS =
        CALCULATE (
            '示例'[聚合],
            FILTER ( ALL ( '示例'[日期] ), '示例'[日期] <= SQ && '示例'[日期] > DQ )
        )
    RETURN
        IF ( MOD ( CQ - SQ, [移动周期 值] ) = 0, LS, BLANK () )
    

    修改上期代码:

    移动上期 = 
    VAR CQ =
        MAXX ( ALL ( '示例'[日期] ), '示例'[日期] )
    VAR SQ =
        SELECTEDVALUE ( '示例'[日期] )
    VAR DQ =
        TOPN (
            1,
            FILTER ( ALL ( '示例'[日期] ), '示例'[日期] = SQ - [移动周期 值] ),
            '示例'[日期], DESC
        )
    VAR LS =
        CALCULATE (
            '示例'[聚合],
            FILTER (
                ALL ( '示例'[日期] ),
                '示例'[日期] <= SQ - [移动周期 值]
                    && '示例'[日期] > DQ - [移动周期 值]
            )
        )
    RETURN
        IF ( MOD ( CQ - SQ, [移动周期 值] ) = 0, LS, BLANK () )
    

    修改一下日期间隔就好,结果如下:

    小伙伴们,这就得出了我们想要的结果了。(因为最开始参数没选择,所以模型默认是错误的,选择参数即可。)至于其他的比率的变化,这里就不赘述了。

    小伙伴们,GET了么?
    (BOSS:哎呦,不错哦!)

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

    相关文章

      网友评论

        本文标题:销售需求丨移动周期汇报(修)

        本文链接:https://www.haomeiwen.com/subject/bzxsektx.html