快速入门:在 30 分钟内了解 DAX 基础知识

注意: 我们希望能够尽快以你的语言为你提供最新的帮助内容。本页面是自动翻译的,可能包含语法错误或不准确之处。我们的目的是使此内容能对你有所帮助。可以在本页面底部告诉我们此信息是否对你有帮助吗?请在此处查看本文的英文版本以便参考。

本快速入门面向对 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帮助中进行了介绍。你还应该熟悉 Excel 创作环境和工具中的Power Pivot 。

示例工作簿

学习 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。

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

衡量"销售额总和"、"计算 (=)" 中的 "[SalesAmount]" 列中的值的总和FactSales表格。

当放置到数据透视表字段列表中的值放置区时, 此度量计算并返回数据透视表中的每个单元格定义的值, 例如 USA 中的手机。

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

与之前的毛利计算列不同, 你将看到列 [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 函数是作为传递给计算函数的参数进行嵌套的。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计算列中的每一行, 通过在 UnitCost 列中减去值来计算值来自 " 单价"中的值?

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

函数

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

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

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

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

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

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

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

插入函数

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

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

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

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

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

  4. 在 "插入函数" 对话框中, 单击 "选择类别" 列表框。默认情况下, 选择 "全部", 下面列出了 "所有" 类别中的所有功能。这是很多功能, 因此你将需要筛选这些函数, 以便更容易找到要查找的函数类型。

  5. 对于此公式, 你希望返回其他表中已经存在的一些数据。为此, 你将使用 "筛选器" 类别中的函数。继续并单击 "筛选器" 类别, 然后在 "选择函数" 中向下滚动, 然后双击相关函数。单击"确定"以关闭 "插入函数" 对话框。

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

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

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

  9. 将此列重命名为 Channel。

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

你刚刚引入了有关 DAX 中的另一个非常重要的函数, 即相关函数。相关函数将返回另一个表中的值。如果当前所在的表和包含要获取的值的表之间存在关系, 则可以使用相关。当然, 相关函数具有巨大的潜力。在这种情况下, 你现在可以在 FactSales 表中包括每个销售的销售渠道。现在, 您可以从 "数据透视表字段列表" 中隐藏 DimChannel 表, 以便更轻松地导航和查看实际需要的最重要的信息。与前面所述的计算函数非常相似, 相关函数非常重要, 你很可能会多次使用它。

正如你所见, 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?由于可以通过在数据透视表中添加列和行标签以及切片器来轻松地应用筛选器上下文, 因此也可以在 DAX 公式中应用筛选上下文, 方法是使用 "全部"、"相关"、"筛选"、"计算" 和 "关系" 等函数定义筛选器。其他度量值和列。例如, 让我们在名为 StoreSales 的度量值中查看以下公式:

公式

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

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

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

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

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

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

  5. 与表达式位于同一表中的度量值 [销售额]。"销售额" 度量值的公式为: = SUM (FactSales [SalesAmount])。

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

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

此公式将确保仅为 DimChannel [ChannelName] 列中具有值 "存储" 的行 (作为筛选器) 计算销售度量值 (作为筛选器定义的)。

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

上下文快速测验

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

  2. 什么是筛选上下文?

  3. 什么是行上下文?

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

总结

既然你对 DAX 中最重要的概念有基本了解, 你就可以开始创建自己的计算列和度量值的 DAX 公式。进行 DAX 的学习可能确实有点棘手, 但是有许多资源可供您使用。在阅读完本主题几次, 并试验一些您自己的公式后, 您可以了解有关其他 DAX 概念和公式的详细信息, 可帮助您解决自己的业务问题。有许多可供您使用的 DAX 资源, Power Pivot帮助、SQL Server 联机丛书、白皮书以及来自 Microsoft 和主流 BI 专业人士的博客。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. 当前行。

扩展你的 Office 技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×