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 生成
可以使用 CALENDAR 或 CALENDARAUTO DAX 函数创建计算表,从而在模型中生成日期表。 每个函数都返回一个单列日期表。 然后,可以使用计算列扩展计算表,以支持日期间隔筛选和分组要求。
CALENDAR
如果要定义日期范围,请使用该函数。 传入两个值:“开始日期”和“结束日期”。 这些值可由其他 DAX 函数(如MIN(Sales[OrderDate])
或MAX(Sales[OrderDate])
)定义。CALENDARAUTO
如果希望日期范围自动包含模型中存储的所有日期,请使用该函数。 可以传入一个可选参数,该参数是一年的结束月份(如果你的年份是日历年,以 12 月为结束月份,则无需传入值)。 这是一个有用的函数,因为它可确保返回全年的日期,因此满足标记日期表的要求。 更重要的是,在未来几年内无需使用行扩展表。 这是因为当数据刷新完成时,它会触发表的重新计算。 重新计算会自动延长新年日期加载到模型中时表的日期范围。
提示
有关创建计算表的详细信息,包括有关如何创建日期表的示例,请完成将计算表和列添加到 Power BI Desktop 模型学习模块。
此外,请考虑使用免费的开源工具来帮助使用 DAX 管理日期。 有关详细信息,请参阅 Bravo for Power BI。
使用 DAX 克隆
如果数据模型已有日期表,并且需要另一个日期表-当日期是 角色扮演维度 维度时,可以轻松克隆现有日期表。 可以通过创建计算表来克隆表。 计算表表达式只是现有日期表的名称。
例如,若要创建克隆Ship Date
Date
表的表,请使用以下计算表表达式。
Ship Date = 'Date'
注意
使用 DAX 克隆表时,它只会创建列。 它不应用克隆表中的任何模型属性,如格式或说明。 此外,不会克隆层次结构。
相关内容
有关本文的详细信息,请参阅以下资源: