跳至主要内容

Power BI 教程:如何创建日期表

通过这份循序渐进的可视化教程,学习在 Power BI 中创建日期表。
· 12分钟 阅读

使用 AI 探索

什么是 Power BI 日期表?

Power BI 中的日期表仅包含与日期相关的数据。它是一种标准的维度表,可用于在模型中引用日期,并基于这些日期分析数据。日期表还适用于时间智能计算,以及在需要精确日期信息的报表中使用。

通过此动手练习来练习在 Power BI 中创建日期表。

日期表在数据分析中为何有用?

在Power BI 报表中,通常需要基于日期和时间进行分析。这时创建日期表就派上用场了。日期表允许您按日期属性(如星期、月份、季度和年份)切分数据。它们还让您可以使用若无日期表通常无法运行的 DAX 时间智能函数。为实现正确的分析,在使用日期表时必须确保所有列的格式设置正确。

Power BI 日历截图

在 Power BI 中创建日期表的要求

日期表的一些要求如下:

要求原因
具有日期/时间数据类型的日期列确保该列被识别为包含日期信息,这对时间智能操作至关重要。
日期列中无空值保证每个日期都有记录,防止分析出错。
日期列中的值唯一防止重复,以确保基于日期的计算准确无误。
无缺失日期确保时间轴连续性,这对准确的时间序列分析至关重要。
覆盖完整年份无论按日历年还是财年,都能全面覆盖所有日期值,为报表提供完整的时间范围。
标记为日期表验证该表可用于时间智能函数,并将其标记为模型的官方日期表。

Power BI 日期表的其他称呼

日期表也有其他称呼,如日历表、日期维度表、日历维度表。这些名称都指同一类表:每一天一条记录,并包含显示日期属性的列。

生成 Power BI 日期表

在 Power BI 中生成日期表主要有四种方式:

  • 源数据
  • 自动日期/时间
  • DAX
  • Power Query

下面我们逐一了解这些方法。

源数据

当您导入数据时,数据源可能已经包含一个已创建好的日期表。在这种情况下,无需再创建新的日期表。该日期表可以直接使用,将其引入数据模型后,模型中与其他表之间会创建关系。

如果源数据不包含日期表,可以通过多种方法创建。

自动日期/时间

在按日期区间筛选数据时,自动日期/时间方法会基于模型中已加载的日期列,使用简单的时间智能。但它不会提供一个可用于切分其他表的日期表。要使用此方法,您需要先在 Power BI 中启用自动日期/时间。进入 文件 功能区 > 选项和设置 > 选项 > 数据加载 > 当前文件 > 时间智能 > 启用自动日期/时间。

Power BI 选项截图

启用该选项后,Power BI Desktop 会基于日期列中的日期创建一个隐藏的自动日期/时间表。随后,它会在隐藏的自动日期/时间日期列与模型中的日期列之间创建关系。

存在自动日期/时间表时,它不会在字段窗格中显示为一个字段,而是作为以日期列名称命名的可展开下拉项出现,如下图所示。展开该日期列后,您会看到名为日期层次结构的层级,包括 Year、Quarter、Month 和 Day。

Power BI Customer ID

随后即可用其创建可视化:

Power BI 折线图

DAX

在 Power BI 中创建日期维度表的另一种方法是使用数据分析表达式(DAX)方法。常用的有 CalendarAuto 和 Calendar 两个函数。两者的区别在于:Calendar 函数根据函数参数中指定的开始和结束日期返回一段日期范围;而 CalendarAuto 函数会自动从数据集中检测日期范围,开始日期为数据集中最早的日期,结束日期为数据集中最新的日期。

要使用 Calendar 函数,请在 Power BI Desktop 的功能区中转到表选项卡。选择新建表,然后输入如下所示的 DAX 公式:

Power BI DAX 公式

Power BI DAX 公式 2

上述 DAX 函数会创建一个包含日期列的日期表。还可以在表中添加其他列,如 Year、Month、Weekday 和 Week of the Year。要添加这些列,请在功能区选择新建列按钮,并为要添加的每个列输入相应的 DAX 表达式。以下示例将编写 DAX 表达式,从日期表中获取年份、月份及月份数字:

