Excel DAX - 公式


DAX 是一种公式语言,用于在 Power PivotTables 中创建自定义计算。您可以使用设计用于处理关系数据的 DAX 函数并在 DAX 公式中执行动态聚合。

DAX 公式与 Excel 公式非常相似。要创建 DAX 公式,请键入等号,后跟函数名称或表达式以及任何所需的值或参数。

DAX 函数与 DAX 公式

DAX 公式可以包含 DAX 函数并利用它们的用法。这就是 DAX 公式与 DAX 函数在重要方面的不同之处。

  • DAX 函数始终引用完整的列或表。如果您只想使用表或列中的特定值,您可以向公式添加筛选器。

  • 如果要逐行自定义计算,Power Pivot 提供的函数可让您使用当前行值或相关值来执行因上下文而异的计算。

  • DAX 包含一种返回表作为结果而不是单个值的函数。这些函数可用于向其他函数提供输入,从而计算整个表或列的值。

  • 某些 DAX 函数提供时间智能,使您可以使用有意义的日期范围创建计算,并比较并行期间的结果。

了解 DAX 公式语法

每个 DAX 公式都具有以下语法 -

  • 每个公式必须以等号开头。

  • 在等号右侧,您可以键入或选择函数名称,或者键入表达式。表达式可以包含通过 DAX 运算符连接的表名和列名。

以下是一些有效的 DAX 公式 -

  • [列_成本] + [列_税]
  • = 今天 ()

了解 IntelliSense 功能

DAX 提供 IntelliSense 功能,使您能够快速、正确地编写 DAX 公式。使用此功能,您无需完整键入表、列和函数名称,而是在编写 DAX 公式时从下拉列表中选择相关名称。

  • 开始键入函数名称的前几个字母。自动完成显示可用函数的列表,其名称以这些字母开头。

  • 将指针放在任意函数名称上。将显示 IntelliSense 工具提示,为您提供该功能的使用方法。

  • 单击函数名称。函数名称出现在公式栏中,并显示语法,这将指导您选择参数。

  • 输入所需表名称的第一个字母。自动完成显示可用表和列的列表,其名称以该字母开头。

  • 按 T​​AB 或单击名称可将“自动完成”列表中的项目添加到公式中。

  • 单击Fx按钮可显示可用功能列表。要从下拉列表中选择函数,请使用箭头键突出显示该项目,然后单击“确定”将该函数添加到公式中。

  • 通过从可能的表和列的下拉列表中选择参数或输入所需的值来向函数提供参数。

强烈建议使用这个方便的 IntelliSense 功能。

在哪里使用 DAX 公式?

您可以使用 DAX 公式创建计算列和计算字段。

  • 您可以在计算列中使用 DAX 公式,方法是添加列,然后在公式栏中键入表达式。您可以在 PowerPivot 窗口中创建这些公式。

  • 您可以在计算字段中使用 DAX 公式。您创建这些公式 -

    • 在 Excel 窗口的“计算字段”对话框中,或者

    • 在 Power Pivot 窗口中表的计算区域中。

同一公式的Behave可能有所不同,具体取决于该公式是在计算列还是计算字段中使用。

  • 在计算列中,公式始终应用于整个表中列中的每一行。根据行上下文,该值可能会发生变化。

  • 然而,在计算领域中,结果的计算强烈依赖于上下文。也就是说,数据透视表的设计以及行标题和列标题的选择会影响计算中使用的值。

了解 DAX 中上下文的概念对于编写 DAX 公式非常重要。在 DAX 之旅的开始阶段这可能有点困难,但是一旦掌握了它,您就可以编写复杂动态数据分析所需的有效 DAX 公式。有关详细信息,请参阅“DAX 上下文”一章。

创建 DAX 公式

您已经在上一节中了解了 IntelliSense 功能。请记住在创建任何 DAX 公式时使用它。

要创建 DAX 公式,请使用以下步骤 -

  • 输入等号。

  • 在等号右侧,输入以下内容 -

    • 输入函数或表名称的第一个字母,然后从下拉列表中选择完整名称。

    • 如果您选择了函数名称,请键入括号“(”。

    • 如果您已选择表名称,请键入括号“[”。输入列名称的第一个字母,然后从下拉列表中选择完整名称。

    • 用“]”关闭列名称,用“)”关闭函数名称。

    • 在表达式之间键入 DAX 运算符或键入“,”以分隔函数参数。

    • 重复步骤 1 - 5,直到 DAX 公式完成。

