|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
在DAX函数中没有专门一个表达同比或者环比,需要用嵌套的方法来实现。
算法解析:
通过第一部分,我们了解到同比和环比的计算方法,基本元素是本期数、上期数以及同期数,这三个都是绝对值,也就是说要计算本期的绝对值,以及临近周期的绝对值(环比需要的上期数据)、跨上一级的同一周期的绝对数(同比需要的绝对数),通过这个分析,其实要计算同比或者环比,我们只需要转换为计算这三个值,然后再通过简单的四则运算就可以计算出同比和环比。
先说说本期数据,按照月度来算,也就是说本月发生额,我们就可以想到使用时间智能函数中的TOTALMTD 函数,表示从月初到现在的表达式的和,表达式我们可以使用聚合函数SUM,就可以求出本期数据。
而上期数据,我们还是用月度来说明,如果说本月的数据是完整的一个月数据,那么上个月的数据,我们也可以借助时间智能函数,比如说PREVIOUSMONTH 函数,或者使用DATEADD 函数都可以。但是如果不是完整的月度日期,比如说本期数是1-15日,对应的上期数据应该是上个月的1-15日,如果使用PREVIOUSMONTH 函数返回的是上个月完整月份的数据,那和我们同比的概念就不一样了,即我们不能用15天的数据和上个月整月的数据做比较。因此就需要换另一种方法,我们首先要计算本期最后一天的日期,可以使用LASTDATE 函数,然后再用DATEADD函数,将这个日期往前退一个月,即DATEADD(LASTDATE (),-1,MONTH),返回就是上月本期最后一天的日期,最后再用TOTALMTD 函数的特点,即TOTALMTD(SUM(),DATEADD(LASTDATE (),-1,MONTH))就可以求得上个月1日至上个月和本期同一天日期一样的日期的表达式的和,即可以求出上期值。
而同期值,也可以使用上期值的求法,只是将MONTH换成YEAR即可,即TOTALMTD(SUM(),DATEADD(LASTDATE (),-1,YEAR))。
3、案例示范
我们用一个案例来说明一下这个嵌套函数的用法。
有如下图一组销售数据:
当对DATE字段降序排序时,我们看到最大的一天是2021年3月23日,即本期的日期不是满月日期数据。
首先我们先要创建几个度量值:
1、创建“销售额”度量值:
销售额:=SUM([SalesAmount_USD])
如下图所示:
2、创建“本期销售额”度量值:
本期销售额:=TOTALMTD([销售额],ResellerSales_USD[DATE])
效果如下图所示:
3、创建“上期销售额”度量值:
上期销售额:=TOTALMTD([销售额],DATEADD(LASTDATE(ResellerSales_USD[DATE]),-1,MONTH))
效果如下图所示:
4、创建“环比”度量值:
环比:=DIVIDE([本期销售额],[上期销售额])-1
效果如下图所示:
5、创建“同期销售额”度量值:
同期销售额:=TOTALMTD([销售额],DATEADD(LASTDATE(ResellerSales_USD[DATE]),-1,YEAR))
效果如下图所示:
6、创建“同比”度量值:
同比:=DIVIDE([本期销售额],[同期销售额])-1
效果如下图所示:
7、将创建的这几个度量值返回到透视表中展示,如下图所示:
我们验证一下这组数据的准确性,首先第一个销售额度量值为11,224,296,这个表示的SalesAmount_USD字段的总和,我们通过原始数据计算一下,如下图所示:
通过手动计算,这个值和我们度量值计算的是一样的。我们再验证一下同期值的数据,计算的是最近一个月从1号到当前日期的数据,即2021年3月1日至2021年3月23日的数据,度量值计算的结果是256,123,手动计算的结果如下图所示:
通过对比,我们得到的结果是度量值计算的结果和手动计算的结果是一致的,同期的度量值,我们也可以用这种方法来多对比,发现也是一致的,如下图所示:
也就验证了我们这种算法是正确的,不管当前的数据是不是满月的,都可以计算出环比和同比来。
环比和同比是日常分析中一组非常重要的指标,本期我们介绍的是在当期非满月的情况下的算法,希望可以帮到大家解决这个小的问题。
|
评分
-
1
查看全部评分
-
|