Power BI 选择新建列

Power BI DAX 日期公式

Power BI DAX 日期公式 2

Power BI DAX 日期公式 3

所有这些新列对应的 DAX 表达式结果如下图所示:

Power BI DAX 日期表达式结果

您可以使用其他表达式来获取任意多的附加日期相关列。

我们刚刚使用 DAX 创建了一个日期表。但此方法仅将新表添加到数据模型中;您仍需在日期表与其他表之间创建关系,并将该表标记为数据模型的官方日期表。

Power Query

要在 Power BI 中创建日期表,可以使用混合语言(也称为 M-Query)。

操作方法是:单击功能区上的转换数据按钮,然后进入Power Query。

Power BI 转换数据

在左侧查询窗格的空白处单击右键,打开如下下拉菜单,选择新建查询 和空白查询。

Power BI 选择空白查询

在空白查询选项卡中,输入用于创建日期表的 M 查询,如下所示:

Power BI M 查询

#date 参数表示数据开始年份中的最早年、月、日;365*7 表示未来 7 年的日期。在该查询中,#duration 分别表示天、小时、分钟和秒,#duration(1,0,0,0) 表示 1 天、0 小时、0 分钟和 0 秒。与其他方法相比,此方法创建的日期表在有新数据进入时会自动更新,无需重新创建表,这是其优势所在。

Power BI M 方程结果

要将 M 方程的结果从日期列表更改为日期表,请转到功能区的转换选项卡,选择转换,然后选择到表。

Power BI 创建日期表

完成上述操作后,您可以像 DAX 方法那样,加入其他日期相关的列。为此,首先需要通过选择列名左侧的图标,将日期列的数据类型更改为日期。

在 Power BI 中创建日期列

更改数据类型后,可通过导航至添加列功能区,在日期下拉菜单中选择年份或其他需要添加的列,将新列添加到表中。

在 Power BI 中创建日期表 3

如上所示,“日期”下拉菜单允许您加入年份、月份、季度、周、天和年限等。

至此,我们已成功使用 Power Query 创建了一个日期表。将其载入数据模型后,您即可将该日期表标记为日期表。

生成 Power BI 日期表的方法:总结

下表对前述方法进行了总结,并给出了各自的使用场景:

方法说明使用场景
源数据使用数据源中已有的日期表。当源数据已包含完整的日期表时。
自动日期/时间基于模型中的日期列自动创建隐藏的日期/时间表。无需可见日期表即可快速使用时间智能。
DAX使用数据分析表达式创建自定义日期表。当您需要可定制的日期属性和对日期范围的精确控制时。
Power Query使用 M 查询创建会随新数据自动更新的日期表。适合创建可复用、可随新数据自动更新的日期表。

将表标记为日期表

使用上述任一方法创建日期表后,下一步是将其标记为“日期表”。为此,请在字段窗格中右键单击该表名称,并选择标记为日期表。

Power BI 标记为日期表功能

Power BI 会在将其标记为日期表时验证表中的数据,确保日期列的数据类型为 Date 且包含唯一值。

在 Power BI 中标记为日期表

当表被标记为日期表后,日期表中日期字段的自动生成层次结构会被删除,但其他表中日期字段的层次结构会保留,直到在该字段与生成的日期表之间建立关系为止。

DAX 与 Power Query 的优缺点

在 Power BI 中创建日期表的 DAX 与 Power Query 方法存在一些差异。主要区别如下:

方面DAX 方法Power Query 方法
简易性更易上手,因为无需打开 Power Query 编辑器。需要进入 Power Query 编辑器,对初学者而言可能不那么直观。
可复用性局限于当前 Power BI 文件,除非导出或复制。可通过 Power BI 数据流实现复用,便于在多个报表或项目中使用。
自定义通过 DAX 函数对日期属性进行精细控制与自定义。通过 M 查询提供动态更新能力,有利于处理随时间变化的数据。