例如,您想要查找东部地区的总销售额。您可以编写 DAX 公式,如下所示。East_Sales 是表的名称。金额是表中的一列。

SUM ([East_Sales[Amount]) 

正如在“DAX 语法”一章中已经讨论的那样,建议在每次引用任何列名时使用表名和列名。这被称为“完全限定名称”。

DAX 公式可能因计算字段或计算列而异。有关详细信息,请参阅以下部分。

为计算列创建 DAX 公式

您可以在 Power Pivot 窗口中为计算列创建 DAX 公式。

  • 单击要添加计算列的表的选项卡。
  • 单击功能区上的“设计”选项卡。
  • 单击添加。
  • 在公式栏中输入计算列的 DAX 公式。
= DIVIDE (East_Sales[Amount], East_Sales[Units])

此 DAX 公式对 East_Sales 表中的每一行执行以下操作 -

  • 将行的“金额”列中的值除以同一行中的“单位”列中的值。

  • 将结果放置在同一行中新添加的列中。

  • 迭代重复步骤 1 和 2,直到完成表中的所有行。

您已添加一列“单价”,按照上述公式销售这些单位。

  • 正如您所观察到的,计算列也需要计算和存储空间。因此,仅在必要时才使用计算列。在可能且足够的情况下使用计算字段。

有关详细信息,请参阅章节 - 计算列。

为计算字段创建 DAX 公式

您可以在 Excel 窗口或 Power Pivot 窗口中为计算字段创建 DAX 公式。如果是计算字段,您需要预先提供名称。

  • 要在 Excel 窗口中为计算字段创建 DAX 公式,请使用“计算字段”对话框。

  • 要在 Power Pivot 窗口中为计算字段创建 DAX 公式,请单击相关表的计算区域中的单元格。使用CalculatedFieldName:= 开始DAX 公式。

例如,东部销售总额:=SUM ([East_Sales[Amount])

如果您使用Excel窗口中的“计算字段”对话框,您可以在保存之前检查公式,并将其作为强制习惯,以确保使用正确的公式。

有关这些选项的更多详细信息,请参阅“计算字段”一章。

使用公式栏创建 DAX 公式

Power Pivot 窗口还有一个公式栏,类似于 Excel 窗口公式栏。公式栏使用自动完成功能可以更轻松地创建和编辑公式,从而最大限度地减少语法错误。

  • 要输入表的名称,请开始键入表的名称。公式自动完成提供了一个下拉列表,其中包含以这些字母开头的有效表名称。您可以从一个字母开始,然后根据需要键入更多字母以缩小列表范围。

  • 要输入列的名称,您可以从所选表的列名称列表中选择它。在表名称右侧键入括号“[”,然后从所选表的列列表中选择列。

使用自动完成功能的提示

以下是使用自动完成的一些提示 -

  • 您可以在 DAX 公式中嵌套函数和公式。在这种情况下,您可以在具有嵌套函数的现有公式中间使用公式自动完成。插入点之前的文本用于显示下拉列表中的值,插入点之后的所有文本保持不变。

  • 您为常量创建的定义名称不会显示在“自动完成”下拉列表中,但您仍然可以键入它们。

  • 函数的右括号不会自动添加。你需要自己做。

  • 您必须确保每个函数在语法上都是正确的。

了解插入功能特性

您可以在 Power Pivot 窗口和 Excel 窗口中找到标记为fx的“插入函数”按钮。

  • Power Pivot 窗口中的“插入函数”按钮位于公式栏的左侧。

  • Excel 窗口中的“插入函数”按钮位于“公式”右侧的“计算字段”对话框中。

当您单击fx按钮时,将出现“插入函数”对话框。“插入函数”对话框是查找与 DAX 公式相关的 DAX 函数的最简单方法。

“插入函数”对话框可帮助您按类别选择函数,并为每个函数提供简短说明。

了解插入函数

在 DAX 公式中使用插入函数

假设您要创建以下计算字段 -

Medal Count: = COUNTA (]Medal]) 

您可以通过以下步骤使用“插入函数”对话框 -

  • 单击结果表的计算区域。
  • 在公式栏中输入以下内容 -
Medal Count: = 
  • 单击插入函数按钮 ( fx )。

出现插入函数对话框。

  • 在“选择类别”框中选择“统计”,如以下屏幕截图所示。

  • 在“选择函数”框中选择 COUNTA,如下图所示。

使用插入功能

正如您所观察到的,将显示所选的 DAX 函数语法和函数描述。这使您能够确保它是您想要插入的函数。

  • 单击“确定”。奖牌计数:=COUNTA( 出现在公式栏中,并且还会出现显示函数语法的工具提示。

  • 类型 [。这意味着您将要键入列名称。下拉列表中将显示当前表中所有列的名称和计算字段。您可以使用 IntelliSense 来完成公式。

  • 键入 M。下拉列表中显示的名称将仅限于以“M”开头的名称。

  • 单击奖牌。

点击奖牌
  • 双击勋章。奖牌计数:= COUNTA([奖牌] 将显示在公式栏中。关闭括号。

  • 按 Enter 键。你完成了。您也可以使用相同的过程来创建计算列。您还可以按照相同的步骤,使用“插入函数”功能在 Excel 窗口的“计算字段”对话框中插入函数。

  • 单击公式右侧的插入函数 ( fx ) 按钮。

出现插入函数对话框。其余步骤与上面相同。

在 DAX 公式中使用多个函数

DAX 公式最多可以包含 64 个嵌套函数。但是,DAX 公式不太可能包含如此多的嵌套函数。

如果 DAX 公式有许多嵌套函数,则具有以下缺点 -

  • 该公式将很难创建。
  • 如果公式有错误,调试起来就会非常困难。
  • 公式求值不会很快。

在这种情况下,您可以将公式拆分为更小的可管理公式,然后逐步构建大型公式。

使用标准聚合创建 DAX 公式

当您执行数据分析时,您将对聚合数据执行计算。您可以在 DAX 公式中使用多种 DAX 聚合函数,例如 SUM、COUNT、MIN、MAX、DISTINCTCOUNT 等。

您可以通过使用 Power Pivot 窗口中的自动求和功能,使用标准聚合自动创建公式。

  • 单击 Power Pivot 窗口中的结果选项卡。将显示结果表。
  • 单击奖牌列。整个栏目 - 奖章将被选中。
  • 单击功能区上的“主页”选项卡。
  • 单击“计算”组中“自动求和”旁边的向下箭头。
使用标准聚合创建 DAX 公式
  • 单击下拉列表中的 COUNT。
点击计数

正如您所观察到的,计算字段“奖牌数”出现在“奖牌”列下方的计算区域中。DAX 公式也出现在公式栏中 -

Count of Medal: = COUNTA([Medal]) 

自动求和功能已经为您完成了这项工作 - 创建用于数据聚合的计算字段。此外,AutoSum 采用了 DAX 函数 COUNT 的适当变体,即 COUNTA(DAX 具有 COUNT、COUNTA、COUNTAX 函数)。

请注意 - 要使用自动求和功能,您需要单击功能区上自动求和旁边的向下箭头。如果您单击“自动求和”本身,您将得到 -

Sum of Medal: = SUM([Medal]) 

并且错误被标记为奖牌不是数字数据列,并且该列中的文本无法转换为数字。

错误

有关DAX 错误的详细信息,请参阅“DAX 错误参考”一章。

DAX 公式和关系模型

如您所知,在 Power Pivot 的数据模型中,您可以使用多个数据表并通过定义关系来连接这些表。这将使您能够创建有趣的 DAX 公式,该公式使用相关表之间的列的相关性进行计算。

当您在两个表之间创建关系时,您需要确保用作键的两列具有匹配的值,至少对于大多数行而言,如果不是完全匹配的话。在 Power Pivot 数据模型中,键列中可能存在不匹配的值,但仍会创建关系,因为 Power Pivot 不强制执行引用完整性(有关详细信息,请参阅下一节)。但是,键列中存在空白或不匹配值可能会影响 DAX 公式的结果和数据透视表的外观。

参照完整性

建立引用完整性涉及构建一组规则,以便在输入或删除数据时保留表之间已定义的关系。如果您不完全确保这一点(因为 Power Pivot 不强制执行),您可能无法使用在进行数据更改之前创建的 DAX 公式获得正确的结果。

如果强制执行引用完整性,则可以防止以下陷阱 -

  • 当主表中没有关联行(即键列中具有匹配值)时,将行添加到相关表中。

  • 更改主表中的数据将导致相关表中出现孤立行(即,键列中的数据值在主表键列中没有匹配值的行)。

  • 当相关表的行中存在匹配的数据值时,从主表中删除行。