Excel DAX - 快速指南


Excel DAX - 概述

DAX代表数据分析表达式。_ DAX 是一种公式语言,是函数、运算符和常量的集合,可在公式或表达式中使用它们来计算并返回一个或多个值。DAX 是与 Excel Power Pivot 数据模型关联的公式语言。

它不是一种编程语言,而是一种公式语言,允许用户在计算列和计算字段(也称为度量)中定义自定义计算。DAX 可帮助您从数据模型中已存在的数据创建新信息。DAX 公式使您能够执行数据建模、数据分析,并将结果用于报告和决策。

DAX 包括 Excel 公式中使用的一些函数,但具有经过修改的功能和附加函数,旨在处理关系数据并执行动态聚合。

德国DAX指数的重要性

DAX 的基础是数据模型,即 Excel 中的 Power Pivot 数据库。数据模型由表组成,可以定义表之间的关系,以便组合来自不同来源的数据。当源数据发生变化时,可以刷新与数据模型的数据连接。数据模型利用 Power Pivot xVelocity 内存分析引擎 (VertiPaq),除了容纳数千行数据之外,还使数据操作尽可能快。有关数据模型的更多信息,请参阅教程 – Power Pivot。

DAX 与数据模型相结合,支持 Excel 中的多种强大功能 - Power Pivot、Power PivotTables、Power PivotCharts 和 Power View。您可以使用 DAX 来解决许多基本计算和数据分析问题。

DAX 在 Power BI 中也很有用,可以创建新的 Power BI Desktop 文件并将一些数据导入其中。此外,DAX 公式还提供分析不同产品类别和不同日期范围的增长率、计算与市场趋势相比的同比增长等功能。

学习如何创建有效的 DAX 公式将帮助您充分利用数据。当您获得所需的信息后,您就可以开始解决影响您利润的实际业务问题。这就是 Power BI 和 DAX 的强大功能,将帮助您实现这一目标。

本教程的先决条件

本教程是 Excel Power Pivot 教程的扩展,您在其中了解了 Power Pivot 功能、数据模型、关系、Power 数据透视表、Power Pivot 图表等。在深入研究之前,最好先复习一下本教程。进入 DAX,因为本教程更多地介绍 DAX 语言,其中您编写用于分析数据模型中的数据的公式并报告这些结果。

本教程还介绍了类似于 Excel 函数的 DAX 函数,但有一些变化。提供了 Excel 函数和 DAX 函数的比较,以帮助您区分两者。同样,对Excel公式和DAX公式进行了比较,讨论了异同。充分理解这些差异将有助于您高效地编写有效的 DAX 公式。

本教程不需要了解 Excel 函数和 Excel 公式,因为 DAX 完全适用于 Power Pivot 窗口中的数据模型。您将进入 Excel 工作表,仅查看基于数据模型的 Power 数据透视表、Power Pivot 图表和 Power View 可视化效果。但是,如果您是一位 Excel 专业人士,对 Excel 函数和公式有丰富的了解,最好记下上一节中提到的内容以及本教程中提供的详细信息。

计算列

计算列是可以通过 DAX 公式添加到数据模型中的表中的列。您已经在 Excel Power Pivot 教程中了解了它们,但您将在“计算列”一章中详细了解,因为 DAX 全部涉及计算列、计算字段和 DAX 函数。

计算字段/度量

您无法通过编辑来更改数据模型中表中的值。但是,您可以将计算字段添加到可在 Power PivotTable 中使用的表中。计算字段是通过给出名称并定义 DAX 公式来定义的。有关详细信息,请参阅“计算字段”一章。

在 Excel 2013 之前的 Excel 版本中,计算字段被命名为度量。在 Excel 2016 中,它们被重命名回度量。在本教程中,我们将它们称为计算字段。但是,请注意,术语“计算字段和度量”是同义词,并且在所有方面都指代相同的内容。

您可以在定义和存储计算字段后对其进行编辑。您可以更改定义中使用的 DAX 公式,也可以重命名计算字段。您将在“编辑计算字段”一章中了解这一点。您可以删除计算字段。请参阅章节 –删除计算字段

DAX 公式

DAX 公式构成了 DAX 语言的核心。您可以通过使用 DAX 公式定义计算字段和计算列来创建计算字段和计算列。您可以编写DAX公式来进行数据分析操作。DAX 公式不引用表中的单个单元格或单元格范围,而是引用数据模型中的表和列。数据模型中的表中的列必须包含相同的数据类型。

DAX 公式包含表、列、计算列、计算字段、DAX 运算符和 DAX 函数。请参阅“DAX 公式”一章来详细了解。

DAX 语法

与任何语言 DAX 一样,公式语言也有语法。您的 DAX 公式应遵循 DAX 语法,否则,您将在设计时或运行时出现错误,或者收到不正确的结果。

您将在本章中学习以下内容 – DAX 语法-

  • 表、列的 DAX 命名要求
  • DAX 运算符
  • DAX 特殊值
  • DAX 数据类型
  • DAX 隐式数据类型转换

DAX 运算符

DAX 是一种公式语言,因此在定义公式时使用运算符。DAX 有以下类型的运算符 -

  • DAX 算术运算符
  • DAX 比较运算符
  • DAX 文本连接运算符
  • DAX 逻辑运算符

DAX 运算符优先顺序也已定义,并且与 Excel 运算符优先顺序不同。请参阅章节 – DAX 运算符