在日期表与其他表之间创建关系

Power BI 中的关系清晰地表明表与表之间的关联方式。它展示了某一列如何连接两个或多个表,并将不同表中的列关联起来。这些关系可在数据加载时由 Power BI 自动创建,也可以手动创建。将数据导入 Power BI 时,自动检测功能会帮助您在列名相似的列之间建立关系。

要在日期表与其他表之间手动创建关系,请转到模型选项卡(数据模型所在处),然后将一个表中的相关列拖拽到另一个表中的对应列上。在下面的示例中,我们将 Accidents 表中的日期字段拖放到日期表中的 Date 字段上。

在 Power BI 中与日期表创建关系

创建关系的另一种方式是进入模型选项卡的关系视图中的管理关系功能区。在此视图中,您可以创建、更新和删除表之间的关系,并自动检测现有关系。

Power BI 管理关系

Power BI 管理关系

与日期表创建关系可以将筛选器传播到多个表,从而使您能够在报表中展示跨相关表的准确信息。

下面是一些示例,展示了筛选器如何从日期表传播到其他表。每个示例都可以在层次结构中向下钻取到下一级(例如,您可以从年钻取到月、到季度、到日等):

Power BI 中不同的日期表

结论

正如本文所示,在 Power BI 中创建日期表有多种选择。不过,可用性、简易性、可复用性以及您的具体需求等因素,都会影响您的选择。如果您刚刚开始学习 Power BI,不妨看看这份入门教程。或者,如果您想系统精通 Power BI,可以报名我们的Power BI 基础技能路径,解锁商业智能领域的高潜职业机会。

FAQs

如何确保我的 Power BI 日期表具备良好的性能?

为优化性能,请确保您的日期表仅包含必要的列,并覆盖分析所需的最小日期范围。避免不必要的列,以免增加模型大小和处理时间。

我可以将日期表中的财年设置为非 1 月开始吗?

可以。您可以使用 DAX 或 Power Query 自定义财年的起始月份。例如,在 DAX 中可通过附加逻辑调整 CalendarAuto 函数的起始月份,实现月份偏移。

如果我的数据集包含多个时区,如何处理日期表?

在创建日期表之前,应将日期统一到同一时区(如 UTC)。可在 Power Query 中使用“转换”功能来调整时区。

创建日期表时常见的问题有哪些?

常见错误包括日期值不唯一或数据类型不正确。请确保日期列包含唯一、连续的日期,并格式化为日期/时间类型。可在将其标记为日期表之前,先在 Power Query 中清洗数据以修正这些问题。

是否可以创建随新数据自动更新的动态日期表?

可以。您可以使用 Power Query 的 M 查询函数,根据数据集的最小和最大日期自动调整日期范围,创建动态日期表。

如何将自定义假期或事件添加到日期表中?

可以。您可以为节假日或事件创建单独的表,并在 Power Query 中与日期表合并。使用“联接”操作将日期表与自定义事件日期对齐。

我能使用日期表按财务季度而非日历季度筛选数据吗?

当然可以。您可以使用 DAX 或 M 查询为日期表添加财务季度列,并根据组织的财务日历定义财务季度。

如果我的 Power BI 模型中有多个日期表会怎样?

如果模型中有多个日期表,请确保每个都正确标记为日期表,并与相关数据集建立关系。通常,最佳实践是只保留一个主日期表以保证一致性。

如何在日期表与多个事实表之间创建关系?

您可以在日期表与多个事实表之间基于日期列建立关系。使用 Power BI 的“管理关系”功能设置这些连接,确保筛选器能够在模型中传播。

在 Power BI 中使用自动日期/时间是否有局限性?

是的,自动日期/时间存在局限性,因为它创建的是不易自定义的隐藏表,在大型数据集中还可能带来性能问题。它适合简单、快速的分析,但不适用于复杂或大规模模型。

Kafaru Simileoluwa

作者

Kafaru Simileoluwa

Aella App 的数据科学家

主题