• 数据可视化之DAX篇(二十六)Power BI度量值:滚动聚合


    https://zhuanlan.zhihu.com/p/85996745

    上一篇文讲了累计聚合,这篇文章继续讲一下滚动聚合,比如常用的MAT计算,Moving Annual Total,滚动年度总计,即向前滚动12月的合计数。

    滚动年度求和,也经常用于财务上的滚动预算,看完这篇文章,你以后会很轻松的计算出需要的数据了。


    模拟一份2018年1月至2019年7月的订单数据,

    利用CALENDARAUTO生成一份日期表,按日期列建立关系,那么如何计算向前滚动12月的销售额合计呢?

    其实很简单,新建度量值,

    MAT =IF(MIN('日期表'[日期])<=[订单最大日期], CALCULATE( [收入], DATESINPERIOD( '日期表'[日期], LASTDATE('日期表'[日期]),-1,YEAR) ))

    这里直接用了上篇文章的思路,先判断最大订单日期,这样就可以避免最新订单日期之后的计算。

    这个度量值的关键是DATESINPERIOD函数的使用,它用来返回移动一定间隔的时间段,在上面的度量值中,正好利用它返回向前滚动一整年的日期。

    关于这个时间智能函数的用法,可以参考函数卡片:

    结果如下:

     

    因为是从2018年1月才开始有数据,所以2018年12月之前的滚动求和都是不满12个月的数据。如果要求不满12月,就不要显示数据,从达到12个月以后再开始计算,可以优化一下这个度量值,

    MAT 优化 =IF(MIN('日期表'[日期])<=[订单最大日期], CALCULATE( IF( COUNTROWS( FILTER(VALUES('日期表'[月份]),[收入]>0) )=12, [收入]), DATESINPERIOD( '日期表'[日期], LASTDATE('日期表'[日期]),-1,YEAR) ))

    结果如下:

     

    除了滚动求和,求移动平均同样是很常见的需求,求往前推一年的平均数,只要把上面度量值中,CALCULATE的第一个参数,改成使用AVERAGE来聚合。

    在实际计算时,求往前推一年的平均值并不是必须要求满12个月才开始计算,所以直接使用上面第一个度量值的写法,

    滚动平均 年度=IF(MIN('日期表'[日期])<=[订单最大日期], CALCULATE( AVERAGE('订单表'[销售额]), DATESINPERIOD( '日期表'[日期], LASTDATE('日期表'[日期]),-1,YEAR) ))

    上面的例子都是按照一年计算滚动粒度的,如果你需要其他数量和粒度的计算,正常情况下更改一下DATESINPERIOD函数的参数就行了。

  • 相关阅读:
    Python练习题 016:猴子吃桃
    Date() 及其 如何验证用户输入的日期是合法的
    关于事件触发的一个小tips
    KVO监听导航栏
    使用CoreText动态下载更换字体
    UICollectionView 的使用
    echarts散点图搭配时间轴
    使用百度echarts画图表的步骤
    canvas画图中drawImage使用
    html5canvas简单画图
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12821280.html
Copyright © 2020-2023  润新知