DAX 标准参数

DAX函数语法对参数有一定的要求。这是因为 DAX 函数参数可以是表、列、计算字段或其他 DAX 函数。请参阅“DAX 标准参数”一章。

DAX 函数

Excel 2013 具有 246 个可在 DAX 公式中使用的 DAX 函数。您将在“DAX 函数”一章中了解类别级别的这些函数。但是,有关每个 DAX 函数语法、参数、用法和返回值的详细信息,您必须参考我们的教程 - DAX 函数。用于描述每个 DAX 函数的部分名称在“了解 DAX 函数”一章中给出。

由于编写 DAX 公式需要 DAX 函数,并且所使用的 DAX 函数的结果取决于它们所使用的上下文,因此您可能需要在这两个教程之间来回切换才能掌握将在数据中使用的 DAX使用 DAX 和 Power BI 建模。

DAX 特殊函数

DAX 具有一些使 DAX 强大的功能。这些 DAX 函数属于 DAX 时间智能函数和 DAX 过滤函数类别,需要特别提及。您将在“了解 DAX 时间智能”一章中了解 DAX 时间智能功能。您将在“DAX 过滤器函数”一章中了解DAX 过滤器函数的用法。

DAX 评估背景

DAX 公式的结果可能会根据用于评估的上下文而有所不同。DAX 有两种类型的评估上下文 - 行上下文和过滤器上下文。请参阅“DAX 评估上下文”一章。

DAX 公式

DAX 是一种公式语言,您必须在编写 DAX 公式时充分利用它。请参阅“DAX 公式”一章,了解公式语法以及如何轻松正确地创建它们。

每当刷新数据以及重新计算 DAX 公式时,DAX 公式的结果都会发生变化。您必须了解数据刷新和重新计算之间的区别。请参阅章节 -更新 DAX 公式的结果

数据模型中的数据是预期的,并且会不时发生变化。这是因为数据用于数据分析活动,需要任何时间点的最新数据。要了解刷新数据的不同方式,请参阅章节 -更新数据模型中的数据

您将在“重新计算 DAX 公式”一章中了解不同类型的 DAX公式重新计算

DAX 公式重新计算必须考虑数据依赖性并遵循特定顺序。否则,您可能会得到错误或错误的结果。有关详细信息,请参阅章节 - DAX 公式重新计算故障排除

在“DAX公式错误”一章中,您将深入了解一些常见的 DAX 公式错误,并了解如何修复这些错误。

DAX 情景

如果您开始学习一门新语言,熟悉该语言的最佳方法是了解在哪里使用什么。同样,DAX作为一种用于数据分析的公式语言,您需要了解它可以使用的各种场景。

请参阅以下章节以获取有关此内容的详细信息。

Excel DAX - 计算列

计算列是通过定义列值的 DAX 公式添加到工作簿数据模型中现有表的列。您无需导入列中的值,而是创建计算列。

您可以在数据透视表、数据透视图、Power 数据透视表、Power 数据透视图或 Power View 报表中使用计算列,就像任何其他表列一样。

了解计算列

用于创建计算列的 DAX 公式类似于 Excel 公式。但是,在 DAX 公式中,您无法为表中的不同行创建不同的公式。DAX 公式会自动应用于整个列。

例如,您可以创建一个计算列,以使用 DAX 公式从现有列 - 日期中提取年份 -

= YEAR ([Date]) 

YEAR 是 DAX 函数,Date 是表中的现有列。如图所示,表名括在括号中。您将在“DAX 语法”一章中了解更多相关信息。

当您使用此 DAX 公式向表添加列时,创建公式后就会立即计算列值。将创建一个标题为CalculatedColumn1 且填充了年份值的新列。

根据需要重新计算列值,例如刷新基础数据时。您可以基于现有列、计算字段(度量)和其他计算列创建计算列。

创建计算列

考虑奥运会成绩的数据模型,如以下屏幕截图所示。

创建计算列
  • 单击数据视图。
  • 单击结果选项卡。

您将查看结果表。

查看结果表

如上面的屏幕截图所示,最右边的列有标题 - 添加列。

  • 单击功能区上的“设计”选项卡。
  • 单击“列”组中的“添加”。
添加列

指针将出现在公式栏中。这意味着您要添加带有 DAX 公式的列。

  • 在编辑栏中键入 =YEAR ([日期])。
公式栏中的指针

从上面的屏幕截图中可以看出,最右边的列及其标题 - 添加列已突出显示。

  • 按 Enter 键。

计算需要一段时间(几秒钟)才能完成。请稍等。

新的计算列将插入到最右侧添加列的左侧。

插入的计算列

如上面的屏幕截图所示,新插入的计算列突出显示。整列中的值按照所使用的 DAX 公式显示。列标题是CalculatedColumn1。

重命名计算列

要将计算列重命名为有意义的名称,请执行以下操作 -

  • 双击列标题。列名称将突出显示。
重命名计算列
  • 选择列名称。
  • 输入年份(新名称)。
选择列名称并输入年份

如上面的屏幕截图所示,计算列的名称已更改。

您还可以通过右键单击计算列,然后单击下拉列表中的“重命名”来重命名计算列。

只需确保新名称不与表中的现有名称冲突即可。

检查计算列的数据类型

