创建计算列

已完成

可以编写一个 DAX 公式,向模型中的任意表添加计算列。 计算列公式必须返回标量或单个值。

导入模型中的计算列是有成本的:计算表增加了模型的存储大小,并且会延长数据刷新时间。 原因在于,当计算列与刷新表有公式依赖关系时,它们会重新计算。

在数据视图的“字段”窗格中,确保已选择 Due Date 表。 在创建计算列之前,先将 Date 列重命名为 Due Date。

现在,可以将计算列添加到 Due Date 表中。 若要创建计算列,在“表工具”上下文功能区上,选择“计算”组中的“新建列”。

在编辑栏中,输入以下计算列定义,并按 Enter 键。

Due Fiscal Year =
"FY"
    & YEAR('Due Date'[Due Date])
        + IF(
            MONTH('Due Date'[Due Date]) > 6,
            1
        )

计算列定义将 Due Fiscal Year 列添加到 Due Date 表中。 下面的步骤介绍 Microsoft Power BI 如何计算计算列公式:

  1. 在文本串联运算符 (&) 之前计算加法运算符 (+)。
  2. YEAR DAX 函数返回截止日期年份的整数值。
  3. 当截止日期的月份数字为 7-12(7 月到 12 月)时,IF DAX 函数返回值;否则,它将返回 BLANK。 (例如,Adventure Works 的会计年度为 7 月 - 6 月,因此,日历年的最后六个月将使用下一个日历年作为其会计年度。)
  4. 年份值会添加到 IF 函数返回的值中,该值为 1 或 BLANK。 如果值为 BLANK,则会隐式转换为零 (0),以允许添加以生成会计年度值。
  5. 文字文本值 "FY" 与会计年度值连接,将隐式转换为文本。

使用以下定义添加第二个计算列:

Due Fiscal Quarter =
'Due Date'[Due Fiscal Year] & " Q"
    & IF(
        MONTH('Due Date'[Due Date]) <= 3,
        3,
        IF(
            MONTH('Due Date'[Due Date]) <= 6,
            4,
            IF(
                MONTH('Due Date'[Due Date]) <= 9,
                1,
                2
            )
        )
    )

计算列定义将 Due Fiscal Quarter 列添加到 Due Date 表中。 IF 函数返回季度数字(第 1 季度为 7 月 - 9 月),结果会连接到 Due Fiscal Year 列的值和文字文本 Q

使用以下定义添加第三个计算列:

Due Month =
FORMAT('Due Date'[Due Date], "yyyy mmm")

计算列定义将 Due Month 列添加到 Due Date 表中。 FORMAT DAX 函数使用格式字符串将 Due Date 列的值转换为文本。 在本例中,格式字符串将生成一个标签,用于说明年份和缩写月份名称。

注意

存在许多用户定义的日期/时间格式。 有关详细信息,请参阅 FORMAT 函数的自定义日期和时间格式

使用以下定义添加第四个计算列:

Due Full Date =
FORMAT('Due Date'[Due Date], "yyyy mmm, dd")

使用以下定义添加第五个计算列:

MonthKey =
(YEAR('Due Date'[Due Date]) * 100) + MONTH('Due Date'[Due Date])

MonthKey 计算列将截止日期年份乘以值 100,然后加上截止日期的月份数字。 这会生成一个数值,用于按时间顺序对 Due Month 文本值排序。

验证 Due Date 表中是否有六列。 第一列是在创建计算表时添加的,另外五列是作为计算列添加的。

要完成 Due Date 表的设计,可以执行以下操作:

  • 按 Due Date 列对 Due Full Date 列进行排序。
  • 按 MonthKey 列对 Due Month 列进行排序。
  • 隐藏 MonthKey 列。
  • 创建名为“Fiscal”的层次结构,其中包含以下级别:
    • Due Fiscal Year
    • Due Fiscal Quarter
    • Due Month
    • Due Full Date
  • 使用 Due Date 列将 Due Date 表标记为日期表。