Applies ToMicrosoft 365 专属 Excel Excel 2024 Excel 2021 Excel 2019 Excel 2016

本快速入门面向对 Power Pivot in Excel 或对在 SQL Server Data Tools 中创作的表格模型项目不熟悉的用户。 其目的是针对如何可以使用数据分析表达式 (DAX) 解决许多基本的数据建模和分析问题,向您提供快速简单的介绍。 本主题包括概念性信息、您可以完成的一系列任务以及用于测试您所学内容的一些测验。 在完成本主题后,您就应该对 DAX 中最基本的基础概念有了很好的了解。

什么是 DAX?

DAX 是公式或表达式中可用来计算并返回一个或多个值的函数、运算符和常量的集合。 简而言之,DAX 可帮助您通过模型中已有的数据创建新信息。

为何 DAX 如此重要?

创建工作簿并向其中导入一些数据的过程很轻松。 您甚至可以不使用任何 DAX 公式,即可创建显示重要信息的数据透视表或数据透视图。 但是,如果您需要跨多个产品类别和针对不同日期范围分析关键的销售数据,那该怎么办? 或者,如果您需要组合来自不同数据源的若干表中的重要库存数据,又该怎么办? DAX 公式提供了这一功能以及许多其他重要功能。 了解如何创建有效的 DAX 公式将帮助您最大限度地利用您的数据。 当您获得所需的信息后,可以开始解决影响您的利润的实际业务问题。 这就是商业智能,DAX 将帮助您实现它。

先决条件

您可能已经熟悉了如何在 Microsoft Excel 中创建公式。 此知识将有助于您了解 DAX,但即使您对 Excel 公式没有任何经验,此处介绍的概念也将帮助您开始创建 DAX 公式和立即解决实际的商业智能问题。

我们专门侧重于了解计算中所用的 DAX 公式。 你应该已经熟悉 计算列度量 值的基本概念, (也称为计算字段) ,这两者都在 Power Pivot 帮助中介绍。 您还应熟悉 Power Pivot in Excel 创作环境和工具。

示例工作簿

学习 DAX 的最佳方式是创建一些基本的公式,将其与某些实际数据结合使用并自行查看结果。 这些示例和任务使用 Contoso Sample DAX Formulas.xlsx 工作簿。 可以从 http://go.microsoft.com/fwlink/?LinkID=237472&clcid=0x409 下载此工作簿。 在将此工作簿下载到您的计算机上之后,请将其打开,然后打开 Power Pivot 窗口。

现在开始!

我们将围绕三个非常重要的基础概念设置 DAX 的框架:“语法”、“函数”和“上下文”。 当然,DAX 中还有其他重要概念,但了解这三个概念将为您增强 DAX 技能提供最佳基础。

语法

在创建您自己的公式之前,让我们先来了解 DAX 公式的语法。 语法包括组成公式的不同元素,或者更简单地说,就是如何编写公式。 例如,我们来看一个用于为 FactSales 表中名为 Margin 的计算列中的每一行创建新数据(值)的简单 DAX 公式(公式文本颜色仅用于阐述):

计算列公式

此公式的语法包括以下元素:

  1. 等号运算符 (=) 指示公式的开头,当计算此公式时,它将返回结果或值。 用于计算值的所有公式都将以等号开头。

  2. 引用列 [SalesAmount] 包含我们要从中减去某个值的值。 公式中的列引用始终由方括号 [] 括起来。 与引用单元的 Excel 公式不同,DAX 公式始终引用列。

  3. 减 (-) 数学运算符。

  4. 引用列 [TotalCost] 包含我们要从 [SalesAmount] 列的值中减去的值。

在尝试了解如何解读 DAX 公式时,将其中每个元素分解为您日常思考和说话所用的语言通常会很有用。 例如,您可按如下方式解读此公式:

FactSales 表中,对于 Margin 计算列的每一行,通过从 [ SalesAmount ] 列中的值减去 [TotalCost] 列中 ( ) 值来计算 (=) 一个值。

让我们看一下另一种类型的公式,该公式用于度量值:

计算列公式