您可以检查计算列的数据类型,如下所示 -

  • 单击功能区上的“主页”选项卡。
  • 单击数据类型。
检查数据类型

正如您在上面的屏幕截图中看到的,下拉列表包含列的可能数据类型。在此示例中,选择默认(自动)数据类型,即整数。

计算列中的错误

由于以下原因,计算列中可能会出现错误 -

  • 更改或删除表之间的关系。这是因为使用这些表中的列的公式将变得无效。

  • 该公式包含循环或自引用依赖关系。

性能问题

如前面的奥运会结果示例所示,结果表包含大约 35000 行数据。因此,当您使用 DAX 公式创建列时,它会一次性计算出该列中的所有 35000 多个值,这需要一些时间。数据模型和表旨在处理数百万行数据。因此,当 DAX 公式引用过多时,可能会影响性能。您可以通过执行以下操作来避免性能问题 -

  • 如果您的 DAX 公式包含许多复杂的依赖项,请分步骤创建它,并将结果保存在新的计算列中,而不是一次创建单个大公式。这使您能够验证结果并评估性能。

  • 当数据发生修改时,计算列需要重新计算。您可以将重新计算模式设置为手动,从而节省频繁的重新计算。但是,如果计算列中的任何值不正确,该列将呈灰色显示,直到您刷新并重新计算数据。

Excel DAX - 计算字段/度量

数据模型中表中的计算字段是通过 DAX 公式获得的字段。在 Power Pivot 的早期版本中,计算字段称为度量。在 Excel 2013 中,它被重命名为计算字段。但是,在 Excel 2016 中,它被重命名为“measure”。如果您参考任何文档,您会发现这两个术语混淆了。请注意,术语“计算字段”和“度量”是同义词。在本教程中,我们使用术语计算字段。

了解计算字段

计算字段是专门为数据透视表(或数据透视图)中使用而创建的公式。

您可以基于标准聚合函数(例如 COUNT 或 SUM)或通过定义自己的 DAX 公式来创建计算字段。

以下是计算字段和计算列之间的差异 -

  • 计算字段只能在数据透视表的 VALUES 区域中使用。

  • 包含计算结果的计算列也可用于 ROWS、COLUMNS 和 FILTERS 区域。

保存计算字段

计算字段将与其源表一起保存在数据模型中。它作为表中的字段出现在“Power 数据透视表”或“Power 数据透视图字段”列表中。

使用计算字段

要使用计算字段,您必须从 Power 数据透视表字段列表中选择它。计算字段将添加到 VALUES 区域,并且将评估用于计算字段的公式。为行和列字段的每个组合创建一个结果。

计算字段 – 示例

考虑以下奥运会数据的数据模型 -

计算字段

如上面的屏幕截图所示,“结果”表有一个“奖牌”字段,其中包含包含“体育”-“赛事”-“国家/地区”-“日期”组合的每行的值 - 金、银或铜牌。假设您想要每个国家/地区的奖牌数,那么您可以使用以下 DAX 公式创建计算字段奖牌数 -

Medal Count := COUNTA([Medal])

在表中创建计算字段

要在结果表中创建计算字段奖牌计数,请执行以下操作 -

  • 单击结果表中奖牌列下方计算区域中的单元格。该单元格将突出显示。

  • 在公式栏中输入奖牌计数:=COUNTA([奖牌])。

在表中创建计算字段

按 Enter 键。

按回车键

如上面的屏幕截图所示,计算字段出现在所选单元格中,显示值为 34,094。该数字是结果表中的总行数。因此,乍一看并没有多大意义。如前所述,计算字段的实际用途只能通过将其添加到 Power 数据透视表或 Power 数据透视图来查看。

使用 Power PivotTable 中的计算字段

要使用计算字段来计算每个国家的奖牌数量,请执行以下操作 -

  • 单击 Power Pivot 窗口中功能区上的数据透视表。
  • 单击下拉列表中的数据透视表。
使用 Power PivotTable 中的计算字段

将出现“创建数据透视表”对话框。

  • 单击现有工作表。
  • 选择要放置数据透视表的位置。

将创建一个空的数据透视表。

  • 单击数据透视表字段列表中的结果表。
  • 单击字段 – 国家/地区和奖牌数。
创建空数据透视表

正如您所观察到的,奖牌计数被添加到 VALUES 区域,而国家/地区被添加到 ROWS 区域。数据透视表是使用行中显示的字段“国家/地区”值创建的。对于每一行,都会计算并显示奖牌计数值。这样,计算字段就会评估所使用的 DAX 公式并显示值。

  • 将“结果”表中的“运动”字段添加到“行”区域。
添加田径运动

正如您在上面的屏幕截图中所看到的,奖牌数是针对每个国家/地区计算的 - 体育方面以及国家/地区本身的小计。

这就是 DAX 对 Power 功能的补充。

计算字段的类型

计算字段有两种类型 - 隐式和显式。

  • 在 Power 数据透视表字段列表窗格中创建隐式计算字段

  • 显式计算字段可以在 Power Pivot 窗口的表中创建,也可以从 Excel 窗口的 PowerPivot 功能区创建。

创建隐式计算字段

可以通过两种方式创建隐式计算字段,都可以在“Power 数据透视表字段”窗格中创建。

在数据透视表字段列表中创建隐式计算字段

