Power Pivot 中的数据分析表达式 (DAX)

Power Pivot 中的数据分析表达式 (DAX)

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

数据分析表达式 (DAX) 最初听起来有点 intimidating, 但不要让名称欺骗你。DAX 基础知识确实非常容易理解。第一项是-DAX 第一项是一种编程语言。DAX 是一种公式语言。你可以使用 DAX 定义计算列度量值(也称为计算字段) 的自定义计算。DAX 包含 Excel 公式中使用的一些函数, 以及专门用于处理关系数据和执行动态聚合的其他函数。

了解 DAX 公式

DAX 公式与 Excel 公式非常相似。要创建一个 DAX 公式,只需键入一个等号,后跟函数名或表达式以及所需的任何值或参数即可。与 Excel 类似,DAX 提供多种函数,可用于处理字符串、使用日期和时间执行计算或者创建条件值。

但 DAX 公式在以下几个重要方面却有所不同:

  • 如果您希望逐行自定义计算,DAX 提供了允许您使用当前行值或相关值执行计算(因上下文而异)的函数。

  • DAX 包含一类函数,此类函数返回表作为其结果,而不是返回单个值。这些函数可用于提供其他函数的输入。

  • DAX 中的时间智能函数允许使用日期范围进行计算, 并比较并行时间段内的结果。

使用 DAX 公式的位置

在Power Pivot中的计算计算字段中可以创建公式。

计算列

计算列是添加到现有 Power Pivot 表中的列。无需粘贴或导入值,您可以在计算列中创建用于定义列值的 DAX 公式。如果某个数据透视表(或数据透视图)中包括 Power Pivot 表,则可以像使用任何其他数据列一样使用计算列。

计算列中的公式非常类似于在 Excel 中创建的公式。但与在 Excel 中不同,您不能为表中的不同行创建不同公式 — DAX 公式会自动应用到整个列。

当某列中包含公式时,将为每一行都计算值。一旦创建公式就将立即为列计算结果。只有在刷新基础数据或者手动重新计算时,才重新计算列值。

你可以创建基于度量值和其他计算列的计算列。但是, 请避免对计算列和度量值使用相同的名称, 因为这可能会导致令人困惑的结果。当引用某一列时, 最好使用完全限定的列引用, 以避免意外调用度量值。

有关更多详细信息,请参阅 中的计算列Power Pivot

衡量指标

度量值是专为在使用Power Pivot数据的数据透视表 (或数据透视图) 中使用而创建的公式。度量值可以基于标准聚合函数 (如 COUNT 或 SUM), 也可以通过使用 DAX 定义自己的公式。在数据透视表的 "" 区域中使用度量值。如果要将计算结果放在数据透视表的不同区域中, 请改用计算列。

定义显式度量值的公式时, 直到将度量值添加到数据透视表中时才会发生任何变化。当您添加度量值时, 将针对数据透视表的 "" 区域中的每个单元格计算公式。由于为行标题和列标题的每个组合创建了结果, 因此度量值在每个单元格中的结果可能不同。

你创建的度量值的定义将与其源数据表一起保存。它将显示在 "数据透视表字段" 列表中, 并供工作簿的所有用户使用。

有关更多详细信息, 请参阅Power Pivot 中的度量值

使用编辑栏创建公式

与 Excel 相似,Power Pivot 提供的编辑栏让创建和编辑公式更方便,以及记忆式键入功能,尽量减少键入和语法错误。

输入表名称   开始键入表名称。公式记忆式键入功能会提供一个下拉列表,其中包含以这些字母开头的有效名称。

输入列名称   键入括号,然后从当前表的列清单中选择列。对于其他表中的列,首先键入表名称的前几个字母,然后从记忆式键入下拉列表中选择该列。

有关如何构建公式的详细信息和演练,请参阅在 Power Pivot 中创建计算公式

使用记忆式键入的提示

可以在具有嵌套函数的现有公式中使用公式记忆式键入功能。与插入点紧邻的前一个文本用于显示下拉列表中的值,插入点之后的所有文本都保持不变。

为常量创建的定义的名称不显示在记忆式键入下拉列表中,但您仍可以键入它们。

Power Pivot 不会添加函数的右括号或自动匹配括号。您应确保每个函数在语法上都是正确的,否则就不能保存或使用公式。

在公式中使用多个函数

可以嵌套函数,这意味着您可以使用一个函数的结果作为另一个函数的参数。在计算列中,最多可以嵌套 64 层函数。但是,嵌套可能会导致很难创建公式或者排除公式问题。

许多 DAX 函数设计为仅用作嵌套函数。这些函数返回一个表,该表不能直接保存为结果, 而应作为表函数的输入提供。例如,函数 SUMX、AVERAGEX 和 MINX 全都要求将表作为第一个参数。

注意: 测度中存在函数嵌套的一些限制, 以确保性能不会受到列之间相关性所需的大量计算的影响。

比较 DAX 函数和 Excel 函数

DAX 函数库基于 Excel 函数库,但这两种库有许多差异。本节总结了 Excel 函数与 DAX 函数之间的差异和相似性。

  • 许多 DAX 函数名称和常规行为都与 Excel 函数相同,但这些函数已修改为采用不同类型的输入,因此在有些情况下可能会返回不同的数据类型。通常,如果不进行某些修改,无法在 Excel 公式中使用 DAX 函数或在 Power Pivot 中使用 Excel 公式。

  • DAX 函数不会将单元引用或范围作为引用,而是将列或表作为引用。

  • DAX 日期和时间函数返回 datetime 数据类型。与之相比,Excel 日期和时间函数返回将日期表示为序列数的整数。

  • 许多新的 DAX 函数返回值表,或基于值表作为输入进行计算。与之相比,Excel 没有返回表的函数,但某些函数可以使用数组。能够轻松地引用完整的表和列是 Power Pivot 中的新功能。

  • DAX 提供了新的查找函数,这些函数类似于 Excel 中的数组和矢量查找函数。但这些 DAX 函数需要在表之间建立关系。

  • 列中的数据应该始终具有相同的数据类型。如果数据类型不同,DAX 会更改整个列,以使其具有最适合所有值的数据类型。

