工作技巧 | 展示某指定年月之前 12 个月份的销售额


本期重点:
1.使用度量值计算得到某个指定年月之前的十二个月份
2.解决总计行问题,在总计行计算上述区间内的销售总额

小伙伴们好啊,日常工作场景中我们总会遇到一些比较有难(qi)度(pa)的需求。今天就和大家分享一个脑洞大开的案例。先看效果图:

当我们在年月切片器中选中某个月的时候,左侧的table会自动计算出从当前切片器的年月向前移动12个月的各自月份销售额。
该案例的难点在于:
如何通过给定的切片器中的年月,在table中拖拽出前12个月的年月信息
如何在总计行正确的显示前12个月销售总额
接下来就随我一起玩转这个案例吧!

第一步:构建数据模型

如下图示:
file

在我们的模型中一共有三张表:日期表,销售数据和参数表(辅助日期表)。日期表和销售数据构成一对多关系。参数表是由日期表复制出来的,和其他两个表之间不建立关系。其中,参数表和日期表需放置到画布中的字段都按照各自的序号做了按列排序。还需要指明的是,在画布中,年月筛选器用的是参数表的年月字段。而table中的年月字段则是来自于真正的日期表。

第二步:解决在画布中拖拽出前12个月的问题

首先编写如下度量值:

NumberOfDates = 
VAR LastDateOfSlicer =
    LASTDATE ( '辅助日期表'[Date] ) --辅助日期表最后日期
VAR StartDateOfSlicer =
    EDATE ( LastDateOfSlicer, -12 ) + 1 --向前移动12个月的日期
VAR Result =
    COUNTROWS (
        FILTER (
            '日期表',
            '日期表'[Date] >= StartDateOfSlicer
                && '日期表'[Date] <= LastDateOfSlicer
        )
    )
RETURN
    Result

对该度量值的释义描述如下:
通过切片器筛选后的参数表,拿到参数表中的最后日期(LastDateOfSlicer);
用该日期向前移动12个月,计算出需要的开始日期(StartDateOfSlicer);
然后在table中的上下文筛选出两个日期之间的日期,最后用COUNTROWS计算天数。
一起看下效果图:
file

当切片器停留在19年3月的时候,我们需要的开始日期是18年4月份。在table中,这两个日期之间的月份,都计算出了各个月对应的天数。而两个日期之外的日期计算出的天数为0。
看到这里,相信聪明的小伙伴已经猜到接下来要如何编写度量值了。在计算销售额之前,先判断当前上下文的日期天数是否大于0即可:

file

得到的效果图如下:

file

第三步:解决总计行问题

在第二步中我们初步解决了这个问题,但不完美的地方在于,总计行的计算不是过去12个月的和。对这个问题的解释是,在总计行将包含日期表的所有日期,而判断条件是只要总天数大于0就进行求和。所以,在总计行将计算所有年月的销售额。在这里,我们给出完整度量值,如下:

SalesAmount LTM = 
VAR LastDateOfSlicer =
    LASTDATE ( '辅助日期表'[Date] )
VAR StartDateOfSlicer =
    EDATE ( LastDateOfSlicer, -12 ) + 1
VAR NumberOfDates =
    COUNTROWS (
        FILTER (
            '日期表',
            '日期表'[Date] >= StartDateOfSlicer
                && '日期表'[Date] <= LastDateOfSlicer
        )
    )
VAR Result =
    IF (
        NumberOfDates > 0,
        CALCULATE (
            SUM ( '销售数据'[金额] ),
            KEEPFILTERS ( '日期表'[Date] <= LastDateOfSlicer
                && '日期表'[Date] >= StartDateOfSlicer )
        )
    )
RETURN
    Result

在对销售额求和前,通过CALCULATE添加一个求和条件,确保table中上下文的日期在两个日期之间。关于KEEPFILTERS的具体使用方法,请参照之前的重点函数讲解:
重点函数 | KEEPFILTERS用法介绍
这里就不再赘述了。
至此,我们总算把该案例计算的整个过程还原了一遍。更加复杂的问题是,如何对这12个月的销售额进行累计求和,时间智能函数TOTALYTD在这里显然不再起作用。篇幅所限,大家可以用来练练手。
好了,祝大家学习愉快,下期再见!

  • PowerPivot工坊原创文章,转载请注明出处!

    如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。


长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~

Power Pivot工坊