您可以从数据透视表字段列表中的奖牌字段创建奖牌字段计数,如下所示 -

  • 取消选择“奖牌计数”字段。
  • 右键单击奖牌字段。
  • 单击下拉列表中的添加到值。
创建隐式计算字段

奖牌计数出现在“值”区域中。奖牌计数列将添加到数据透视表中。

奖牌栏计数

在 VALUES 区域中创建隐式计算字段

您可以在“值”区域中创建一个隐式计算字段 - % of Parent Row,以表示一个国家/地区赢得的每项运动的奖牌数占该国家/地区赢得的奖牌总数的百分比。

  • 单击“值”区域中“奖牌计数”框中的向下箭头。
  • 单击下拉列表中的值字段设置。
在值区域中创建隐式计算字段

出现值字段设置对话框。

  • 在“自定义名称”框中键入“奖牌百分比”。
  • 单击“值显示为”选项卡。
  • 单击值显示为下的框。
  • 单击父行总计的百分比。
值字段设置
  • 单击数字格式按钮。

出现“设置单元格格式”对话框。

  • 单击百分比。
  • 在小数点后输入 0。
  • 单击“确定”。
  • 在“值字段设置”对话框中单击“确定”。
  • 选择不显示小计。
设置单元格格式对话框

您创建了另一个隐式计算字段“奖牌百分比”,并且您可以观察到,对于每个国家/地区,显示了体育方面的奖牌百分比。

隐式计算字段的缺点

隐式计算字段很容易创建。事实上,您甚至已经在 Excel 数据透视表和数据透视图中创建了它们。但是,它们有以下缺点 -

  • 它们很不稳定。这意味着,如果您取消选择用于计算字段的字段,它将被删除。如果你想再次显示它,你必须再次创建它。

  • 它们的范围仅限于创建它们的数据透视表或数据透视图。如果您在另一个工作表中创建另一个数据透视表,则必须再次创建计算字段。

另一方面,显式计算字段将与表一起保存,并且在您选择该表时可用。

创建显式计算字段

您可以通过两种方式创建显式计算字段 -

  • 在数据模型中表的计算区域中。您已经在“在表中创建计算字段”部分中了解了这一点。

  • 从 Excel 表中的 PowerPivot 功能区。您将在下一节中学习这种创建显式计算字段的方法。

从 PowerPivot 功能区创建显式计算字段

要从 PowerPivot 功能区创建显式计算字段,请执行以下操作 -

  • 单击工作簿中功能区上的 POWERPIVOT 选项卡。
  • 单击计算区域中的计算字段。
  • 单击下拉列表中的新计算字段。
创建显式计算

出现计算字段对话框。

  • 填写所需信息,如以下屏幕截图所示。
计算字段对话框
  • 单击检查公式按钮。
  • 仅当公式中没有错误时单击“确定”。

正如您所观察到的,您可以在此对话框中定义计算字段的类别和格式。此外,您可以使用 IntelliSense 功能来了解函数的用法,并使用自动完成功能轻松完成函数、表和列的名称。有关 IntelliSense 功能的详细信息,请参阅“DAX 公式”一章。

这是创建显式计算字段的推荐方法。

Excel DAX - 编辑计算字段

您可以编辑计算字段来修改它。但是,在编辑计算字段之前,您应该知道它的存储位置。就是说,计算的字段存储在哪个表中。这对于隐式和显式计算字段都适用。计算字段只能与数据模型中的一个表关联。

查找计算字段

要在数据模型中查找计算字段,请执行以下操作 -

  • 单击 Power Pivot 窗口中功能区上的“高级”选项卡。
  • 单击显示隐式计算字段。
查找计算字段
  • 单击图表视图。
单击图表视图

正如您在上面的屏幕截图中看到的,“显示隐式计算字段”在功能区上突出显示。如果它没有突出显示,请再次单击它。

您还可以观察到有 4 个复选框 - 列、计算字段、层次结构和 KPI。默认情况下,4 个都被选中。

  • 取消选中复选框 - 列、层次结构和 KPI。

这将仅选中“计算字段”框。

已选中计算字段框

如上面的屏幕截图所示,只有“结果”表显示了字段。另外两个表是空白的。这表明只有结果表具有计算字段。您还可以观察到隐式计算字段隐式计算字段图标显示了一个图标,而显式计算字段 - 奖牌计数没有该图标。

查看表中的计算字段

您可以查看表中的计算字段,如下所示 -

  • 单击计算字段。
  • 右键单击并在下拉列表中选择转到。
查看表中的计算字段

该表将出现在数据视图中。

数据视图

如上面的屏幕截图所示,计算字段出现在表的计算区域中。

更改表中的计算字段

您可以更改用于表中计算字段的公式。

  • 单击数据模型数据视图中表中的计算字段。
  • 在公式栏中选择公式 - := 右侧。

该公式将突出显示。

公式突出显示
  • 输入新公式。
  • 按 Enter 键。

您将在后续章节中了解有关 DAX 公式的更多信息。

重命名数据模型中的计算字段

您可以在数据视图或图表视图中更改数据表中计算字段的名称。

在数据视图中重命名计算字段

  • 单击数据模型数据视图中表中的计算字段。
  • 在公式栏中选择计算字段名称 – := 的左侧。

计算出的字段名称将突出显示。

字段名称突出显示
  • 输入计算字段的新名称。
  • 按 Enter 键。

您将在后续章节中了解有关 DAX 语法的更多信息。

