专栏首页PowerBI战友联盟PowerBI 时间智能终极奥义,用 WTD 练手

PowerBI 时间智能终极奥义,用 WTD 练手

单纯讲解时间智能函数犹如盲人摸象,不见全貌,更不见本质。 我们之前写过很多关于时间智能函数的文章,但文本将是最为本质以及最重要的。本文属于 BI佐罗 PowerBI VIP 线下培训部分抽取。

本文不具体讲解任何一个时间智能函数,但通过本文的学习,你将可以驾驭所有时间智能函数,因为您将理解其更加本质的内容,全网首发。

时间智能的逻辑本质

准确讲,时间智能并不是时间智能,应该叫:日期智能。为了精确地描述,下面统称日期智能。

其逻辑本质是一根日期轴,如下:

从日期角度分析问题的逻辑本质是:给定一段日期区间,并计算该日期区间下的指标

通常来讲,在计算指标时,都会有一段已有的日期区间作为上下文(筛选环境),但在实际计算中,我们需要对已有的日期区间进行变换。例如:对于任何一个日期点,都可以对它计算 MTD 或 YTD,其逻辑本质是将一个日期点扩展成为一段更长的日期区间。

更准确地来考察一段日期区间,不难看出:

  • 最短的日期区间,是一个点,起点日期 d1 与终点日期 d2 是重合的。
  • 起始点非重合的日期区间是整数点连续的。 含义是其连续性体现在整数上,如: 1月1日…1月5日是连续的 5 日。

为了驾驭日期维度的计算,我们需要掌握对日期的逻辑变换核心规则:

  • 第一,移动一段日期区间
  • 第二,缩放一段日期区间
  • 第三,移动并缩放一段日期区间的连续变换

下面专门来讨论这三种情况。

移动日期区间

需要移动日期区间的业务场景包括:对一段日期区间移动到其去年同期或上月同期等。

逻辑本质如下:

作为 DAX 引擎的设计者应该给业务人员一种便捷的方式,让日期区间可以得到便捷的移动。例如:

KPI.PY = CALCULATE( [KPI] , DATEADD( Dates[Date] , -1 , YEAR ) )

其中,DATEADD 完成了移动日期区间的动作。不管您学习了哪些日期智能函数,应该注意其逻辑本质。

缩放日期区间

需要缩放日期区间的业务场景包括:MTD,QTD,YTD一般是放大;而月初/末,年初/末是缩小等。

逻辑本质如下:

作为 DAX 引擎的设计者应该给业务人员一种便捷的方式,让日期区间可以得到便捷的缩放。例如:

KPI.YTD = CALCULATE( [KPI] , DATESYTD( Dates[Date] ) )

其中,DATESYTD 完成了缩放日期区间的动作。不管您学习了哪些日期智能函数,应该注意其逻辑本质。

移动和缩放日期区间

移动和缩放日期区间是结合前两者进行连续性操作,如下:

KPI.YTD.PY =
CALCULATE(
    CALCULATE( [KPI] , DATESYTD( Dates[Date] ) ),
    DATEADD( Dates[Date] , -1 , YEAR )
)

到这里,其实就理解了关于日期智能函数的所有逻辑本质。

接下来,我们需要根据实际业务场景来组合这些变换

考一考

下面的题目,如果您可以全部做对,则表示您对日期智能函数有了熟练的理解。请听题:

【问题一】日期智能函数需要一根日期轴,应该用谁来提供?

  • A 日期表
  • B 任意日期列

【问题二】日期智能函数可以变换日期区间,为了清除外部其他日期区间的影响,需要:

  • A 用 ALL 清除外部筛选
  • B 用 REMOVEFILTERS 清除外部筛选
  • C 不用管

【问题三】如果订单表有订单日期和发货日期,需要按不同日期计算销售额,应该建立几个日期表:

  • A 一个
  • B 两个

【问题四】NEXTDAY 是日期智能函数吗?它返回的是值还是表?

  • A 值
  • B 表

【问题五】某个闰年的2月29日的去年同期(DATEADD(…,-1,YEAR))是哪一天?

  • A 空
  • B 2月28日
  • C 3月1日
  • D 报错

【问题六】某个闰年的2月29日的上月同期(DATEADD(…,-1,MONTH))是哪一天?

  • A 1月29日
  • B 1月28日
  • C 1月31日

【问题七】某个闰年的2月29日的上月同期(DATEADD(…,-1,MONTH))是哪一天?

  • A 1月29日
  • B 1月28日
  • C 1月31日

