​今年是闰年,有星友问我,在Power BI中,2月29日的上年同期是怎么计算的?

这是个好问题,正好梳理一下,PowerBI时间智能函数是如何处理不规则日期的对比数据的。

以一个模拟的订单表数据为例,订单日期涵盖了2015年、2016年和2017年,其中2016年是闰年,添加一个相匹配的日期表与之建立关系,

先建立一个基础度量值:

收入 = SUM('订单表'[销售额])

然后通过下面几个示例,来看看几个和2月29日相关的各种数据,是怎么计算的?以及时间智能函数处理闰年的计算逻辑。

2月29日-上年同期

建个上年同期的度量值:

收入 PY = CALCULATE( [收入], SAMEPERIODLASTYEAR('日期表'[日期]) )

把这个度量值放入到矩阵中看看结果:

从上面的数据可以看出,2016年2月29日和28日的上年同期数据都是48000,与2015年2月28日的数据是一样的。

2016年2月28日的上年同期数据是2015年2月28日很正常,那么为什么2016年2月29日的上年同期数据也是2015年2月28日呢?

对于不规则的日期,根据特定的要求和逻辑,可以设计不同的对比方式。比如2015年是没有2月29日的,那么2016年2月29日的上年同期可以设计为空值。而PowerBI的时间智能函数的计算逻辑,是2月29日的上年同期数据为上年2月28日的,换个角度可能更容易理解,就是2月最后一天的数据对比,无论是不是闰年。

并且观察2017年2月28日的上年同期数据,与2016年2月28日的数据一样,这很正常。只是在2017年,找不到这样的日期:它的上年同期数据,可以与2016年2月29日对应。

2月29日-本年累计的上年同期

本年累计以及本年累计的上年同期度量值可以这样写:

收入 YTD = TOTALYTD([收入],'日期表'[日期])
收入 YTD PY = CALCULATE( [收入 YTD], SAMEPERIODLASTYEAR('日期表'[日期]))

计算结果如下:

本年累计的同期对比结果,与上面当日数据的同期对比逻辑是一样的,依然是2016年2月29日的上年同期,是2015年2月28日的数据。

从上图可以看到2017年2月28日上年同期的本年累计是4087000,但是如果看2017年2月份的上年同期本年累计,却是4129000,

也就是说在本年累计的上年同期的计算中,2017年2月28日的数据和2017年2月份的数据是不一致的。

但在月份这个粒度上,2017年2月的上年同期,与2016年2月的数据完全一致,并没有问题。

2月29日-本月累计的上月

需要建本月累计和上月累计的度量值,可以这样写:

收入 MTD = TOTALMTD([收入],'日期表'[日期])
收入 MTD PM = CALCULATE( [收入 MTD], DATEADD('日期表'[日期],-1,MONTH))

结果如下:

在月度环比上,因为每个月都有29号,29号本身的数据没有问题,但在3月30号和3月31号的上月同期计算中,因为2月没有对应的日期,所以都等于2月29日的数据。

关于月度环比,这个很正常,因为即使不是闰年,3月30日和3月31日的上月同期数据,也是都等于2月28日的数据。

在日期维度月度环比的计算上,不只是闰年有2月29日才存在这个问题,其实每年都存在,因为有的月份是31天,有的月份是30天,比如7月31号的上月同期数据就是6月30日的数据。

总结

通过上面几个示例,对时间智能函数的计算逻辑总结如下:

  • 日期粒度上的计算,如果没有对应的日期,会自动等于上期最后一天的数据;
  • 月份粒度上的计算,是否为闰年,没有任何影响;
  • 在本期累计的上期计算中,可能会出现,当月最后一天的累计数与当月的累计数不一致的情况。

以上就是时间智能函数的计算逻辑,其实没有必要担心2月29日的计算问题,就像不用担心某个月是否有31号一样。如果你的业务中,需要的计算逻辑不是时间智能函数的逻辑,应根据需求调整,按通用的DAX函数和规则来写度量值,并不是一定要用时间智能函数。

关于时间智能函数的学习和运用,你还可以参考这两篇文章:

采悟:掌握时间智能函数,同比环比各种比,轻松搞定!​zhuanlan.zhihu.com

采悟:Power BI时间序列分析用到的度量值,一次全给你​zhuanlan.zhihu.com

刚开始接触Power BI,可在微信公众号后台回复"PowerBI",获取《七天入门PowerBI》电子书,轻松上手。

知乎 @采悟 PowerBI星球