在图表视图中重命名计算字段

  • 右键单击图表视图中表中的计算字段名称。
  • 单击下拉列表中的重命名。
在图表视图中重命名计算字段

该名称将进入编辑模式。输入计算字段的新名称。

在 Excel 窗口中查看计算字段

您可以在 Excel 窗口中查看计算字段,如下所示 -

  • 单击功能区上的 POWERPIVOT 选项卡。
  • 单击“计算”组中的“计算字段”。
  • 单击下拉列表中的管理计算字段。
在 Excel 窗口中查看计算字段

将出现“管理计算字段”对话框。数据模型中显式计算字段的名称显示在对话框中。

“管理计算字段”对话框

在管理计算字段中更改计算字段

您可以在“管理计算字段”对话框中更改计算字段。

  • 单击奖牌计数。
  • 单击编辑按钮。
在管理计算字段中更改计算字段

出现计算字段对话框。

  • 在公式框中选择 = 右侧的公式。
出现计算字段对话框
  • 输入新公式。
  • 单击“确定”。
  • 在“管理计算字段”对话框中单击“关闭”。

在管理计算字段中重命名计算字段

您可以在“管理计算字段”对话框中重命名计算字段。

  • 单击奖牌计数。
  • 单击编辑按钮。

出现计算字段对话框。

  • 在计算字段名称框中选择名称。
在管理计算字段中重命名计算字段
  • 输入计算字段的新名称。
  • 单击“确定”。
  • 在“管理计算字段”对话框中单击“关闭”。

在数据模型中移动计算字段

您可以在创建计算字段的表的计算区域内移动计算字段。但是,它不能移动到另一个表。

  • 右键单击计算字段。
  • 单击“剪切”。
  • 将指针移动到同一个表的计算区域中的不同位置。
  • 单击“粘贴”。

注意- 计算字段位于表的计算区域内的位置并不重要,因为计算字段的 DAX 公式中的数据引用是通过列名称并明确说明的。

Excel DAX - 删除计算字段

您可以删除显式和隐式计算字段。有多种方法可以实现这一点,您将在本章中学习这些方法。

但是,在删除计算字段之前,您需要记住以下几点 -

  • 显式计算字段可以在多个数据透视表和/或数据透视图中使用。因此,您需要确保删除显式计算字段不会影响您已生成的任何报告。

  • 显式计算字段可以用于其他显式计算字段的计算。因此,您需要确保显式计算字段未在其他显式计算字段的任何计算中使用。

  • 隐式计算字段仅限于使用它的数据透视表或数据透视图。因此,在删除隐式计算字段之前,只需确保可以从相应的数据透视表或数据透视图中删除它即可。

  • 创建隐式计算字段比创建显式计算字段更简单。因此,在删除显式计算字段之前需要更加小心。

  • 如果名称与隐式计算字段的名称冲突,则无法创建显式计算字段。因此,您可能必须在创建显式计算字段之前删除该隐式计算字段。

删除数据模型中的显式计算字段

您可以在数据模型的数据视图或图表视图中删除显式计算字段。

在数据视图中删除显式计算字段

  • 在数据视图的计算区域中找到计算字段。
  • 右键单击计算字段。
  • 单击下拉列表中的删除。
在数据视图中删除显式计算字段

出现删除确认消息。

删除确认

单击从模型中删除。显式计算字段将被删除。

在图表视图中删除显式计算字段

  • 在图表视图的数据表中找到计算字段。
  • 右键单击计算字段名称。
  • 单击下拉列表中的删除。
在图表视图中删除显式计算字段

出现删除确认消息。

出现消息

单击从模型中删除。显式计算字段将被删除,并且不会在数据表的字段列表中看到。

删除 Excel 窗口中的显式计算字段

您可以从 Excel 窗口中删除显式计算字段,如下所示 -

  • 单击功能区上的 POWERPIVOT 选项卡。
  • 单击“计算”组中的“计算字段”。
  • 单击下拉列表中的管理计算字段。
删除 Excel 窗口中的显式计算字段

将出现“管理计算字段”对话框。

  • 单击显式计算字段名称。
  • 单击删除按钮。
出现管理计算字段对话框

出现删除确认消息。

管理计算字段对话框
  • 单击“是”。数据模型已更改的信息消息出现在顶部。
  • 单击对话框中的关闭按钮。
改变数据模型

显式计算字段将被删除,并且不会在工作簿的数据透视表/数据透视图字段列表中看到。

删除隐式计算字段

您可以在数据模型的数据视图或图表视图中删除隐式计算字段。

在数据视图中删除隐式计算字段

  • 在数据视图的计算区域中找到计算字段。
  • 右键单击计算字段。
  • 单击下拉列表中的删除。
在数据视图中删除隐式计算字段

出现删除确认消息。

隐式计算字段删除确认
  • 单击从模型中删除。隐式计算字段将被删除。

在图表视图中删除隐式计算字段

  • 在图表视图的数据表中找到计算字段。
  • 右键单击计算字段名称。
  • 单击下拉列表中的删除。
在图表视图中删除隐式计算字段

出现删除确认消息。

删除隐式计算字段确认

单击从模型中删除。隐式计算字段将被删除,并且不会在数据表的字段列表中看到。

Excel DAX - 语法

如前所述,DAX 是一种公式语言,由运算符、值、函数和公式组成。在本章中,您将了解 DAX 语法。

