DAX 入门.docx_第1页
DAX 入门.docx_第2页
DAX 入门.docx_第3页
DAX 入门.docx_第4页
DAX 入门.docx_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

快速入门:在 30 分钟内了解 DAX 基础知识本快速入门面向对 Excel 中的 PowerPivot 或在 SQL Server Data Tools 创作的表格模型项目不熟悉的用户。其目的是针对如何可以使用数据分析表达式 (DAX) 解决许多基本的数据建模和分析问题,向您提供快速和简单的介绍。本主题包括概念性信息、您可以完成的一系列任务以及用于测试您所学内容的一些测验。在完成本主题后,您就应该很好地了解了 DAX 中最基本的基础概念。什么是 DAX?DAX 是公式或表达式中可用来计算并返回一个或多个值的函数、运算符和常量的集合。简而言之,DAX 可帮助您通过模型中已有的数据创建新信息。为何 DAX 如此重要?创建工作簿并向其中导入一些数据的过程很轻松。您甚至可以不使用任何 DAX 公式,即可创建显示重要信息的数据透视表或数据透视图。但是,如果您需要跨多个产品类别和针对不同日期范围分析关键的销售数据,那该怎么办?或者,如果您需要组合来自不同数据源的若干表中的重要库存数据,又该怎么办?DAX 公式提供了这一功能以及许多其他重要功能。了解如何创建有效的 DAX 公式将帮助您最大限度地利用您的数据。当您获得所需的信息后,可以开始解决影响您的利润的实际业务问题。这就是商业智能,DAX 将帮助您实现它。先决条件您可能已经熟悉了如何在 Microsoft Excel 中创建公式。此知识将有助于您了解 DAX,但即使您对 Excel 公式没有任何经验,此处介绍的概念也将帮助您开始创建 DAX 公式和立即解决实际的商业智能问题。我们专门侧重于了解计算中所用的 DAX 公式。您应该已经熟悉了计算列和计算字段(也称为度量值)的基本概念,PowerPivot 帮助中介绍了这两者。您还应熟悉 Excel 中的 PowerPivot 创作环境和工具。示例工作簿学习 DAX 的最佳方式是创建一些基本的公式,将其与某些实际数据结合使用并自行查看结果。这些示例和任务使用 Contoso Sample DAX Formulas.xlsx 工作簿。可以从 /fwlink/?LinkID=237472&clcid=0x804 下载此工作簿。在将此工作簿下载到您的计算机上之后,请将其打开,然后打开 PowerPivot 窗口。现在开始!我们将围绕三个非常重要的基础概念设置 DAX 的框架:“语法”、“函数”和“上下文”。当然,DAX 中还有其他重要概念,但了解这三个概念将为您增强 DAX 技能提供最佳基础。语法在创建您自己的公式之前,让我们先来了解 DAX 公式的语法。语法包括组成公式的不同元素,或者更简单地说,就是如何编写公式。例如,我们来看一个用于为 FactSales 表中名为 Margin 的计算列中的每一行创建新数据(值)的简单 DAX 公式(公式文本颜色仅用于阐述):此公式的语法包括以下元素:a. 等号运算符 (=) 指示公式的开头,当计算此公式时,它将返回结果或值。用于计算值的所有公式都将以等号开头。b. 引用列 SalesAmount 包含我们要从中减去某个值的值。公式中的列引用始终由方括号 括起来。与引用单元的 Excel 公式不同,DAX 公式始终引用列。c. 减 (-) 数学运算符。d. 引用列 TotalCost 包含我们要从 SalesAmount 列的值中减去的值。在尝试了解如何解读 DAX 公式时,将其中每个元素分解为您日常思考和说话所用的语言通常会很有用。例如,您可按如下方式解读此公式:在 FactSales 表中,对于 Margin 计算列中的每一行,通过从 SalesAmount 列的值中减去 (-) TotalCost 列中的值计算出 (=) 一个值。让我们看一下计算字段中使用的另一种类型的公式:此公式包括以下语法元素:a. 计算字段名称 Sum of Sales Amount。计算字段的公式可能包括计算字段名称,后跟冒号,之后是计算公式。b. 等号运算符 (=) 指示计算公式的开头。计算后,它将返回结果。c. SUM 函数累加 SalesAmount 列中的所有数字。稍后您将了解有关函数的详细信息。d. 括号 () 括起一个或多个参数。所有函数都要求至少一个参数。一个参数向函数传递一个值。e. 引用表 FactSales。f. FactSales 表中的引用列 SalesAmount。通过此参数,Sum 函数可了解对哪一列累加以生成 SUM。可按如下方式解读此公式:对于名为 Sum of Sales Amount 的计算字段,计算 (=) FactSales 表的 SalesAmount 列中的值总和 (SUM)。当此计算字段放入数据透视表字段列表中的“值”拖放区域时,它将计算并返回由数据透视表(如 Cell Phones in the USA)中的每个单元定义的值。请注意,此公式与前面我们用于 Margin 计算列的公式相比存在一些不同点。尤其是,我们引入了一个“函数”:SUM。函数是预先编写的公式,旨在更轻松地对数字、日期、时间、文本等执行复杂的计算和操控。稍后您将了解有关函数的详细信息。与前面的 Margin 计算列不同,您将看到 SalesAmount 列的前面是此列所属的表 FactSales。这也称为“完全限定”列名,因为它包含前面具有表名的列名。在同一个表中引用的列不要求在公式包含表名。这会使引用很多列的较长公式变得更短和更容易阅读。但是,最好始终在计算字段公式中包含表名,甚至在同一个表中。注释如果表名包含空格、保留关键字或不允许使用的字符,则必须将表名放在单引号中。如果名称包含 ANSI 字母数字字符范围之外的任何字符,还必须将表名称用引号引起来,而不管您的区域设置是否支持该字符集。您的公式务必具有正确的语法。在大多数情况下,如果语法不正确,则将返回错误。在其他情况下,语法可能正确,但返回的值可能不是您所期望的。PowerPivot(和 SQL Server Data Tools)包含 IntelliSense;此功能用于帮助您选择正确的元素来创建语法正确的公式。我们来创建一个简单的公式。此任务将帮助您进一步了解公式语法,以及编辑栏中的 IntelliSense 功能如何为您提供帮助。任务:为计算列创建简单公式1. 如果尚未在 PowerPivot 窗口中,则在 Excel 中的 PowerPivot 功能区上,单击“PowerPivot 窗口”。2. 在 PowerPivot 窗口中,单击 FactSales 表(选项卡)。3. 滚动到最右侧的列,然后在列标题中单击“添加列”。4. 单击沿模型设计器窗口顶部的编辑栏。您的光标现在将出现在编辑栏中。编辑栏是您可以为计算列或计算字段键入公式的位置。我们花点时间来看一下位于编辑栏左侧的三个按钮。当光标在编辑栏中处于活动状态时,这三个按钮将变为活动状态。最左侧的按钮 X 只是一个取消按钮。单击此按钮。您的光标不再出现在编辑栏中,取消按钮和对勾标记按钮不再出现。继续,然后再次单击编辑栏。取消按钮和对勾标记按钮现在将再次出现。这意味着您已准备好,可以开始输入公式了。对勾标记按钮是检查公式按钮。在您输入了公式后,才会执行此命令。我们稍后将回过头来讨论此按钮。单击 Fx 按钮。您将看到一个新的对话框:“插入函数”对话框。“插入函数”对话框是开始输入 DAX 公式的最简单方式。我们将在稍后创建计算字段时向公式添加函数,但现在,您不需要向您的计算列公式中添加函数。继续并关闭“插入函数”对话框。5. 在编辑栏中,键入等号 =,然后键入左方括号 。此时将显示一个小的窗口,其中包含 FactSales 表中的所有列。这就是 IntelliSense 发挥了作用。由于计算列始终是在您所在的活动表中创建的,因此列名称前面不需要表名称。继续并向下滚动,然后双击 SalesQuantity。也可以滚动到所需的列名,然后按下 Tab 键。光标现在位于 SalesQuantity 的右侧且处于活动状态。6. 键入一个空格,然后键入减号运算符 -(负号),接着键入另一个空格。7. 现在,请键入另一个左方括号 。此时,选择 ReturnQuantity 列,然后按 Enter。如果出现错误,请仔细检查您的语法。如果需要,则将其与前面介绍的 Margin 计算列中的公式进行比较。在按 Enter 以完成公式之后,沿 PowerPivot 窗口底部的状态栏中将显示字词“正在计算”。此过程非常快,即使您刚刚为超过三百万行计算了新值。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 参考”(/fwlink/?LinkId=239769&clcid=0x804)。现在尝试另一个公式。这次,我们将通过键入公式和使用 IntelliSense 来创建一个计算字段。如果您并不完全了解公式,请不必过于担心。此处的重要事项是了解如何同时使用多个元素以正确的语法创建公式。任务:创建计算字段公式1. 在 FactSales 表中,单击“计算区域”中的任意空单元。这是位于 PowerPivot 窗口中某个表正下方的空单元区域。2. 在编辑栏中,键入名称 Previous Quarter Sales:3. 键入一个等号 = 以开始计算公式。4. 键入前几个字母 CAL,然后双击要使用的函数。在此公式中,您要使用 CALCULATE 函数。5. 键入左括号 ( 以开始键入要传递到 CALCULATE 函数的参数。注意,在键入左括号之后,IntelliSense 将显示 CALCULATE 函数所需的参数。稍后您将了解参数。6. 键入 FactSales 表的前几个字母,然后在下拉列表中双击 FactSalesSales。7. 键入一个逗号 (,) 以指定第一个筛选器,接着键入 PRE,然后双击 PREVIOUSQUARTER 函数。在选择 PREVIOUSQUARTER 函数之后,将出现另一个左括号,表明需要另一参数;此时是用于 PREVIOUSQUARTER 函数的参数。8. 键入前几个字母 Dim,然后双击 DimDateDateKey。9. 通过键入两个右括号 ),结束传递给 PREVIOUSQUARTER 函数和 CALCULATE 函数的参数。公式现在应如下所示:Previous Quarter Sales:=CALCULATE(FactSalesSales, PREVIOUSQUARTER(DimDateDateKey)10. 单击编辑栏中的检查公式按钮以验证此公式。如果您收到错误,请验证语法的每个元素。搞定!您刚刚使用 DAX 创建了一个计算字段,这还真不太容易。此公式将执行的操作是:根据数据透视表或数据透视图中应用的筛选器,计算前一个季度的总销售额。您刚刚见识了 DAX 公式的几个重要环节。首先,该公式包含两个函数。请注意,PREVIOUSQUARTER 函数将作为一个传递到 CALCULATE 函数的参数嵌套在后者中。DAX 公式可以包含多达 64 个嵌套函数。一个公式不太可能包含如此多的嵌套函数。实际上,此类公式很难创建和调试,因此,它可能不会非常快。在此公式中,您还使用了筛选器。筛选器可缩小将计算的内容范围。在这种情况下,您选择了一个筛选器作为参数,这实际上是另一个函数。稍后您将了解有关筛选器的详细信息。最后,您使用了 CALCULATE 函数。这是 DAX 中功能最强大的函数之一。当您创作数据模型并创建更复杂的公式时,可能需要多次使用此函数。对于 CALCULATE 函数的讨论超出了本快速入门的范围,但随着您对 DAX 的知识的增长,应特别留意此函数。注释通常,要在 DAX 公式中使用时间智能函数,必须通过使用“标记为日期表”对话框指定一个唯一日期列。在 Contoso DAX Formula Samples.xlsx 工作簿中,选择 DimDate 表中的 DateKey 列作为唯一的数据列。额外知识您可能会问:“什么是我可以创建的最简单的 DAX 公式?”这个问题的答案是“您不必自行创建的公式”。这也就是您通过在计算字段中使用标准聚合函数所能完成的操作。几乎所有数据模型都需要对聚合数据进行筛选和计算。例如,前面介绍的 Sum of Sales Amount 计算字段中的 SUM 函数用于累加特定列中的所有数字。DAX 也包括对值进行聚合的一些其他函数。通过使用“自动求和”功能,可以自动创建使用标准聚合的公式。额外知识任务:使用“自动求和”功能创建计算字段公式1. 在表 FactSales 中,滚动到 ReturnQuantity 列,然后单击列标题以选择整列。2. 在功能区上的“主文件夹”选项卡中,在“计算”组中单击“自动求和”按钮。3. 单击“自动求和”旁边的向下箭头,然后单击“平均”(也请注意您可以使用的其他标准聚合函数)。将立即使用名称 Average of 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 包含多种“时间智能”函数。利用这些函数,您可以定义或选择日期范围,并基于它们执行动态计算。例如,您可以比较并行时段内的总和。有时难以知道您在公式可能需要使用哪些函数。PowerPivot 以及 SQL Server Data Tools 中的表格模型设计器包括“插入函数”功能,这是一个对话框,可帮助您按类别选择函数并提供每个函数的简短说明。现在,我们使用“插入函数”功能创建一个新公式,其中包含您将选择的函数:任务:使用“插入函数”向公式添加函数1. 在 FactSales 表中,滚动到最右侧的列,然后在列标题中单击“添加列”。2. 在编辑栏中键入等号 =。3. 单击“插入函数”按钮。 此时将打开“插入函数”对话框。4. 在“插入函数”对话框中,单击“选择类别”列表框。默认情况下,将选中“所有”,并且下方将列出“所有”类别的所有函数。其中有大量的函数,因此您需要筛选函数,以便能够更轻松地找到您要查找的函数类型。5. 对于此公式,您希望返回另一个表中已存在的某些数据。为此,您要使用“筛选器”类别中的一个函数。继续并单击“筛选器”类别,然后在“选择函数”中,向下滚动并双击 RELATED 函数。单击“确定”以关闭“插入函数”对话框。6. 使用 IntelliSense 帮助您查找和选择 DimChannelChannelName 列。7. 关闭公式,然后按 Enter。8. 在按 Enter 以完成公式之后,沿 PowerPivot 窗口底部的状态栏中将显示字词“正在计算”。现在,您将看到您刚刚使用 DimChannel 表中的渠道信息在 FactSales 表中创建了一个新列。9. 将此列重命名为 Channel。您的公式应如下所示:=RELATED(DimChannelChannelName)刚刚向您介绍了 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。行上下文不仅仅适用于计算列。只要公式具有应用筛选器以标识表中单一行的函数,则行上下文也适用。此函数将对它所筛选的表的每一行内在应用行上下文。这种类型的行上下文最经常应用于计算字段。筛选上下文筛选上下文理解起来比行上下文要更难一些。您可以非常轻松地将筛选上下文视为:在确定结果或值的计算中应用的一个或多个筛选器。筛选上下文不能替代行上下文;而是在应用行上下文之外应用。例如,要进一步缩小计算中要包含的值的范围,您可以应用一个筛选上下文,该上下文不仅指定行上下文,也指定该行上下文中的一个特定值(筛选器)。可以在数据透视表中轻松地查看筛选上下文。例如,当您将 TotalCost 添加到“值”区域,然后将 Year 和 Region 添加到行或列时,您就定义了一个筛选上下文,此上下文将基于给定的年份和区域选择数据子集。为什么筛选上下文对于 DAX 如此重要?原因在于:尽管可以通过在数据透视表中添加列标签、行标签以及切片器,以最轻松的方式应用筛选上下文;但也可以通过使用函数(如 ALL、RELATED、FILTER、CALCULATE)按关系和按其他计算字段和列定义筛选器,从而在 DAX 公式中应用筛选上下文。例如,让我们看看名为 StoreSales 的计算字段中的以下公式:很明显,此公式比您前面看到的一些其他公式更复杂。但是,为了更好地理解此公式,我们可以将其分解,这与对待其他公式的方式很相似。此公式包括以下语法元素:A. 计算字段名称 StoreSales,后跟冒号 :。B. 等号运算符 (=) 指示公式的开头。C. CALCULATE 函数在由指定筛选器修改的上下文中计算表达式(作为参数)。D. 括号 () 括起一个或多个参数。E. 同一个表中的计算字段 Sales 作为一个表达式。计算字段 Sales 具有公式:=SUM(FactSalesSalesAmount)。F. 逗号 (,) 分隔每个筛选器。G. 引用列和特定值 DimChannelChannelName =”Store”,作为一个筛选器。此公式将确保“仅仅”针对 DimChannelChannelName 列中具有值“Store”(作为筛选器)的行计算由 Sales 计算字段(作为筛选器)定义的销售值。正如您所想像的,可以在公式中定义筛选上下文意味着巨大且强大的功能。能够仅引用相关表中的特定值只是这样的示例之一。如果您未能立即完全了解上下文,请不要担心。当您创建自己的公式时,您将更好地了解上下文以及它在 DAX 中如此重要的原因。上下文快速测验1. 两种类型的上下文是什么?2. 什么是筛选上下文?3. 什么是行上下文?本主题的末尾提供了答案。总结既然您对 DAX 中最重要的概念有了基本了解,就可以开始自行为计算列和计算字段创建 DAX 公式了。DAX 学起来确实不太容易,但有许多资源可供您参考。在多次通读本主题并体验您自己的一些公式之后,您可以更多地了解可帮助您解决自己的业务问题的其他 DAX 概念和公式。PowerPivot 帮助、SQL Server 联机丛书、白皮书和来自 Microsoft 和前沿商业智能专家的博客中有许多 DAX 资源可供您参考。DAX 资源中心 Wiki (/wiki/contents/articles/dax-resource-center.aspx) 是供您入门的一个好位置。数据分析表达式 (DAX) 参考也是一个很棒的资源。请确保将其保存在您的收藏夹中。“商业智能表格模型中的 DAX”白皮书可供下载 (/fwlink/?LinkID=237472&clcid=0x804),它提供了有关此处介绍的概念的更详细说明以及许多其他高级概念和公式。此白皮书还使用您已有的同一个 Contoso DAX Sample Formulas.xlsx 工作簿。快速测验答案语法:1. 打开“插入函数”功能。2. 方括号 。3. =UnitPrice - UnitCost函数:1. 表和列。2. 可以。一个公式可以包含多达 64 个嵌套函数。3. 文本函数。上下文:1. 行上下文和筛选上下文。2. 在确定单个值的计算中使用的一个或多个筛选器。3. 当前行。此文章对您是否有帮助?PowerPivot 中的 Data Analysis Expressions (DAX)Data Analysis Expressions (DAX) 乍听起来有点唬人,但可别让这名字把您给骗了。DAX 基础知识其实很容易理解。首先说最重要的一点 DAX 不是编程语言。DAX 是一种公式语言。您可以使用 DAX 在 PowerPivot 表(计算列)和 Excel 数据透视表(计算字段)中定义自定义计算。DAX 包含一些在 Excel 公式中使用的函数,此外还包含其他用于处理关系数据和执行动态聚合的函数。了解 DAX 公式DAX 公式与 Excel 公式非常相似。要创建一个 DAX 公式,只需键入一个等号,后跟函数名或表达式以及所需的任何值或参数即可。与 Excel 类似,DAX 提供多种函数,可用于处理字符串、使用日期和时间执行计算或者创建条件值。但 DAX 公式在以下几个重要方面却有所不同: 如果您希望逐行自定义计算,DAX 提供了允许您使用当前行值或相关值执行计算(因上下文而异)的函数。 DAX 包含一类函数,此类函数返回表作为其结果,而不是返回单个值。这些函数可用于提供其他函数的输入。 DAX 中的时间智能函数允许使用日期范围的计算,并可比较并行时间段内的结果。有关不同类型的函数的详细信息,请参阅 DAX 函数的类型。使用 DAX 公式的位置可以在 PowerPivot 中的计算列或计算字段中创建公式。计算列计算列是添加到现有 PowerPivot 表中的列。可以在计算列中创建用于定义列值的 DAX 公式,而不是粘贴或导入值。如果您在某个数据透视表(或数据透视图)中包括 PowerPivot 表,则您可以像使用任何其他数据列一样使用计算列。计算列中的公式非常类似于在 Excel 中创建的公式。但与在 Excel 中不同,您不能为表中的不同行创建不同公式 DAX 公式会自动应用到整个列。当某列中包含公式时,将为每一行都计算值。一旦创建公式就将立即为列计算结果。只有在刷新基础数据或者手动重新计算时,才重新计算列值。可以创建基于计算字段和其他计算列的计算列。但请避免将同一名称既用于计算列又用于计算字段,因为这可能导致结果混乱。引用列时,最好使用完全限定的列引用,以避免无意中调用计算字段。有关更多详细信息,请参阅 PowerPivot 中的计算列。计算字段计算字段是为使用 PowerPivot 数据的数据透视表(或数据透视图)而专门创建的公式。计算字段可以基于标准聚合函数,如 COUNT 或 SUM;或者,您可以使用 DAX 定义自己的公式。计算字段用于数据透视表的“值”区域中。如果希望将计算的结果放置于数据透视表的不同区域中,则应改为使用计算列。为某个显式计算字段定义公式时,在将该计算字段添加到数据透视表中之前,不会发生任何操作。在添加计算字段时,对数据透视表的“值”区域中的每个单元计算该公式。因为会为每个行和列标题组合都创建一个结果,所以计算字段的结果在每个单元格中可能会不同。创建的计算字段的定义与其源数据表一起保存。它出现在数据透视表字段列表中,可供工作簿的所有用户使用。有关更多详细信息,请参阅 PowerPivot 中的计算字段。使用编辑栏创建公式与 Excel 相似,PowerPivot 提供了编辑栏和记忆式键入功能,前者让创建和编辑公式更方便,后者可以尽量减少键入和语法错误。输入表名称开始键入表名称。公式记忆式键入功能会提供一个下拉列表,其中包含以这些字母开头的有效名称。输入列名称键入括号,然后从当前表的列清单中选择列。对于其他表中的列,首先键入表名称的前几个字母,然后从记忆式键入下拉列表中选择该列。有关如何构建公式的详细信息和演练,请参阅在 PowerPivot 中创建计算公式。使用记忆式键入的提示可以在具有嵌套函数的现有公式中使用公式记忆式键入功能。与插入点紧邻的前一个文本用于显示下拉列表中的值,插入点之后的所有文本都保持不变。为常量创建的定义的名称不显示在记忆式键入下拉列表中,但您仍可以键入它们。PowerPivot 不添加函数的右括号或自动匹配括号。应确保每个函数在语法上都是正确的,否则就不能保存或使用公式。在公式中使用多个函数可以嵌套函数,这意味着您可以使用一个函数的结果作为另一个函数的参数。在计算列中,最多可以嵌套 64 层函数。但是,嵌套可能会导致很难创建公式或者排除公式问题。许多 DAX 函数设计为仅用作嵌套函数。这些函数返回一个表,该表不能直接保存为结果,而应作为表函数的输入提供。例如,函数 SUMX、AVERAGEX 和 MINX全都要求将表作为第一个参数。注释 在计算字段内嵌套函数时有一些限制,以确保不会由于列之间的依赖关系所要求的许多计算而影响性能。比较 DAX 函数和 Excel 函数DAX 函数库基于 Excel 函数库,但这两种库有许多差异。本节总结了 Excel 函数与 DAX 函数之间的差异和相似性。 许多 DAX 函数的名称和一般行为都与 Excel 函数相同,但这些函数已修改为采用不同类型的输入,因此在有些情况下可能会返回不同的数据类型。通常,如果不进行某些修改,是无法在 Excel 公式中使用 DAX 函数或在 PowerPivot 中使用 Excel 公式的。 DAX 函数不会将单元引用或范围作为引用,而是将列或表作为引用。 DAX 日期和时间函数返回 datetime 数据类型。与之相比,Excel 日期和时间函数返回将日期表示为序列数的整数。 许多新的 DAX 函数返回值表,或基于作为输入的值表进行计算。与之相比,Excel 没有返回表的函数,但某些函数可以使用数组。能够轻松地引用完整的表和列是 PowerPivot 中的新功能。 DAX 提供了新的查找函数,这些函数类似于 Excel 中的数组和矢量查找函数。但这些 DAX 函数需要在表之间建立关系。 列中的数据应该始终具有相同的数据类型。如果数据类型不同,DAX 会更改整个列,以使其具有最适合所有值的数据类型。DAX 数据类型您可以将数据从可能支持不同数据类型的许多不同数据源导入 PowerPivot 数据模型中。在导入或加载数据,然后在计算或数据透视表中使用这些数据时,数据会转换为PowerPivot 数据类型之一。有关数据类型的列表,请参阅数据模型中的数据类型。表数据类型是 DAX 中的一种新数据类型,用作许多新函数的输入或输出。例如,FILTER 函数采用表作为输入,并输出仅包含满足筛选条件的行的另一个表。通过组合表函数与聚合函数,您可以对动态定义的数据集执行复杂计算。有关详细信息,请参阅 PowerPivot 中的聚合。公式和关系模型PowerPivot窗口是一个区域,您可以在其中使用多个数据表,并通过“关系模型”将这些表连接起来。 在此数据模型中,表通过关系相互连接,这样,您就可以创建与其他表中的列的关联,并创建更有用的计算。例如,可以创建对相关表的值进行求和的公式,然后将该值保存在一个单元格中。或者,您可以对表和列应用筛选器,以便控制相关表中的行。有关详细信息,请参阅数据模型中表之间的关系。由于可以使用关系来链接表,因此数据透视表还可以包含来自不同表中多个列的数据。但是,由于公式可以处理整个表和列,因此您需要设计与在 Excel 中不同的计算。 通常,列中的 DAX 公式始终应用于列中的整个值集(而不是仅应用于几个行或单元格)。 PowerPivot中表的每一行必须始终具有相同的列数,并且一列中的所有行必须包含相同的数据类型。 在通过关系连接多个表时,您应该确保用作键的两列对于大多数部分具有匹配的值。因为 PowerPivot 不强制引用完整性,所以,当键列中具有不匹配的值时,仍有可能创建关系。但是,空值或不匹配的值可能影响公式的结果和数据透视表的外观。有关详细信息,请参阅 PowerPivot 公式中的查找。 使用关系链接表时,可以扩大计算公式的范围(或“上下文”)。例如,数据透视表中的公式可能受该数据透视表中任何筛选器或者列和行标题的影响。您可以编写处理上下文的公式,但上下文还可能以各种意外方式导致结果发生变化。有关详细信息,请参阅 DAX 公式中的上下文。更新公式的结果“数据刷新”和“重新计算”是两个各自独立而又有相关性的操作,在设计包含复杂公式、大量数据或从外部数据源获取的数据的数据模型时,应了解这两项操作。“刷新数据”是用外部数据源的新数据更新工作簿中数据的过程。您可以按指定的时间间隔手动刷新数据。或者,如果您已将工作簿发布到 SharePoint 网站,则可以从外部源安排自动刷新。重新计算是对公式结果进行更新的过程,用于反映对公式本身的任何更改以及基础数据中的那些更改。重新计算会以下列方式影响性能: 对于计算列,每当您更改公式时,应始终针对整个列重新计算公式的结果。 对于计算字段,在将计算字段放到数据透视表或数据透视图的上下文中之前,不对公式的结果进行计算。在更改可影响数据筛选器的任何行或列标题时,或在手动刷新数据透视表时,也会重新计算公式。公式疑难解答编写公式时出错如果定义公式时遇到错误,公式中可能包含语法错误、语义错误或计算错误。语法错误是最容易解决的。此类错误通常涉及缺少括号或逗号。有关各个函数的语法的帮助,请参阅“DAX 函数参考”。当语法正确而值或列引用对公式上下文无意义时,就会发生其他类型的错误。以下任何问题都可能导致此类语义和计算错误: 公式引用了非现有的列、表或函数。 公式看起来是正确的,但当数据引擎提取数据时找到的类型却不匹配,从而引发错误。 公式为函数传递的数字或参数类型不正确。 公式引用了另一个出错的列,因此它的值无效。 公式引用了尚未处理的列,这意味着虽然它具有元数据,但没有用于计算的实际数据。在前四种情况下,DAX 会标记包含无效公式的整个列。在最后一种情况下,DAX 灰显该列来指示该列处于未处理状态。对列值进行排名或排序时,结果不正确或异常对包含值 NaN (非数字)的列进行排名或排序时,可能会获得不正确或意外的结果。例如,当计算 0 除以 0 时,返回结果 NaN。这是因为公式引擎通过比较数值来执行排序或排名;但是 NaN 却无法与该列中的其他数字进行比较。为了确保结果正确,您可以利用使用 IF 函数的条件语句来测试 NaN 值并返回数字 0 值。与 Analysis Services 表格模型和 DirectQuery 模式的兼容性通常,在 PowerPivot 中构建的 DAX 公式与 Analysis Services 表模型完全兼容。但是,如果将 PowerPivot 模型迁移到某个 Analysis Services 实例,然后在 DirectQuery 模式下部署该模型,则存在一些限制。 如果在 DirectQuery 模式下部署该模型,则某些 DAX 公式可能会返回不同的结果。 在将模型部署到 DirectQuery 模式时,某些公式可能会导致验证错误,因为该公式包含关系数据源不支持的 DAX 函数。针对 PowerPivot 的 DAX 语法规范 (DAX)数据分析表达式 (DAX) 是一个由函数、运算符和常量组成的库,可在 PowerPivot for Excel 中组合这些库元素以生成公式和表达式。本节提供了有关 DAX 语言的语法和要求的详细信息。有关可以生成的各种公式的示例,以及有关如何使用表达式筛选表和更改上下文的信息,请参阅 PowerPivot 中的数据分析表达式 (DAX)。本文内容 语法要求 命名要求 DAX 中的函数 DAX 运算符和常量 DAX 中的数据类型 返回页首语法要求DAX 公式与您在 Excel 表中键入的公式非常相似,但是两者之间也有一些重要区别。 在 Microsoft Excel 中,可以引用单个的单元格或阵列;在 PowerPivot 中,只能引用完整的数据表或数据列。然而,如果只需要使用列的一部分,或者列中的唯一值,则可以使用能够筛选列或返回唯一值的 DAX 函数实现类似的目的。 DAX 公式与 Microsoft Excel 支持的数据类型并非完全相同。一般而言,DAX 提供的数据类型比 Excel 多,在导入数据时 DAX 会对某些数据执行隐式类型转换。有关详细信息,请参阅DAX 中的数据类型。DAX 公式始终以等号 (=) 开头。等号之后,可以提供计算结果为标量的任何表达式或可以转换为标量的表达式。其中包括: 标量常量或使用标量运算符(+、-、*、/、=、.、&、.)的表达式 对列或表的引用。DAX 语言始终将表和列用作函数的输入,而绝不会使用值数组或任意的值集。 作为表达式的一部分提供的运算符、常量和值。 函数的结果及其所需的参数。一些 DAX 函数返回的是表而不是标量,并且必须包装在对表执行计算并返回标量的函数内;除非该表是单列、单行的表,否则,该表将被视作标量值。大多数 PowerPivot 函数需要一个或多个参数,这些参数可以包含表、列、表达式和值。然而,一些函数(如 PI)不需要任何参数,但始终需要使用括号来表示 Null 参数。例如,您始终必须键入 PI(),而不是 PI。还可以在其他函数中嵌套函数。 表达式。表达式可以包含以下任意项或所有项:运算符、常量或对列的引用。例如,下面都是有效公式。 公式结果=33=SalesSales=SalesAmount如果在 Sales 表中使用此公式,您将获取 Sales 表中当前行的 Amount 列的值。=(0.03 *Amount)=0.03 * Amount当前表的 Amount 列中值的 3%。虽然此公式可用来计算百分比,但是,除非您在该表中设置格式,否则结果并不会以百分比形式显示。=PI()常量 PI 的值。注释根据公式的使用位置是在计算列中还是数据透视表的计算字段中,公式的行为可能有所不同。必须始终注意上下文以及在公式中使用的数据如何与计算中可能使用的其他数据相关。有关详细信息,请参阅 DAX 公式中的上下文。命名要求PowerPivot 窗口可包含多个表,每个表都在自己的选项卡上。这些表和表中的列一起构成一个存储在 PowerPivot VertiPaq 引擎中的数据库。该数据库中所有表的名称都必须唯一。列的名称在每个表中必须唯一。所有对象名称都不区分大小写;例如,SALES 和 Sales 这两个名称表示同一表。您添加到现有 PowerPivot 数据库中的每个列和计算字段都必须属于特定的表。在表中创建计算列时,您是在隐式指定包含该列的表;在创建计算字段并指定用于存储该计算字段定义的表的名称时,您是在显式指定包含该计算字段的表。将表或列用作函数的输入时,通常必须“限定”列名称。列的“完全限定”名称是表名,后跟放在方括号中的列名:例如 U.S.SalesProducts。在您引用以下上下文中的列时,始终要求完全限定名称: 作为函数 VALUES 的参数 作为函数 ALL 或 ALLEXCEPT 的参数 在函数 CALCULATE 或 CALCULATETABLE 的筛选器参数中 作为函数 RELATEDTABLE 的参数 作为任何时间智能函数的参数“非限定”列名就是放在方括号中的列名称:例如 Sales Amount。例如,从当前表的同一行引用标量值时,可以使用非限定列名。如果表名包含空格、保留关键字或不允许使用的字符,则必须将表名放在单引号中。如果名称包含 ANSI 字母数字字符范围之外的任何字符,还必须将表名称用引号引起来,而不管您的区域设置是否支持该字符集。例如,如果您打开一个工作簿,工作簿中包含用西里尔语字符编写的表名(如“”),则该表名必须用引号引起来,即使它不包含空格。注释为了便于输入列的完全限定名称,建议您使用客户端中的公式记忆式键入功能。表 只要列来自与当前表不同的表,表名就是必需的。表名在数据库中必须唯一。 如果表名包含空格、其他特殊字符或者任何非英语字母数字字符,则必须将其括在单引号内。计算字段 计算字段名称必须始终放在方括号中。 计算字段名称可以包含空格。 每个计算字段名称在数据库中都必须唯一。因此,在引用现有计算字段时,计算字段名称前面的表名是可选的。但是,在创建计算字段时,始终必须指定将存储计算字段定义的表。列列名在表的上下文中必须唯一;但是,多个表可以具体同名的列(只要表名明确)。一般而言,可以不引用列属于的基础表就引用列,只有在可能存在要解析的名称冲突时或者具有某些要求列名完全限定的函数时除外。保留关键字如果对表使用的名称与 Analysis Services 保留关键字相同,则会产生错误,且您必须重命名该表。但是,如果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论