2.1 时间智能计算介绍
为了使用所有时间智能计算,你需要一个格式正确的日期表(Date表)。该Date表必须满足以下要求。
● 必须具备年份中的所有日期。该Date表必须始终始于1月1日、终于12月31日,并包括此日期范围内的所有天。如果报告仅采用会计年度,则Date表必须包含从会计年度的第一天到最后一天的所有日期。例如,如果2008会计年度始于2007年7月1日,则Date表必须包括从2007年7月1日到2008年6月30日的所有天。
● 必须具有包含数据类型为“日期/时间”或“日期”的不重复值的列。该列通常命名为Date。尽管Date列通常用于定义与其他表的关系,但这不是强制的。不过,Date列必须包含不重复值,并应为其应用“标记为日期表”功能。如果该列还包含时间部分,则不应使用时间——例如,时间应始终为12:00 am。
● 模式中的Date表必须标记为Date表,以防没有基于Date而与其他表(如示例中的Sales)建立联系。[1]
[1] 对于符合Date表要求且位于一对多关系一端的Date表,不将其标记为Date表,它也会自动具备Date表的特性。——译者注
创建Date表的方法有以下几种。只要Date表满足要求,创建Date表的方式就不会影响你使用标准时间智能计算。如果你已经有一份符合报告需要的Date表,则只需在确保该表可以满足最低要求后,便可将其导入并将其标记为Date表。如果没有Date表,则可以使用DAX计算表来创建(后面会做介绍)。
最佳做法是对用于时间智能计算的Date表应用“标记为日期表”设置。“标记为日期表”设置会在每次对Date列应用筛选器时,在Date表上增加一个REMOVEFILTERS修饰符。用于CALCULATE的所有时间智能函数都会执行此操作(对Date列应用筛选器)。如果你使用Date列定义Sales表和Date表之间的关系,则DAX会执行相同的操作。尽管如此,将“标记为日期表”设置应用于Date表依然是最佳做法。如果你有多个Date表,则可以将它们全部标记为日期表。
如果你没有采用“标记为日期表”设置,而且也没有使用Date列来建立关系,那么每当你在CALCULATE中使用时间智能函数时,都必须在Date表上增加一个REMOVEFILTERS。SQLBI官网中的“Time Intelligence in Power BI Desktop”一文对此进行了详细描述。