DAX 语法可以分类为 -

在继续学习 DAX 语法之前,您必须了解 Excel 公式和 DAX 公式之间的区别。

Excel 公式和 DAX 公式之间的差异

DAX 公式与 Excel 公式类似,您可以在公式栏中键入它们。然而,两者之间存在一些重大差异。

Excel公式 DAX 公式

Excel 公式在 Excel 窗口的公式栏中输入。

DAX 公式在 Power Pivot 窗口的公式栏中键入。

在 Excel 公式中,您可以引用单个单元格或数组来获取数据。

在 DAX 公式中,您只能引用完整的表或数据列,即只能引用表和表中的字段。

但是,如果您必须仅对部分列数据执行计算,则可以使用 DAX 函数来执行此操作,该函数会筛选并提供计算所需的唯一数据值。

Excel 公式支持某些数据类型。

DAX 提供比 Excel 更多的数据类型。因此,DAX 公式也可以使用其他数据类型。

Excel 不支持任何隐式数据转换。

DAX 在计算期间执行隐式数据类型转换。

Excel DAX - 运算符

DAX 是一种公式语言,由函数、运算符和值组成,可在公式或表达式中使用,以计算并返回一个或多个值。

您可以使用DAX 运算符来比较值、执行算术计算和连接字符串。在本章中,您将了解 DAX 运算符以及如何使用它们。

DAX 运算符的类型

DAX 支持以下类型的运算符 -

DAX 运算符优先顺序

您可以使用包含多个 DAX 运算符的 DAX 公式来组合多个值或表达式。在这种情况下,最终结果将取决于操作执行的顺序。DAX 为您提供了默认的运算符优先顺序以及覆盖默认优先顺序的方法。

下表列出了 DAX 默认运算符优先级。

优先顺序 操作员 手术
1 ^ 求幂
2 符号
3 * 和 / 乘法和除法
4 不是
5 + 和 – 加减
6 & 级联
7 =、<、>、<=、>= 和 <> 等于、小于、大于、小于等于、大于等于、不等于

DAX 表达式语法

您需要首先了解 DAX 表达式语法以及如何使用操作数和运算符完成表达式求值。

  • 所有表达式始终以等号 (=) 开头。等号表示后面的字符构成一个表达式。

  • 在等号右侧,您将看到由 DAX 运算符连接的操作数。例如,= 5 + 4 > 5。

    = 5 * 6 - 3。

  • 表达式始终从左到右读取,并且根据上一节中给出的 DAX 运算符优先级按该顺序完成计算。

  • 如果 DAX 运算符具有相同的优先级值,则从左到右对它们进行计算。例如=5*6/10。* 和 / 的优先顺序相同。因此,表达式的计算结果为 30/10 = 3。

  • 如果表达式中的 DAX 运算符具有不同的优先级值,则按从左到右的优先顺序对它们进行计算。

    • = 5 + 4 > 7。默认优先级是+first 和>next。因此,表达式是从左到右计算的。- 首先计算 5 + 4,结果为 9,然后评估 9 > 5,结果为 TRUE。

    • = 5 * 6 - 3。默认优先级是 * 第一个和 - 接下来。因此,表达式是从左到右计算的。- 首先计算 5 * 6,得到 30,然后计算 30 - 3,得到 27。

    • = 2 * 5 - 6 * 3。默认优先级是 * 首先, * 接下来,然后 -。因此,表达式的计算结果为 10 – 18,然后为 -8。请注意,不是 10 - 6 得到 4,然后 4*3 得到 12。

使用括号控制 DAX 计算顺序

您可以通过使用括号来更改 DAX 默认运算符优先顺序,对操作数和运算符进行分组以控制计算顺序。

例如,按照 DAX 默认运算符优先顺序,= 5 * 6 - 3 的计算结果为 27。如果使用括号将操作数和运算符分组为 = 5 * (6 - 3),则首先计算 6 - 3,结果为 3,然后计算 5 * 3,结果为 15。

根据 DAX 默认运算符优先顺序,= 2 * 5 - 6 * 3 的计算结果为 -8。如果使用括号将操作数和运算符分组为 = 2 * (5 - 6) * 3,则首先计算 5 - 6,结果为 -1,然后计算 2 * (-1) * 3,结果为 -6 。

正如您所看到的,对于相同的操作数和运算符,通过对它们进行分组的方式可能会产生不同的结果。因此,当您在 DAX 公式中使用 DAX 运算符时,应注意计算顺序。

Excel 和 DAX 之间的差异

尽管 DAX 与 Excel 公式有相似之处,但两者之间存在某些显着差异。

  • DAX 比 Excel 更强大,因为它具有底层内存驻留计算引擎。

  • DAX 支持比 Excel 更多的数据类型。

  • DAX 提供了关系数据库数据模型的附加高级功能,包括对日期和时间类型的更丰富的支持。

在某些情况下,DAX 中的计算结果或函数的Behave可能与 Excel 中的不同。这是由于以下方面的差异 -

  • 数据类型转换
  • 数据类型

数据类型转换的差异

在 DAX 中,当表达式 =value1 运算符 value2 时,两个操作数 value1 和 value2 应该具有相同的数据类型。如果数据类型不同,DAX 会首先将它们隐式转换为通用数据类型。有关详细信息,请参阅“DAX 语法”一章。