DAX 数据类型

您可以将数据从可能支持不同数据类型的多种数据源导入 Power Pivot 数据模型中。在导入或加载数据,然后在计算或数据透视表中使用这些数据时,数据会转换为 Power Pivot 数据类型之一。有关数据类型的列表,请参阅数据模型中的数据类型

表数据类型是 DAX 中的一种新数据类型,用作许多新函数的输入或输出。例如,FILTER 函数采用表作为输入,并输出仅包含满足筛选条件的行的另一个表。通过组合表函数与聚合函数,可以对动态定义的数据集执行复杂计算。有关详细信息,请参阅 中的聚合Power Pivot

公式和关系模型

Power Pivot 窗口是一个区域,您可以在其中使用多个数据表,并通过“关系模型”将这些表连接起来。在此数据模型中,表通过关系相互连接,这样,您就可以创建与其他表中的列的关联,并创建更有用的计算。例如,可以创建对相关表的值进行求和的公式,然后将该值保存在一个单元格中。或者,您可以对表和列应用筛选器,以便控制相关表中的行。有关详细信息,请参阅数据模型中表之间的关系

由于可以使用关系来链接表,因此数据透视表还可以包含来自不同表中多个列的数据。

但是,由于公式可以处理整个表和列,因此您需要设计与在 Excel 中不同的计算。

  • 通常,列中的 DAX 公式始终应用于列中的整个值集(而不是仅应用于几个行或单元格)。

  • Power Pivot 中表的每一行必须始终具有相同的列数,并且一列中的所有行必须包含相同的数据类型。

  • 在通过关系连接多个表时,您应该确保用作键的两列对于大多数部分具有匹配的值。因为 Power Pivot 不强制引用完整性,所以,当键列中具有不匹配的值时,仍有可能创建关系。但是,空值或不匹配的值可能影响公式的结果和数据透视表的外观。有关详细信息,请参阅 Power Pivot 公式中的查找

  • 使用关系链接表时,可以扩大计算公式的范围(或“下文”)。例如,数据透视表中的公式可能受该数据透视表中任何筛选器或者列和行标题的影响。您可以编写处理上下文的公式,但上下文还可能以各种意外方式导致结果发生变化。有关详细信息,请参阅 DAX 公式中的上下文

更新公式的结果

数据刷新”和“重新计算”是两个各自独立而又有相关性的操作,在设计包含复杂公式、大量数据或从外部数据源获取的数据的数据模型时,应了解这两项操作。

“刷新数据”是用外部数据源的新数据更新工作簿中数据的过程。您可以按指定的时间间隔手动刷新数据。或者,如果您已将工作簿发布到 SharePoint 网站,则可以从外部源安排自动刷新。

重新计算是对公式结果进行更新的过程,用于反映对公式本身的任何更改以及基础数据中的那些更改。重新计算会以下列方式影响性能:

  • 对于计算列,每当您更改公式时,应始终针对整个列重新计算公式的结果。

  • 对于度量值, 在将度量值放置到数据透视表或数据透视图的上下文中之前, 不会计算公式的结果。当您更改影响数据上的筛选器或手动刷新数据透视表的任何行或列标题时, 也将重新计算公式。

公式疑难解答

编写公式时出错

如果定义公式时遇到错误,公式中可能包含语法错误语义错误计算错误

语法错误是最容易解决的。此类错误通常涉及缺少括号或逗号。有关各个函数的语法的帮助,请参阅“DAX 函数参考”。

当语法正确而值或列引用对公式上下文无意义时,就会发生其他类型的错误。以下任何问题都可能导致此类语义和计算错误:

  • 公式引用了非现有的列、表或函数。

  • 公式看起来是正确的,但当数据引擎提取数据时找到的类型却不匹配,从而引发错误。

  • 公式为函数传递的数字或参数类型不正确。

  • 公式引用了另一个出错的列,因此它的值无效。

  • 公式引用了尚未处理的列,这意味着虽然它具有元数据,但没有用于计算的实际数据。

在前四种情况下,DAX 会标记包含无效公式的整个列。在最后一种情况下,DAX 灰显该列来指示该列处于未处理状态。

对列值进行排名或排序时,结果不正确或异常

对包含值 NaN (非数字)的列进行排名或排序时,可能会获得不正确或意外的结果。例如,当计算 0 除以 0 时,返回结果 NaN。

这是因为公式引擎通过比较数值来执行排序或排名;但是 NaN 却无法与该列中的其他数字进行比较。

为了确保结果正确,您可以利用使用 IF 函数的条件语句来测试 NaN 值并返回数字 0 值。

与 Analysis Services 表格模型和 DirectQuery 模式的兼容性

通常,在 Power Pivot 中构建的 DAX 公式与 Analysis Services 表模型完全兼容。但是,如果将 Power Pivot 模型迁移到某个 Analysis Services 实例,然后在 DirectQuery 模式下部署该模型,则存在一些限制。

  • 如果在 DirectQuery 模式下部署该模型,则某些 DAX 公式可能会返回不同的结果。

  • 在将模型部署到 DirectQuery 模式时,某些公式可能会导致验证错误,因为该公式包含关系数据源不支持的 DAX 函数。

有关详细信息,请参阅 SQL Server 2012 联机丛书中的 Analysis Services 表格模型文档。

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

此信息是否有帮助?

谢谢您的反馈!

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

×