【问题八】2020 年 5 月已过 13 日,MTD 的去年同期是哪段日期?

  • A 2019.05.01 到 2019.05.13
  • B 2019.05.01 到 2019.05.31

上面 8 个问题很常见,都是初学者容易提出的问题,你可以通过试验来验证答案。(将在直播中一起分析)

实践 WTD 计算

在默认的日期智能的计算中,并不包括 WTD 的计算,虽然有很多种实现方法,这里给出最简单的一种,如下:

KPI.WTD =
CALCULATE(
    [KPI] ,
    DATESINPERIOD( '日期'[Date] , MAX( '日期'[Date] ) , - WEEKDAY( MAX( '日期'[Date] ) , 2 ) , DAY )
)

周和月,周和年的结构都不同,周是有固定的 7 天的,因此,通过本文的学习,我们可以这样构建逻辑结构如下:

  • 选择日期区间的最后日期作为参考点日期
  • 计算该日期的星期几
  • 缩放该日期到周一

有的伙伴可能会问:MAX( ‘日期’[Date] ) 用了两次,如果使用 VAR 建立一个变量就可以节省一次计算。从表面上,看上去是这样的,但实际上 DAX 引擎是一个聪明的引擎,即使按照这里的重复两次 MAX 的写法,DAX 引擎也会把它自动优化掉。当然,不同的案例和场景要看具体的 DAX 公式。这里仅仅是作为一个完整的补充。

总结

为了完全驾驭时间智能,本质上,首先学习的不应该是时间智能函数,而是应该理解在分析的时候,分析师需要用逻辑来思考业务问题,而不是陷入一堆 DAX 函数。从学习 DAX 到超越 DAX,达到更加逻辑的状态,再回到 DAX 来进行运用就会有一种豁然开朗的感觉。

任何一份报告的任何一个图表都需要对日期进行控制,对日期进行控制就需要:

  • 设置日期区间
  • 移动,缩放或移动且缩放连续变换一段日期区间

完。驾驭日期智能函数的本质在于:对一段日期区间(日期轴)进行移动或缩放或相结合的连续变换,仅此而已

本文分享自微信公众号 - PowerBI战友联盟(powerbichina),作者:BI佐罗

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【DAX 系列】分析师必备,日期表模板

    很多小伙伴问日期表模板,那这次分享一个截止 2020.1 为止,可以看到的相对好用的日期表模板,这也是罗叔一直使用的模板。

    BI佐罗
  • PowerBI 保持数据刷新后仍显示最后一天

    PowerBI 提供了自动化的报表,每天都会更新。问题是如何保持报告每天都被默认选择为当天?

    BI佐罗
  • PowerBI 零基础支持上百指标多日期切换分析模板

    本案例有着强大而非常实用的业务背景,几乎适用于任何规模和发展阶段的企业,而使用者却根本不需要理解什么是PowerBI或商业智能,使用者只需要自己的业务指标是什么...

    BI佐罗
  • 东哥陪你学PowerBI——日期表

    常在群里看到很多关于对日期表的疑问和困惑,尤其是刚进群的初学者。那今天我们就来聊一下,日期表是怎么回事,在业务分析里究竟起了什么作用?

    公众号PowerBI大师
  • 如何在Power Pivot中通过添加列计算不连续日期移动平均?

    之前我们讲了连续日期的移动平均的求法,那我们这次来看下如果不连续日期如何计算移动平均。

    逍遥之
  • SAP PP计划订单和生产订单的日期计算

    SAP PP 中关于计划订单和生产订单的日期计算 ,计划单的基本完成日期=上级物料需求日期-物料主数据MRP2视图的收货处理时间天数(全部以工厂日历的工作日计算...

    用户5495712
  • 【DAX 系列】分析师必备,日期表模板

    很多小伙伴问日期表模板,那这次分享一个截止 2020.1 为止,可以看到的相对好用的日期表模板,这也是罗叔一直使用的模板。

    BI佐罗
  • 这样的Power BI周分析你见过吗?

    零售、电商、教育等领域的诸多业务场景中需要按周进行分析,然而Power BI并未提供周粒度的时间智能函数,这让很多人想分析时感觉力不从心、无从下手。

    陈学谦
  • PowerBI 保持数据刷新后仍显示最后一天

    PowerBI 提供了自动化的报表,每天都会更新。问题是如何保持报告每天都被默认选择为当天?

    BI佐罗
  • Java8新日期处理API

    Java8引入了一套全新的时间日期API,本篇随笔将说明学习java8的这套API。 java.time包中的是类是不可变且线程安全的。新的时间及日期API位...

    用户1212940

扫码关注云+社区

领取腾讯云代金券