例如,您必须比较不同数据类型的两个操作数,例如由公式生成的数字(例如 =[Amount] * 0.08)和一个整数。第一个数字可以是具有多个小数位的十进制数,而第二个数字是整数。然后 DAX 处理如下 -

  • 首先,DAX 将使用可以存储这两种数字的最大数字格式将这两个操作数转换为实数。

  • 接下来,DAX 将比较两个实数。

相反,Excel 尝试比较不同数据类型的值,而不首先将它们强制为通用数据类型。因此,对于相同的比较表达式,您可能会在 DAX 和 Excel 中发现不同的结果。

数据类型的差异

DAX 和 Excel 中的运算符优先顺序相同。但是,DAX 不支持 Excel 支持的运算符百分比 (%) 和数据范围。此外,DAX 支持表作为数据类型,而 Excel 则不然。

此外,在 Excel 公式中,您可以引用单个单元格、数组或单元格区域。在 DAX 公式中,您不能引用其中任何一个。DAX 公式对数据的引用应按表、列、计算字段和计算列。

如果从 Excel 复制公式并将其粘贴到 DAX 中,请确保 DAX 公式的正确性,因为 DAX 语法与 Excel 公式语法不同。此外,即使 DAX 和 Excel 中的函数具有相同的名称,其参数也可能不同,函数的结果也可能不同。

您将在后续章节中了解有关所有这些的更多信息。

Excel DAX - 标准参数

DAX具有标准参数名称,以方便使用和理解DAX函数。此外,您可以对参数名称使用某些前缀。如果前缀足够清晰,可以使用前缀本身作为参数名称。

标准参数名称

以下是 DAX 标准参数名称 -

先生。 参数名称及说明
1

表达

返回单个标量值的任何 DAX 表达式,其中该表达式将被计算多次(针对每行/上下文)。

2

价值

任何返回单个标量值的 DAX 表达式,其中该表达式在所有其他操作之前仅计算一次。

3

桌子

返回数据表的任何 DAX 表达式。

4

表名

使用标准 DAX 语法的现有表的名称。它不能是一个表达式。

5

列名

使用标准 DAX 语法的现有列的​​名称,通常是完全限定的。它不能是一个表达式。

6

姓名

将用于提供新对象名称的字符串常量。

7

命令

用于确定排序顺序的枚举。

8

领带

用于确定绑定值的处理的枚举。

9

类型

用于确定 PathItem 和 PathItemReverse 的数据类型的枚举。

给参数名称添加前缀

您可以使用前缀限定参数名称 -

  • 前缀应该描述如何使用参数。

  • 前缀的使用方式应避免参数的歧义读取。

例如,

  • Result_ColumnName - 指用于获取 DAX LOOKUPVALUE () 函数中的结果值的现有列。

  • Search_ColumnName - 指用于在 DAX LOOKUPVALUE () 函数中搜索值的现有列。

仅使用前缀作为参数

如果前缀足以清楚地描述参数,则可以省略参数名称并仅使用前缀。省略参数名称并仅使用前缀有时可以帮助避免阅读时出现混乱。

例如,考虑 DATE(年值、月值、日值)。可以省略重复三次的参数名-值,写成DATE(年、月、日)。正如您所观察到的,通过仅使用前缀,该函数更具可读性。

但是,有时为了清楚起见,必须提供参数名称和前缀。

例如,考虑 Year_columnName。参数名称为 ColumnName,前缀为 Year。两者都需要让用户了解该参数需要引用现有的年份列。

Excel DAX - 函数

大多数DAX 函数与 Excel 函数具有相同的名称和功能。但是,DAX 函数已被修改为使用 DAX 数据类型并可处理表和列。

DAX 具有一些 Excel 中找不到的附加功能。这些 DAX 函数是为了特定目的而提供的,例如基于与数据模型的关系数据库方面关联的关系的查找、迭代表以执行递归计算、执行动态聚合以及利用时间智能进行计算的能力。

在本章中,您将了解 DAX 语言支持的函数。有关这些 DAX 函数用法的更多信息,请参阅本教程库中的教程 - DAX 函数。

什么是 DAX 函数?

DAX 函数是 DAX 语言中提供的内置函数,使您能够对数据模型中的表中的数据执行各种操作。如前所述,DAX 用于数据分析和商业智能目的,需要支持从数据中提取、吸收和得出见解。一旦您掌握了 DAX 语言和 DAX 函数的用法,基于数据模型的 DAX 函数将为您提供这些实用程序,使您的工作变得更简单。

Excel 函数与 DAX 函数

您所了解的 Excel 函数与 DAX 函数之间存在某些相似之处。然而,也存在一定的差异。您需要清楚地了解这些,以便避免在使用 DAX 函数以及编写包含 DAX 函数的 DAX 公式时犯错误。

Excel 函数和 DAX 函数之间的相似之处

  • 许多 DAX 函数与 Excel 函数具有相同的名称和相同的一般Behave。

  • DAX 具有与 Excel 中的数组和向量查找函数类似的查找函数。