此公式包括以下语法元素:

  1. 度量值名称“销售额的总和”。 度量值的公式可以包括度量值名称,后跟冒号,后跟计算公式。

  2. 等号运算符 (=) 指示计算公式的开头。 计算后,它将返回结果。

  3. SUM 函数累加 [SalesAmount] 列中的所有数字。 稍后您将了解有关函数的详细信息。

  4. 括号 () 括起一个或多个参数。 所有函数都要求至少一个参数。 一个参数向函数传递一个值。

  5. 引用表 FactSales。

  6. FactSales 表中的引用列 [SalesAmount]。 通过此参数,Sum 函数可了解对哪一列累加以生成 SUM。

可按如下方式解读此公式:

对于 名为“销售额总和”的度量值, (=) FactSales 表中 [SalesAmount] 列中的值的 SUM。

当放置在数据透视表字段列表中的“值”下拉区域时,此度量值将计算并返回数据透视表中每个单元格定义的值,例如“美国手机”。

请注意,此公式与前面我们用于 Margin 计算列的公式相比存在一些不同点。 尤其是,我们引入了一个“函数”:SUM。 函数是预先编写的公式,旨在更轻松地对数字、日期、时间、文本等执行复杂的计算和操控。 稍后您将了解有关函数的详细信息。

与前面的 Margin 计算列不同,您将看到 [SalesAmount] 列的前面是此列所属的表 FactSales。 这也称为“完全限定”列名,因为它包含前面具有表名的列名。 在同一个表中引用的列不要求在公式包含表名。 这会使引用很多列的较长公式变得更短和更容易阅读。 但是,最好始终将表名包含在度量值公式中,即使在同一个表中也是如此。

注意: 如果表名包含空格、保留关键字或不允许使用的字符,则必须将表名放在单引号中。 如果名称包含 ANSI 字母数字字符范围之外的任何字符,还必须将表名称用引号引起来,而不管您的区域设置是否支持该字符集。

您的公式务必具有正确的语法。 在大多数情况下,如果语法不正确,就会返回错误。 在其他情况下,语法可能正确,但返回的值可能不是您所期望的。 Power Pivot(和 SQL Server Data Tools)包含 IntelliSense;此功能用于帮助您选择正确的元素来创建语法正确的公式。

我们来创建一个简单的公式。 此任务将帮助您进一步了解公式语法,以及编辑栏中的 IntelliSense 功能如何为您提供帮助。

