创建计算表

已完成

计算表使用返回表对象的 DAX 公式创建,使您可以复制或转换现有模型数据以生成新表。

复制表

数据建模中的一个常见设计挑战是处理表之间的多个关系。 例如,Sales 表可能与 Date 表有三个关系,如下图所示:

屏幕截图显示了两个表:Sales 和 Date。表之间存在三种关系。只有一个关系是活动的。

Sales 表按订单日期、装运日期和截止日期存储销售数据,从而与 Date 表建立三个关系。 但是,一次只有一个关系处于活动状态,如图中的一条实线所示。 其他关系处于非活动状态,并显示为虚线。

在我们的示例中,活动关系筛选 Sales 表中的 OrderDateKey 列,因此应用于 Date 表的筛选器仅影响按订单日期的销售。

若要启用按装运日期筛选销售,可以通过使用以下公式复制 Date 表来创建一个新表:

Ship Date = 'Date'

此公式将创建一个名为 Ship Date 的新表,其中包含的列和表与原始 Date 表相同。 刷新 Date 表后,Ship Date 表也将重新计算以保持同步。 现在,您可以在 Ship DateSales 表之间创建活动关系以允许按装运日期筛选。

配置重复表

创建计算表时,您需要将任何自定义配置应用于要结转的新重复表。 例如,最好重命名列,以便它们更好地描述其用途。

在我们的示例中,Ship Date 表中的 Fiscal Year 列可以重命名为 Ship Fiscal YearShip Full Date 列应该按 Ship Date 列进行排序,MonthKey 列可以隐藏以改进排序和报告。

如前面所述,当两个表之间存在多种关系时,计算表非常有用。 但是,计算表会增加模型的存储大小,并且会延长数据刷新时间,尤其是当它们依赖于其他表时。

注意

虽然重复表可解决此挑战,但还有其他性能更高的解决方案。 我们将在本模块后面讨论度量值时再次介绍此概念。

创建日期表

计算表的一个良好用例是向模型添加日期表。 日期表需要应用特殊时间筛选器(称为时间智能)。

您可以使用 CALENDARAUTO 函数创建计算日期表。 CALENDARAUTO 函数会扫描模型中的所有日期和日期/时间列,以确定最早日期和最晚日期,然后生成一组跨数据中所有年份的完整日期。 该参数指定财政年度的最后一个月;例如,传递 6 可将 6 月设置为年末。

Due Date = CALENDARAUTO(6)

生成的 Due Date 表包含一列日期。 下图显示数据视图中的 Due Date 表,其中日期按最早到最晚的顺序排序:

屏幕截图显示数据视图中的“Due Date”表。有一个名为“Date”的列,当这些值按最早到最晚的顺序排序时,第一个日期是 2017 年 7 月 1 日。

提示

CALENDAR 函数还可用于通过将开始日期和结束日期指定为静态值或基于模型数据的表达式来创建日期表。

如果模型中的最早日期为 2021 年 10 月 15 日,最晚日期为 2022 年 6 月 15 日,则该函数将返回从 2021 年 7 月 1 日到 2022 年 6 月 30 日的日期。 这可确保表包含标记日期表所需的完整年份。

标记为日期表

创建日期表后,您需要在 Power BI Desktop 中将其标记为日期表。 此设置允许您在 DAX 计算中使用时间智能函数。 指定您自己的日期表时,Power BI Desktop 将对该列及其数据执行以下验证,以确保数据包含:

  • 唯一值。
  • 无 null 值。
  • 连续日期值(从开始到结束)。
  • 针对“日期/时间”数据类型,每个值的相同时间戳。

此设置适用于任何日期表,无论是在 Power Query 中导入或创建的表还是计算表。

注意

您必须在 Power BI 中使用自定义日期表或使用内置的自动日期/时间功能才能使用时间智能。 自动/日期时间功能具有有限的值且不可自定义,这是考虑使用自定义日期表的原因之一。