如何获取当日日期_Power BI时间智能函数如何处理2月29日的?相关推荐

  1. Navicat Premium12安装_破解(亲测成功)时间:2019年7月29日

    2019年7月29日 亲测成功 1.下载 下载地址: 已经破解完毕版本下载:https://pan.baidu.com/s/1hwOf5-6E1jRLDFW9KuYPpg 提取码: i4q6 需要破解 ...

  2. 蚌埠计算机二级报名时间地点,2021年3月蚌埠市计算机二级报名时间|网上报名入口【12月29日开通】...

    &nbsp&nbsp[导读]:2021年3月蚌埠市计算机二级报名时间|网上报名入口[12月29日开通],更多安徽等级考试报名时间.考试时间以及考试模拟试题,请访问易考吧安徽等级考试栏目 ...

  3. 2021安徽计算机二级报名时间,2021年3月安徽计算机二级报名时间|网上报名入口【12月29日开通】...

    &nbsp&nbsp[导读]:2021年3月安徽计算机二级报名时间|网上报名入口[12月29日开通],更多安徽等级考试报名时间.考试时间以及考试模拟试题,请访问易考吧安徽等级考试栏目 ...

  4. Power BI Dax 之时间智能函数

    本文会对一系列的时间智能函数做分析大体如下: DATEADD,SAMEPERIODLASTYEAR,DATESMTD,DATESQTD,DATESYTD 以及这些dax函数的组合求上期,本期至今,上期 ...

  5. 获取当前月份为何要+1;获取当日日期-1的原因

    在日常解决代码时,遇到了获取当前月即日期的一个问题,从网上从到答案后,有一处问题很不懂,在那个博主获取当前月份时+1:再往后面看,又有一个 获取当日日期-1的代码,经过一番探索后的到了答案,再次记录一 ...

  6. access month函数用法_掌握时间智能函数,同比环比各种比,轻松搞定!

    时间可以说是数据分析中最常用的独立变量,工作中也常常会遇到对时间数据的对比分析.假设要计算上年同期的销量,在PowerBI中可以用CALCULATE来写个度量值[上年同期], = CALCULATE( ...

  7. oracle日期转换为季度,ORACLE时间字段取年、月、日、季度

    ORACLE时间字段取年.月.日.季度 --得到年月,日,季度 select to_char(日期,'yyyymmdd')   DATE_ID,to_char(日期,'yyyy')||'年'||to_ ...

  8. 如何计算俩日期相隔多少年,多少月,多少天或者两时间相差XX年XX月XX日

    假设时开始时间为2015年4月2日,结束时间为2019年4月4月;  需要先熟悉一下时间对象得一些方法,可参考教程http://www.w3school.com.cn/jsref/jsref_obj_ ...

  9. Windows 10发布日期提速,将于7月29日上市

    昨天的一则传闻<Windows 10或从8月31日开售,价格也遭泄露>席卷了科技媒体的头条,而就在昨天晚上,微软官方博客正式公布了发布日期,相比传言的提前了一月,将于今年7月29日正式上市 ...

最新文章

  1. 十一后我的新房就要准备准修了
  2. 谈 JavaScript 浮点数计算精度问题(如0.1+0.2!==0.3)
  3. 存储组件的实现思路分析及代码实现
  4. hadoop学习--多表关联
  5. 微信小程序里页面滚动到底部
  6. STL - 底层实现
  7. 工业以太网交换机在实际应用中的优势
  8. H G W S哪一个不是状态函数_HAWE哈威BVH11H/M/S/2-X24换向阀
  9. 【安全】CDH集群开启Kerberos安全认证
  10. 华为捕苹果,小米做黄雀
  11. 区块链 共识算法 分类
  12. 计算机共享wf,电脑怎么共享wifi网络
  13. 大数据系统及分析技术
  14. 5G工业路由器PLC无线组网远程控制
  15. 拒绝面试造火箭,工作拧螺丝——Java经典面试题分享『带答案』
  16. 软件流程和管理(二):SDLCs — Process Formal
  17. 雷军兼任小米汽车业务CEO、徐直军任华为轮值董事长 | 高管变动2021年3月29日-4月4日...
  18. css3边框线border
  19. java 获取服务器信息
  20. nCode:DesignLife案例教程三

热门文章

  1. SAP Spartacus category navigation按钮之间的间隔问题
  2. SAP Fiori Elements Service Order edit - why no http request sent
  3. 使用SAP云平台Android SDK创建Mobile应用
  4. SAP Cloud for Customer和Hybris Commerce的session保护机制
  5. Hybris commerce的promotion rule里的固定折扣功能
  6. SAP CRM Fiori My note应用 add to -append Frontend implementation
  7. run webIDE application using mock data
  8. Fiori launchpad里Enter Group name这个tile是怎么配置出来的
  9. Organization unit determine log logic enablement
  10. 如何在SAP云平台上创建Redis实例