欢迎光临散文网 会员登陆 & 注册

Power BI之DAX神功:第2卷第13回 计算平移后的周期PARALLELPERIOD详解

2021-10-12 11:46 作者:孙兴华zz  | 我要投稿

关于PARALLELPERIOD函数我们在《火力全开》中已经详细介绍过了,距《火力全开》杀青已经过去10个月了,今天我们对网友遇到的问题综合解决一下。

一、PARALLELPERIOD与DATEADD的区别

表名:Sheet1

1.既然都是表函数,我们先放到新建表中查看

【新建表】表1 = DATEADD('Sheet1'[日期],-1,YEAR)

【新建表】表2 = PARALLELPERIOD('Sheet1'[日期],-1,YEAR)

两个函数参数作用是相同的,只是函数功能不同!同样是向左平移一年:

2.DATEADD函数工作流程:

(1)Sheet1中最大日期是2021/3/1

(2)取向左平移一年,且日期小于等于2020/3/1的数据

3.PARALLELPERIOD函数工作流程:

(1)Sheet1中最大日期是2021/3/1,获取最大年份是2021年

(2)取向左平移一年,且日期小于2021/1/1的数据

4.我们写度量值,放到矩阵中观察

【度量值】总销售 = sum(Sheet1[销售]) 

// 每个日期对应的值

【度量值】D = CALCULATE([总销售],DATEADD('Sheet1'[日期],-1,YEAR)) 

// 每个日期对应的同比日期值,例如2019年1月1日对应2018年1月1日

【度量值】S = CALCULATE([总销售],PARALLELPERIOD('Sheet1'[日期],-1,year))

// 每个日期所在年对应的同比年总和的值,例如2019年1月1日,对应2018年全年总和100

5.回答网友问题

答:第1个问题,用哪个日期是您的业务知识,我不懂您的业务,所以我不知道用哪个日期

打个比方:大家都知道常用的3个紧急电话110,119,120,这三个电话在中国都管什么的,我不解释了,但是当我到达美国以后,拨打这3个电话没用了,美国有相对应的电话,在美国我问任何一个人:“你们这里叫救护车打什么电话?” 他们应该知道。

在国内,就好比是您自己的业务。现在您对非同事以外的人讲,就相当于出国了,所以自己的号码与他国不互通,需要使用共同语言,120并不通用,通用的是救护车。

回答第2个问题,本年度平均值和上年度平均值,您的公式我没看懂,我们重新来看案例:

我以年为例 ,如果是月或季度,请修改相应的英文。

通用语言案例如下,以下两张表,通过商品编码一对多连线

我故意写出每一个步骤,方便大家观看:

【度量值】总销售 = sumx('销售表','销售表'[销量]*RELATED('商品表'[售价])) 

【度量值】本年合计 = TOTALYTD([总销售],PARALLELPERIOD('销售表'[日期],0,YEAR))

【度量值】每年天数 = TOTALYTD(COUNTROWS(DISTINCT('销售表'[日期])),PARALLELPERIOD('销售表'[日期],0,YEAR))

【度量值】每年平均 = [本年合计]/[每年天数]

以上我们求的是本年均价,修改以下两个度量值

【度量值】本年合计 = TOTALYTD([总销售],PARALLELPERIOD('销售表'[日期],0,YEAR))

【度量值】每年天数 = TOTALYTD(COUNTROWS(DISTINCT('销售表'[日期])),PARALLELPERIOD('销售表'[日期],0,YEAR))

因为本年是不平移,就是0,去年就是平移,-1

【度量值】去年合计 = TOTALYTD([总销售],PARALLELPERIOD('销售表'[日期],-1,YEAR))

【度量值】每年天数 = TOTALYTD(COUNTROWS(DISTINCT('销售表'[日期])),PARALLELPERIOD('销售表'[日期],-1,YEAR))

二、PARALLELPERIOD与上一个/下一个的区别

《火力全开》笔记27课04,我们讲过NEXT(下一个)系列和PREVIOUS(上一个)系列函数

《火力全开》中我们使用Next进行的举例,现在我们用PREVIOUS举例

为了清晰的表达,我们使用一张新表格:

表名:Sheet1

步骤如下:

【1】做动态日期表(为了获得更多颗粒度)

日期表 = ADDCOLUMNS(

CALENDAR(FIRSTDATE('Sheet1'[日期]),LASTDATE('Sheet1'[日期])),

"年", YEAR ( [Date] ),

"季度", ROUNDUP(MONTH([Date])/3,0),

"月", MONTH([Date]),

"周", weeknum([Date]),

"年季度", year([date]) & "Q" & ROUNDUP(MONTH([Date])/3,0),

"年月", year([Date]) * 100 + MONTH([Date]),

"年周", year([Date]) * 100 + weeknum([Date]),

"星期几", WEEKDAY([Date])

)

【2】做以下度量值

总销售 = sum(Sheet1[销售]) 

A = calculate([总销售],PARALLELPERIOD('日期表'[Date],-1,YEAR))

B = calculate([总销售],PREVIOUSYEAR('日期表'[Date])) 

【3】矩阵中行标题放:日期表中的年季度

你会发现,PARALLELPERIOD和PREVIOUSYEAR结果是一样的,2021年的上一年只有一个季度返回上一年的总销售36524,只是后者不带总计。

【4】为了理解这个问题,我们将公式修改为上个月:

A = calculate([总销售],PARALLELPERIOD('日期表'[Date],-1,Month))

B = calculate([总销售],PREVIOUSMonth('日期表'[Date])) 

现在,我们将行标题修改为:日期表中的Date列

主要的区别就在小计和总计上面,我们观察小计

以2021年第2季度为例,PREVIOUSMONTH显示上个月的也就是2021年3月的19778

而PARALLELPERIOD显示本季度平移一个月后 2021.3、2021.4、2021.5三个月的总和

我们再观察年小计:

以2021年为例,PREVIOUSMONTH显示上个月的也就是2020年12月的14198

而PARALLELPERIOD显示本年平移一个月的总和,2020.12~2021.6的总和。135468=148612-27342+14198

所以,PREVIOUSMONTH不能有总计,它返回的都是上一个月的值。

《孙兴华讲PowerBI火力全开》PowerBI必学课程

https://www.bilibili.com/video/BV1qa4y1H7wp

《DAX神功》文字版合集:

https://www.bilibili.com/read/readlist/rl442274

《DAX神功》视频版合集:

https://www.bilibili.com/video/BV1YE411E7p3

PowerBI(DAX函数)、PowerQuery(M函数)、Python办公自动化、Python爬虫、Python数据分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等

https://www.bilibili.com/read/cv10222110


Power BI之DAX神功:第2卷第13回 计算平移后的周期PARALLELPERIOD详解的评论 (共 条)

分享到微博请遵守国家法律