任务:为计算列创建简单公式

  1. 如果尚未在 Power Pivot 窗口中,请在 Excel 的“ Power Pivot ”功能区上单击“ Power Pivot 窗口”。

  2. 在 Power Pivot 窗口中,单击 FactSales 表(选项卡)。

  3. 滚动到最右侧的列,然后在列标题中单击“添加列”

  4. 单击沿模型设计器窗口顶部的编辑栏。

    PowerPivot 公式栏

    您的光标现在将出现在编辑栏中。 编辑栏是您可以为计算列或计算字段键入公式的位置。

    我们花点时间来看一下位于编辑栏左侧的三个按钮。

    编辑栏

    当光标在编辑栏中处于活动状态时,这三个按钮将变为活动状态。 最左侧的按钮 X 只是一个取消按钮。 单击此按钮。 您的光标不再出现在编辑栏中,取消按钮和对勾标记按钮不再出现。 继续,然后再次单击编辑栏。 取消按钮和对勾标记按钮现在将再次出现。 这意味着您已准备好,可以开始输入公式了。

    对勾标记按钮是检查公式按钮。 在您输入了公式后,才会执行此命令。 我们稍后将回过头来讨论此按钮。

    单击 Fx 按钮。 您将看到一个新的对话框:“插入函数”对话框。 “插入函数”对话框是开始输入 DAX 公式的最简单方式。 稍后创建度量值时,我们会向公式添加函数,但目前无需向计算列公式添加函数。 继续并关闭“插入函数”对话框。

  5. 在编辑栏中,键入等号 =,然后键入左方括号 [。 此时将显示一个小的窗口,其中包含 FactSales 表中的所有列。 这就是 IntelliSense 发挥了作用。

    由于计算列始终是在您所在的活动表中创建的,因此列名称前面不需要表名称。 继续并向下滚动,然后双击 [SalesQuantity]。 也可以滚动到所需的列名,然后按下 Tab 键。

    光标现在位于 [SalesQuantity] 的右侧且处于活动状态。

  6. 键入一个空格,然后键入减号运算符 -(负号),接着键入另一个空格。

  7. 现在,请键入另一个左方括号 [。 此时,选择 [ReturnQuantity] 列,然后按 Enter。

    如果出现错误,请仔细检查您的语法。 如果需要,则将其与前面介绍的 Margin 计算列中的公式进行比较。

    在按 Enter 以完成公式之后,“正在计算”将显示在 Power Pivot 窗口底部的状态栏中。 此过程非常快,即使您刚刚为超过三百万行计算了新值,也会很快。

  8. 右键单击列标题并将此列重命名为 NetSales。

搞定! 您刚刚创建了一个简单但功能非常强大的 DAX 公式。 对于 FactSales 表中的“每一”行,NetSales 公式都将通过从 [SalesQuantity] 列中的值减去 [ReturnQuantity] 中的值来计算一个值。 请注意,我们刚刚说了“对于每一行”。 这就引入了 DAX 中另一个非常重要的概念:“行上下文”。 稍后您将了解有关行上下文的详细信息。

在向 DAX 公式中键入运算符时,真正务必了解的是您要在参数中使用的数据类型。 例如,如果您键入的是以下公式 = 1 & 2,则返回的值为文本值“12”。 这是因为与号 (&) 运算符用于对文本进行串联。 DAX 按以下方式解读此公式:通过将值 1 作为文本来计算结果,然后加上值 2(作为文本)。 现在,如果您键入的是 = 1 + 2,DAX 将按如下所示解读此公式:将数值 1 加上数值 2 来计算结果。 结果当然为数值“3”。 DAX 根据公式中的运算符(而不根据参数中使用的列的数据类型)来计算结果值。 DAX 中的数据类型非常重要,但超出了本快速入门的讨论范围。 若要了解有关 DAX 公式中的数据类型和运算符的详细信息,请参阅联机丛书中的“DAX 参考”(http://go.microsoft.com/fwlink/?LinkId=239769&clcid=0x409)。

现在尝试另一个公式。 这一次,你将通过键入公式和使用 IntelliSense 来创建度量值。 如果您并不完全了解公式,请不必过于担心。 此处的重要事项是了解如何同时使用多个元素以正确的语法创建公式。

任务:创建度量值公式

  1. FactSales 表中,单击“计算区域”中的任意空单元格。 这是位于 Power Pivot 窗口中某个表正下方的空单元格区域。

PowerPivot 计算区域

  1. 在编辑栏中,键入名称 Previous Quarter Sales:

  2. 键入一个等号 = 以开始计算公式。

  3. 键入前几个字母 CAL,然后双击要使用的函数。 在此公式中,您要使用 CALCULATE 函数。

  4. 键入左括号 ( 以开始键入要传递到 CALCULATE 函数的参数。

    注意,在键入左括号之后,IntelliSense 将显示 CALCULATE 函数所需的参数。 稍后您将了解参数。

  5. 键入 FactSales 表的前几个字母,然后在下拉列表中双击 FactSales[Sales]

  6. 键入一个逗号 (,) 以指定第一个筛选器,接着键入 PRE,然后双击 PREVIOUSQUARTER 函数。

    在选择 PREVIOUSQUARTER 函数之后,将出现另一个左括号,表明需要另一参数;此时是用于 PREVIOUSQUARTER 函数的参数。

  7. 键入前几个字母 Dim,然后双击 DimDate[DateKey]

  8. 通过键入两个右括号 )),结束传递给 PREVIOUSQUARTER 函数和 CALCULATE 函数的参数。

    公式现在应如下所示:

    Previous Quarter Sales:=CALCULATE(FactSales[Sales], PREVIOUSQUARTER(DimDate[DateKey]))

  9. 单击编辑栏中的检查公式按钮以验证此公式。 如果您收到错误,请验证语法的每个元素。

搞定! 你刚刚使用 DAX 创建了一个度量值,但并不容易。 此公式将执行的操作是:根据数据透视表或数据透视图中应用的筛选器,计算前一个季度的总销售额。

您刚刚见识了 DAX 公式的几个重要环节。 首先,该公式包含两个函数。 请注意,PREVIOUSQUARTER 函数嵌套为传递给 CALCULATE 函数的参数。 DAX 公式可以包含多达 64 个嵌套函数。 一个公式不太可能包含如此多的嵌套函数。 实际上,此类公式很难创建和调试,因此,它可能不会非常快。

在此公式中,您还使用了筛选器。 筛选器可缩小将计算的内容范围。 在这种情况下,您选择了一个筛选器作为参数,这实际上是另一个函数。 稍后您将了解有关筛选器的详细信息。

最后,您使用了 CALCULATE 函数。 这是 DAX 中功能最强大的函数之一。 当您创作数据模型并创建更复杂的公式时,可能需要多次使用此函数。 对于 CALCULATE 函数的讨论超出了本快速入门的范围,但随着您对 DAX 的知识的增长,应特别留意此函数。

注意: 通常,要在 DAX 公式中使用时间智能函数,必须通过使用“标记为日期表”对话框指定一个唯一日期列。 在 Contoso DAX Formula Samples.xlsx 工作簿中,选择 DimDate 表中的 DateKey 列作为唯一的数据列。

额外知识

您可能会问:“什么是我可以创建的最简单的 DAX 公式? ”这个问题的答案是“您不必自行创建的公式”。 而且,这正是通过在度量中使用标准聚合函数可以执行的操作。 几乎所有数据模型都需要对聚合数据进行筛选和计算。 例如,前面看到的“销售额总和”度量值中的 SUM 函数用于将特定列中的所有数字相加。 DAX 也包括对值进行聚合的一些其他函数。 通过使用“自动求和”功能,可以自动创建使用标准聚合的公式。

额外额度任务:使用自动求和功能创建度量值公式

  1. 在表 FactSales 中,滚动到 ReturnQuantity 列,然后单击列标题以选择整列。

  2. 在“ 开始 ”选项卡的功能区上的“ 计算” 组中,单击“ 自动求和 ”按钮。

PowerPivot 中的自动求和

单击“ 自动求和”旁边的向下箭头,然后单击“ 平均 ” (请注意可以使用的其他标准聚合函数,) 。

立即创建名为 ReturnQuantity 的平均值的新度量值:后跟公式 =AVERAGE ([ReturnQuantity]) 。

现在还不容易吗? 当然,并非您创建的所有公式都如此简单。 但是,通过使用“自动求和”功能,您可以使用标准聚合计算创建快速且简单的公式。

这应让您对 DAX 公式中使用的语法有一个很好的了解。 此外,还向您引入了一些实在很酷的功能(如 IntelliSense 和“自动求和”),以帮助您创建快速、简单和精确的公式。 当然,有关语法,您有大量的内容可以学习。 可供您了解详细信息的好地方是 DAX 参考或 SQL 联机丛书。

语法快速测验

  1. 编辑栏上的此按钮有什么用? 函数按钮

  2. 在 DAX 公式中始终用什么将列名括起来?

  3. 如何为以下内容编写公式:DimProduct 表中,对于 UnitMargin 计算列的每一行,通过从 UnitPrice 列中的值减去 UnitCost 列中的值来计算值

本主题的末尾提供了答案。

函数

函数是通过使用采用特定顺序或结构的特定值(称为参数)来执行计算的预定义公式。 参数可以是其他函数、另一个公式、列引用、数字、文本、逻辑值(例如 TRUE 或 FALSE)或常量。

DAX 包括以下函数“类别”:日期和时间、信息、逻辑、数学、统计、文本以及时间智能函数。 如果您熟悉 Excel 公式中的函数,则会发现 DAX 中的许多函数很相似;但 DAX 公式在以下方面很独特:

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

  • 如果需要逐行自定义计算,DAX 可提供让您使用当前行值或相关值作为一种参数来执行计算(因上下文而异)的函数。 稍后您将了解有关上下文的详细信息。

  • DAX 包含的许多函数都将返回表,而不是返回值。 表不会显示,而是用于向其他函数提供输入。 例如,您可以检索一个表,然后对该表中的非重复值进行计数,或者计算多个已筛选表或列的动态总和。

  • DAX 包含多种“时间智能”函数。 利用这些函数,您可以定义或选择日期范围,并基于它们执行动态计算。 例如,您可以比较并行时段内的总和。

有时难以知道您在公式可能需要使用哪些函数。 Power Pivot 以及 SQL Server Data Tools 中的表格模型设计器包括“插入函数”功能,这是一个对话框,可帮助您按类别选择函数并提供每个函数的简短说明。 插入函数

现在,我们使用“插入函数”功能创建一个新公式,其中包含您将选择的函数:

任务:使用“插入函数”向公式添加函数

  1. 在 FactSales 表中,滚动到最右侧的列,然后在列标题中,单击“ 添加列”。

  2. 在编辑栏中键入等号 =。

  3. 单击“ 插入函数 ”按钮。 插入函数 这将打开“ 插入函数 ”对话框。

  4. 在“ 插入函数 ”对话框中,单击“ 选择类别 ”列表框。 默认情况下,选择 “全部 ”,下面列出了 “所有 ”类别中的所有函数。 其中有大量的函数,因此您需要筛选函数,以便能够更轻松地找到您要查找的函数类型。

  5. 对于此公式,您希望返回另一个表中已存在的某些数据。 为此,您要使用“筛选器”类别中的一个函数。 继续单击“ 筛选器 ”类别,然后在 “选择函数”中向下滚动并双击“RELATED”函数。 单击“ 确定” 关闭“ 插入函数 ”对话框。

  6. 使用 IntelliSense 帮助您查找和选择 DimChannel[ChannelName] 列。

  7. 关闭公式,然后按 Enter。

  8. 在按 Enter 以完成公式之后,“正在计算”将显示在 Power Pivot 窗口底部的状态栏中。 现在,您将看到刚刚使用 DimChannel 表中的渠道信息在 FactSales 表中创建了一个新列。

  9. 将此列重命名为 Channel。

    您的公式应如下所示:=RELATED(DimChannel[ChannelName])

你刚刚被介绍到 DAX 中另一个非常重要的函数, 即 RELATED 函数。 RELATED 函数返回另一个表中的值。 当您目前所在的表与包含您要获取的值的表之间存在关系时,您可以使用 RELATED。 当然,RELATED 函数具有无限的可能性。 在这种情况下,您现在可以在 FactSales 表中包括每笔销售的销售渠道。 您现在可以从数据透视表字段列表中隐藏 DimChannel 表,以更便于导航和只查看确实需要的最重要信息。 与前面介绍的 CALCULATE 函数很类似,RELATED 函数也非常重要,您将多次使用它。

正如您所看到的,DAX 中的函数可帮助您创建功能非常强大的公式。 我们实际上只探讨了函数的基本知识。 随着您的 DAX 技能得到改进,您将使用许多不同函数创建公式。 了解所有 DAX 函数详细信息的最佳位置之一是 数据分析表达式 (DAX) 参考

函数快速测验

  1. 函数始终引用什么?

  2. 一个公式可以包含多个函数吗?

  3. 应使用哪种“类别”的函数将两个字符串“串联”成一个字符串?

本主题的末尾提供了答案。

上下文

上下文是要了解的最重要的 DAX 概念之一。 DAX 中有两种类型的上下文:“行上下文”和“筛选上下文”。 我们先了解行上下文。

行上下文

行上下文最容易被视作当前行。 例如,还记得学习语法时在前面介绍的 Margin 计算列吗? 公式 =[SalesAmount] - [TotalCost] 针对表中的每一行计算 Margin 列中的一个值。 每行的值可通过同一行的其他两列 [SalesAmount] 和 [TotalCost] 中的值进行计算得出。 DAX 可以计算 Margin 列中每行的值,因为它具有上下文:对于每一行,它将采用 [TotalCost] 列中的值,并从 [SalesAmount] 列的值中减去前面的值。

在下面所示的所选单元中,当前行中的值 $49.54 的计算方式为:从 [SalesAmount] 列的值 $101.08 中减去 [TotalCost] 列中的值 $51.54。

PowerPivot 中的行上下文

行上下文不仅仅适用于计算列。 只要公式具有应用筛选器以标识表中单一行的函数,则行上下文也适用。 此函数将对它所筛选的表的每一行内在应用行上下文。 这种类型的行上下文最常应用于度量值。

筛选上下文

筛选上下文理解起来比行上下文要更难一些。 您可以非常轻松地将筛选上下文视为:在确定结果或值的计算中应用的一个或多个筛选器。

筛选上下文不能替代行上下文;而是在应用行上下文之外应用。 例如,要进一步缩小计算中要包含的值的范围,您可以应用一个筛选上下文,该上下文不仅指定行上下文,也指定该行上下文中的一个特定值(筛选器)。

可以在数据透视表中轻松地查看筛选上下文。 例如,当您将 TotalCost 添加到“值”区域,然后将 Year 和 Region 添加到行或列时,您就定义了一个筛选上下文,此上下文将基于给定的年份和区域选择数据子集。

为什么筛选上下文对于 DAX 如此重要? 因为,虽然在数据透视表中添加列标签和行标签以及切片器可以最轻松地应用筛选器上下文,但也可以通过使用 ALL、RELATED、FILTER、CALCULATE、关系和其他度量值和列等函数定义筛选器,从而在 DAX 公式中应用筛选器上下文。 例如,让我们在名为 StoreSales 的度量值中查看以下公式:

公式

很明显,此公式比您前面看到的一些其他公式更复杂。 但是,为了更好地理解此公式,我们可以将其分解,这与对待其他公式的方式很相似。

此公式包括以下语法元素:

  1. 度量值名称 StoreSales,后跟冒号 :。

  2. 等号运算符 (=) 指示公式的开头。

  3. CALCULATE 函数在由指定筛选器修改的上下文中计算表达式(作为参数)。

  4. 括号 () 括起一个或多个参数。

  5. 与表达式相同的表中的度量值 [Sales]。 Sales 度量值的公式为:=SUM (FactSales[SalesAmount]) 。

  6. 逗号 (,) 分隔每个筛选器。

  7. 引用列和特定值 DimChannel[ChannelName] =”Store”,作为一个筛选器。

此公式将确保仅针对 DimChannel[ChannelName] 列中值(值“Store”)中作为筛选器定义的 Sales 度量值(作为筛选器)进行计算。

正如您所想像的,可以在公式中定义筛选上下文意味着巨大且强大的功能。 能够仅引用相关表中的特定值只是这样的示例之一。 如果您未能立即完全了解上下文,请不要担心。 当您创建自己的公式时,您将更好地了解上下文以及它在 DAX 中如此重要的原因。

上下文快速测验

  1. 两种类型的上下文是什么?

  2. 什么是筛选上下文?

  3. 什么是行上下文?

本主题的末尾提供了答案。

总结

现在,你已基本了解 DAX 中最重要的概念,可以自行为计算列和度量值创建 DAX 公式。 DAX 学起来确实不太容易,但有许多资源可供您参考。 在多次通读本主题并体验您自己的一些公式之后,您可以更多地了解可帮助解决自己的业务问题的其他 DAX 概念和公式。 Power Pivot 帮助、SQL Server 联机丛书、白皮书和来自 Microsoft 和前沿商业智能专家的博客中有许多 DAX 资源可供您参考。 DAX 资源中心 Wiki (http://social.technet.microsoft.com/wiki/contents/articles/dax-resource-center.aspx) 是供您入门的一个好位置。 数据分析表达式 (DAX) 参考也是一个很好的资源。 请确保将其保存在您的收藏夹中。

“商业智能表格模型中的 DAX”白皮书可供下载 (http://go.microsoft.com/fwlink/?LinkID=237472&clcid=0x804),它提供了有关此处介绍的概念的更详细说明以及许多其他高级概念和公式。 此白皮书还使用您已有的同一个 Contoso DAX Sample Formulas.xlsx 工作簿。

快速测验答案

语法:

  1. 打开“插入函数”功能。

  2. 方括号 []。

  3. =[UnitPrice] - [UnitCost]

函数:

  1. 表和列。

  2. 可以。 一个公式可以包含多达 64 个嵌套函数。

  3. 文本函数

上下文:

  1. 行上下文和筛选上下文。

  2. 在确定单个值的计算中使用的一个或多个筛选器。

  3. 当前行。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。