Excel 函数和 DAX 函数之间的差异

  • DAX 函数已修改为接受不同类型的输入,并且某些 DAX 函数可能返回不同的数据类型。因此,尽管这些函数具有相同的名称,但您需要分别了解它们的用法。在本教程中,您将发现每个 DAX 函数都以 DAX 为前缀,以避免与 Excel 函数混淆。

  • 如果没有进行必要的修改,则无法在 Excel 公式中使用 DAX 函数或在 DAX 中使用 Excel 公式/函数。

  • Excel 函数采用单元格引用或单元格范围作为引用。DAX 函数从不将单元格引用或单元格区域作为引用,而是将列或表作为引用。

  • Excel 日期和时间函数返回一个整数,该整数将日期表示为序列号。DAX 日期和时间函数返回 DAX 中但 Excel 中不存在的日期时间数据类型。

  • Excel 没有返回表格的函数,但某些函数可以处理数组。许多 DAX 函数可以轻松引用完整的表和列来执行计算并返回表或值列。DAX 的这种功能增强了使用 DAX 的 Power Pivot、Power View 和 Power BI 的功能。

  • DAX 查找函数要求在表之间建立关系。

  • Excel 支持数据列中的变体数据类型,即一列中可以包含不同数据类型的数据。而 DAX 期望表的列中的数据始终具有相同的数据类型。如果数据的数据类型不同,DAX 会将整个列更改为最适合列中所有值的数据类型。但是,如果导入数据并出现此问题,DAX 可以标记错误。

要了解 DAX 数据类型和数据类型转换,请参阅“DAX 语法参考”一章。

DAX 函数的类型

DAX 支持以下类型的函数。

  • DAX 表值函数
    • DAX 过滤器函数
    • DAX 聚合函数
    • DAX 时间智能函数
  • DAX 日期和时间函数
  • DAX 信息功能
  • DAX 逻辑函数
  • DAX 数学和三角函数
  • DAX其他功能
  • DAX 父函数和子函数
  • DAX 统计函数
  • DAX 文本函数

在本部分中,您将了解函数类别级别的 DAX 函数。有关 DAX 函数语法以及 DAX 函数返回内容和功能的详细信息 - 请参阅本教程库中的 DAX 函数教程。

DAX时间智能功能和DAX过滤功能非常强大,需要特别提及。有关详细信息,请参阅章节 - 了解 DAX 时间智能和 DAX 过滤器函数。

DAX 表值函数

许多 DAX 函数将表作为输入或输出表,或两者兼而有之。这些 DAX 函数称为 DAX 表值函数。由于表可以具有单个列,因此 DAX 表值函数也将单个列作为输入。您有以下类型的 DAX 表值函数 -

  • DAX 聚合函数
  • DAX 过滤器函数
  • DAX 时间智能功能

了解 DAX 表值函数有助于您有效地编写 DAX 公式。

DAX 聚合函数

DAX 聚合函数聚合表行上的任何表达式,并且在计算中非常有用。

以下是一些 DAX 聚合函数 -

  • ADDCOLUMNS (<表>, <名称>, <表达式>, [<名称>, <表达式>] …)

  • 平均值(<列>)

  • 平均值(<列>)

  • AVERAGEX (<表>, <表达式>)

  • 计数(<列>)

  • COUNTA(<列>)

  • COUNTAX (<表>, <表达式>)

  • 计数空白(<列>)

  • COUNTROWS(<表>)

  • COUNTX (<表>, <表达式>)

  • CROSSJOIN(<表1>,<表2>,[<表3>] …)

  • 不同计数(<列>)

  • 生成(<表1>,<表2>)

  • GENERATEALL(<表1>,<表2>)

  • 最大值(<列>)

  • MAXA(<列>)

  • MAXX (<表>, <表达式>)

  • 最小值(<列>)

  • 米娜(<栏>)

  • MINX (<表>, <表达式>)

  • 产品(<列>)

  • PRODUCTX (<表>, <表达式>)

  • ROW (<名称>, <表达式>, [<名称>, <表达式>] …)

  • SELECTCOLUMNS (<表>, <名称>, <标量表达式>,

  • [<名称>, <标量表达式>] ...)

  • 总和(<列>)

  • SUMMARIZE (<表>, <groupBy_columnName>, [<groupBy_columnName>] …, [<名称>, <表达式>] …)

  • SUMX (<表>, <表达式>)

  • TOPN (<n_value>, <table>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]] …)

DAX 过滤器函数

DAX 筛选器函数返回与当前行相关的列、表或值。您可以使用 DAX 筛选器函数返回特定数据类型、查找相关表中的值以及按相关值进行筛选。DAX 查找函数通过使用表及其之间的关系来工作。DAX 过滤器函数使您能够操纵数据上下文以创建动态计算。

以下是一些 DAX 过滤器功能 -

  • ADDMISSINGITEMS(<showAllColumn>, [<showAllColumn>] ..., <table>, <groupingColumn>, [<groupingColumn>] ... [filterTable] ...)

  • ALL( {<表> | <列>, [<列>], [<列>] …} )

  • ALLEXCEPT(<表>, <列>, [<列>] …)

  • ALLNOBLANKROW(<表>|<列>)

  • ALLSELECTED([<表名> | <列名>])

  • 计算(<表达式>、<过滤器1>、<过滤器2>...)

  • 计算表(<表达式>、<过滤器1>、<过滤器2>...)

  • CROSSFILTER(<列名称1>、<列名称2>、<方向>)

  • 独特(<列>)

  • 早期(<列>,<数字>)

  • 最早的(<列>)

  • 过滤器(<表>,<过滤器>)

  • 过滤器(<列名称>)

  • HASONEFILTER(<列名称>)

  • HASONE值(<c