前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PowerBI 时间智能终极奥义,用 WTD 练手

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

作者头像
BI佐罗
发布2020-06-04 11:02:16
1.3K0
发布2020-06-04 11:02:16
举报
文章被收录于专栏:PowerBI战友联盟PowerBI战友联盟

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

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

时间智能的逻辑本质

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

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

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

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

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

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

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

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

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

移动日期区间

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

逻辑本质如下:

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

代码语言:javascript
复制
KPI.PY = CALCULATE( [KPI] , DATEADD( Dates[Date] , -1 , YEAR ) )

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

缩放日期区间

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

逻辑本质如下:

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

代码语言:javascript
复制
KPI.YTD = CALCULATE( [KPI] , DATESYTD( Dates[Date] ) )

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

移动和缩放日期区间

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

代码语言:javascript
复制
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 的计算,虽然有很多种实现方法,这里给出最简单的一种,如下:

代码语言:javascript
复制
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 来进行运用就会有一种豁然开朗的感觉。

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI战友联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 时间智能的逻辑本质
  • 移动日期区间
  • 缩放日期区间
  • 移动和缩放日期区间
  • 考一考
  • 实践 WTD 计算
  • 总结
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档