[知识体系] 标记日期表的作用

  [复制链接]
查看175196 | 回复151 | 2021-2-21 18:55:57 | 显示全部楼层 |阅读模式
标记为日期表是使用时间智能函数的一项准备工作,Excel 和 Power BI 都提供标记为日期表的功能,本文将介绍标记日期表的原因以及如何使用等效方案

如果表间关系是通过日期列定义的,时间智能函数可以正常工作,因为时间智能函数对日期表的日期列应用筛选器,自动覆盖日期表其他列的筛选条件。这也是为什么没有标记日期表,公式依然可以正常计值的原因。但是在某些情况下,你可能会基于其他列建立关系,比如有的日期表使用整数列建立关系,例如示例中的 Date[DateKey]。


7094211936381.jpeg

Sales 和 Date 表之间的关系从 Date 列(日期类型),变更为 DateKey 列(整数类型)


DateKey 列包含格式为 YYYYMMDD 的整数值(例如,20080120 表示 2008 年 1 月 20 日),在这种情况下,标记为日期表的特性必须在日期表中处于激活状态,否则 Date[DateKey]列上的筛选器不会覆盖日期表上其他现有的活动筛选器。例如,考虑数据透视表如图 7-14 所示:度量值 Sales Amount Jan-Feb 2008 Single Column 没有达到预期的效果,因为它总是返回与初始度量值 Sale Amount 相同的值,只筛选 2008 年 1 月和 2 月的数据(如果外部上下文中不包括这些日期则返回空白)。


7094211936382.jpeg

图 7-14 Sales Amount Jan-Feb 2008 Single Column 不会将所选内容扩展到报表中的行选择之外的日期,因为它不会替换年份和月份的现有筛选器


这种现象的原因是日期表上有其他活动的筛选器,来自于数据透视表的行标签。例如,1 月和 2 月的行只显示每个月的值,而不是两者的总和,其他月份返回空白值,而并非无论选择任何日期都相同的重复值,


7094211936383.jpeg

图 7-12 Sales Amount Jan-Feb 2008 始终显示 2008 年 1 月和 2 月的总和, 而不考虑行上的日期范围选择


如图 7-12 所示。如果你启用标记为日期表特性,并且指定日期列为’Date'[Date],那么当 CALCULATECALCULATETABLE 函数的筛选器参数使用来自这个日期列的筛选器时,DAX 将自动从日期表的所有其他列中删除筛选器。(这样做之后,你将得到与图 7-12 中相同的结果。)


考虑以下公式模板:
  1. CALCULATE (
  2.            <expr>,
  3.            'Date'[Date] >= DATE ( 2008, 1, 1 )
  4.             && 'Date'[Date] <= DATE ( 2008, 2, 29 ),
  5.             <filter2>,
  6.             ...
  7.             <filterN>
  8. )
复制代码

对于使用整数列与模型建立关系的日期表,借助标记为日期表功能将关系列重新指定为日期类型的列之后,对于使用日期列作为筛选器参数的公式,DAX 将使用与下面的公式相同的技术移除相同表的任何已有筛选器:
  1. CALCULATE (
  2.            <expr>,
  3.            'Date'[Date] >= DATE ( 2008, 1, 1 )
  4.             && 'Date'[Date] <= DATE ( 2008, 2, 29 ),
  5.             <filter2>,
  6.             ...
  7.             <filterN>,
  8.             ALL ( 'Date' )
  9. )
复制代码

只有当你正确的使用了标记为日期表这个特性后,时间智能函数才会正常工作。
如果想在没有设置此特性的模型中定义与时间计算相关的度量值,你可以在 CALCULATE 函数中放置 ALL (&#8216;Date&#8217;)作为筛选器参数,用来移除那些可能影响最终结果的,来自日期表其他列的筛选器

如果你定义这样一个筛选器参数,它迭代整个日期表而不是单列,新的日期筛选器将覆盖日期表上的任何现有的筛选上下文ALL (&#8216;Date&#8217;)也就不再需要了。例如,你可以用这种方式编写前面的公式模板,这样即使标记为日期表的设置未激活,公式仍然可以正常工作:
  1. CALCULATE (
  2.            <expr>,
  3.            FILTER (
  4.                    ALL ( 'Date' ),
  5.                    'Date'[Date] >= DATE ( 2008, 1, 1 )
  6.                     && 'Date'[Date] <= DATE ( 2008, 2, 29 ),
  7.            ),
  8.            <filter2>,
  9.             ...
  10.            <filterN>
  11. )
复制代码
总结

标记为日期表可以自动移除来自日期表其他列的筛选器,这种特性非常重要。在 Excel 和 Power BI Desktop 中,你都可以找到标记为日期表功能。



7094211936384.png
回复

使用道具 举报

xueshan | 2021-4-24 14:45:26 来自手机 | 显示全部楼层
楼主呀,,,您太有才了。。。
回复

使用道具 举报

姑苏小子 | 2021-8-20 15:38:21 | 显示全部楼层
秀起来~
回复

使用道具 举报

静静 | 2021-9-2 15:25:48 | 显示全部楼层
啥玩应呀
回复

使用道具 举报

xoco | 2021-9-6 16:48:35 来自手机 | 显示全部楼层
好,很好,非常好!
回复

使用道具 举报

xinuer | 2021-10-9 15:20:21 来自手机 | 显示全部楼层
楼下的接上
回复

使用道具 举报

askazhi | 2021-10-13 08:20:19 | 显示全部楼层
看起来不错
回复

使用道具 举报

Q仔 | 2021-10-22 14:52:06 | 显示全部楼层
我也来支持一下,这里的老师和其他机构不一样,其他就是让付费。
回复

使用道具 举报

水仙水瓶 | 2021-11-11 14:47:33 | 显示全部楼层
是爷们的娘们的都帮顶!大力支持
回复

使用道具 举报

ming312 | 2021-11-18 19:05:52 | 显示全部楼层
路过 帮顶 嘿嘿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则