12.3 标记日期表的作用
# 标记日期表的作用
2019-11-21 分类:时间智能函数 阅读(95) 评论(0) 阅读约需10分钟> 标记为日期表是使用时间智能函数的一项准备工作,Excel 和 Power BI 都提供标记为日期表的功能,本文将介绍标记日期表的原因以及如何使用等效方案
如果表间关系是通过日期列定义的, 那么对日期表的日期列应用筛选器的函数都可以正常工作。但在一些特殊情况下,你可能会基于其他列建立关系,许多现有的日期表可能使用整数列,例如示例的 Date[DateKey],如图所示。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 月的数据(如果外部上下文中不包括这些日期则返回空白)。图 7-14Sales Amount Jan-Feb 2008 Single Column 不会将所选内容扩展到报表中的行选择之外的日期,因为它不会替换年份和月份的现有筛选器这种现象的原因是日期表上有其他活动的筛选器,来自于数据透视表的行标签。例如,1 月和 2 月的行只显示每个月的值,而不是两者的总和,其他月份返回空白值,而并非无论选择任何日期都相同的重复值,图 7-12Sales Amount Jan-Feb 2008 始终显示 2008 年 1 月和 2 月的总和, 而不考虑行上的日期范围选择如图 7-12 所示。如果你启用标记为日期表特性,并且指定日期列为’Date’[Date],那么当CALCULATE或CALCULATETABLE函数的筛选器参数使用来自这个日期列的筛选器时,DAX 将自动从日期表的所有其他列中删除筛选器。(这样做之后,你将得到与图 7-12 中相同的结果。)考虑以下公式模板:
- CALCULATE(
, - ‘Date’[Date]>=DATE(2008,1,1)
- &&’Date’[Date]<=DATE(2008,2,29),
, - …
- ) 任何一个使用了日期列的筛选器参数,如果日期列所在的表被标记为日期表,DAX 将使用与下面的公式相同的技术移除相同表的任何已有筛选器:
- CALCULATE(
, - ‘Date’[Date]>=DATE(2008,1,1)
- &&’Date’[Date]<=DATE(2008,2,29),
, - …
, - ALL(‘Date’)
- ) 只有当你正确的使用了标记为日期表这个特性后,时间智能函数才会正常工作。如果想在没有设置此特性的模型中定义与时间计算相关的度量值,你可以在CALCULATE函数中放置ALL(‘Date’)作为筛选器参数,用来移除那些可能影响最终结果的,来自日期表其他列的筛选器如果你定义这样一个筛选器参数,它迭代整个日期表而不是单列,新的日期筛选器将覆盖日期表上的任何现有的筛选上下文,ALL(‘Date’)也就不再需要了。例如,你可以用这种方式编写前面的公式模板,这样即使标记为日期表的设置未激活,公式仍然可以正常工作:
- CALCULATE(
, - FILTER(
- ALL(‘Date’),
- ‘Date’[Date]>=DATE(2008,1,1)
- &&’Date’[Date]<=DATE(2008,2,29),
- ),
, - …
- )
总结
标记为日期表可以自动移除来自日期表其他列的筛选器,这种特性非常重要。在 Excel 和 Power BI Desktop 中,你都可以找到标记为日期表功能。印象笔记邮件分享标签:时间智能函数日期表上一篇全面介绍CDM通用数据模型下一篇计算累计值### 相关推荐 计算累计值 YTD,QTD,MTD创建日期表初识时间智能### 说点什么 My content and settings您是token|登出 订阅本文评论