在 Power BI Desktop 中创建日期表

本文面向使用 Power BI Desktop 的数据建模者。 介绍在数据模型中创建日期表的良好设计做法。

若要使用数据分析表达式 (DAX) 时间智能函数,需要具备以下必备模型:模型中必须至少有一个日期表。 日期表必须满足以下要求:

  • 它必须包含一个数据类型为“日期”(或“日期/时间”)的列(日期列)。
  • 日期列必须包含唯一值。
  • 日期列不能包含空白。
  • 日期列不能缺少任何日期。
  • 日期列必须跨越全部年份。 年份不一定是日历年(1 月 - 12 月)。
  • 日期表必须标记为日期表

可以使用任一方法将日期表添加到模型中:

  • 使用自动日期/时间选项
  • 使用 Power Query 连接到日期维度表
  • 使用 Power Query 生成日期表
  • 使用 DAX 生成日期表
  • 使用 DAX 克隆一个现有日期表

提示

日期表可能是你将添加到任何模型的最一致的功能。 更重要的是,在一个组织内,日期表的定义应该是一致的。 因此,无论你决定使用哪种方法,我们都建议创建一个 Power BI Desktop 模板,其中包括完全配置的日期表。 与组织中的所有建模者共享模板。 这样的话,每当有人开发新的模型时,他们就可以从一个一致定义的日期表开始。

使用自动日期/时间

“自动日期/时间”选项可提供方便、快捷且易于使用的时间智能。 报表作者可以在筛选、分组和向下钻取日历时间段时使用时间智能。

建议仅在使用日历时间段时,并且对时间的模型要求比较简单时,才启用“自动日期/时间”选项。 在创建临时模型或执行数据浏览或分析时,使用此选项也很方便。 但是,这种方法不支持可将筛选器传播到多个表的单个日期表设计。 有关详细信息,请参阅 Power BI Desktop 中的自动日期/时间指南

使用 Power Query 进行连接

如果数据源已有日期表,建议将其用作模型日期表的源。 当你连接到数据仓库时,通常可以这样做,因为它将有一个日期维度表。 这使模型可以利用组织中的单一时间事实来源。

如果要开发 DirectQuery 模型,而数据源不包含日期表,则强烈建议向数据源添加日期表。 它应满足日期表的所有建模要求。 然后,可以使用 Power Query 连接到日期表。 通过这样的方式,模型计算就可以利用 DAX 时间智能函数了。

使用 Power Query 生成

可以使用 Power Query 生成日期表。 有关详细信息,请参阅 Chris Webb 的博客条目在 Power Query 中生成日期维度表

提示

如果组织中没有数据仓库或其他一致的定义,请考虑使用 Power Query 发布数据流。 然后,让所有数据建模者连接到数据流,以便将日期表添加到其模型中。 数据流将成为组织中的单一时间事实来源。

如果需要生成一个日期表,请考虑使用 DAX 来实现。 你可能会发现这样更简便。 另外,这种方法可能更便捷,因为 DAX 包括一些内置智能,可简化创建和管理日期表的操作。

通过 DAX 生成

可以使用 CALENDARCALENDARAUTO DAX 函数创建一个计算表,用于在模型中生成日期表。 每个函数都返回一个单列日期表。 然后,可以使用计算列扩展计算表,以支持日期间隔筛选和分组要求。

  • 如果要定义日期范围,请使用 CALENDAR 函数。 传入两个值:“开始日期”和“结束日期”。 这些值可由其他 DAX 函数(如 MIN(Sales[OrderDate])MAX(Sales[OrderDate]))定义。
  • 如果需要将日期范围自动包含存储在模型中的所有日期,请使用 CALENDARAUTO 函数。 可以传入一个可选参数,该参数是一年的结束月份(如果你的年份是日历年,以 12 月为结束月份,则无需传入值)。 这个函数很有用,它可以确保返回完整年份的日期,而标记的日期表需要达到这个要求。 而且,无需将表日期延长到未来的几年:数据刷新完成后,将触发表的重新计算。 当新年份的日期加载到模型中时,重新计算将自动延长表的日期范围。

使用 DAX 克隆

如果模型中已经有一个日期表,但还需要一个日期表,可以轻松地克隆现有日期表。 当日期是角色扮演维度时可以这样做。 可以通过创建计算表来克隆表。 计算表表达式只是现有日期表的名称。

后续步骤

有关本文的详细信息,请参阅以下资源: