从数据到信息
从信息到洞察

自动创建日期表的原理

自动创建日期表是只在 Desktop 里提供的一项功能,使得基于简单模型的日期分析不必再手工创建日期表,其功能的官方描述是“为模型中具有日期或日期/时间数据类型的每个字段自动创建一个隐藏的日期表”。

PBI Desktop 自动创建日期表的原理

    这个功能为实现快速分析提供了便利,但是其自身隐藏了一些复杂性,新手在使用它时很容易因为这种复杂性而得出错误结果。我建议你只在彻底了解自动日期表的原理之后再使用此功能,而且也是谨慎的使用,如果对此不了解,请务必使用自建的日期表

围绕这个功能先提出 3 个问题,如果你已经知道答案,本篇可以略过。

1. 任意选择日期列拖到值区域,会自动创建日期层次结构,其中包含了模型中本不具备的值,这是如何实现的?(下图 Quarter 和 Month 的值不包含在原始数据中)

PBI Desktop 自动创建日期表的原理

2. 如何使用这个隐藏的日期表完成时间智能计算?(即不需要考虑数据源的日期是否连续)

3. 自动创建日期表的原理是什么,它只能辅助简单模型日期计算的原因是什么?

问题 1:为什么

在 Excel 中执行类似的操作,也可以得到包含日期层次结构的值,它们在 PowerPivot 源数据中是隐式创建的,你可以在模型中直观的观察到这种行为。

PBI Desktop 自动创建日期表的原理

Excel 创建的日期层次,所有值已经包含在模型里,但在 PBI Desktop 中,似乎观察不到这种行为。那么没有隐式创建行为的发生,这些值是如何出现的呢,答案就在那张自动创建的日期表中,所有通过 Desktop 自动创建的日期层次结构的值,都来源于那张隐藏的日期表。

问题 2:怎么用

某些时间智能函数要求使用连续日期才能计算,在数据源日期不连续的情况下,通常的做法是手工创建一张日期表,与源数据建立关系。如果你精于此道,可能已经熟知通过 M 语言或者 DAX 函数自动创建日期表的 N 种方法。不过自从这个新特性出现后(2016 年 4 月更新),可以直接调用这张隐藏的日期表解决问题。

以下面这 2*2 的原始表为例,两列都是日期格式,Desktop 为每一列自动创建一张日期表,每张表包含了源数据中出现的所有日期所在年份的全部日期。键入完整的时间列后再加一个英文句号,可以调用这张日期表。

PBI Desktop 自动创建日期表的原理

PBI Desktop 自动创建日期表的原理

源数据 Delivery date 只有两行,而日期表包含了当年的所有日期,结果是 365。

所以,直接在日期列后面加.可以调用连续日期,在使用 dateadd 等时间智能函数的时候会方便很多。

问题 3:原理

目前为止,你已经知道每个日期格式的列都会自动关联一张日期表,而我在文章开始提到这个功能对简单模型的时间计算非常方便,在稍微复杂一些的模型里,我们需要关联多张表的日期,这个功能就帮不上忙了,依然需要手工创建日期表。

如果模型里每张表格都包含多个日期列,然后我们又导入了手工创建的日期表,会不会存在过多的日期表让模型变的臃肿呢?

答案是不会。

奥秘在于,只要将手工创建的日期表与时间列建立关系,那张隐藏的日期表就会自动消失,取消关系,它才会再次出现

以下面的模型为例(通过特殊的方法将隐藏的日期表显示出来),数据源只包含 sales 和 DateTable 两张表,sales 表有两个日期列(红框)分别与隐藏的日期表建立了关系,DateTable 有一列与隐藏日期表建立关系。最左边被模糊处理的表是一个只有一行的特殊表,与本特性的演示无关。

PBI Desktop 自动创建日期表的原理

将 DateTable 与 sales 表日期列建立关系,对应的隐藏日期表会自动消失。下面的动图演示了整个过程。

PBI Desktop 自动创建日期表的原理

最后,通过 DAX STUDIO 可以查询到隐藏日期表的内容

PBI Desktop 自动创建日期表的原理

以 LocalDateTable 开头的表均为这类日期表,只包含年/季度/月/日 四类信息,对于周或者节假日等特殊的计算需求,需要通过公式辅助实现。或者自己创建的日期表,用起来会更方便。

 

2
说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
1 评论数
1 被回复的评论
2 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
成员
自行车

“(通过特殊的方法将隐藏的日期表显示出来)”, 老师方便透露这个特殊方法吗 doge