DAX是一种用于在Power PivotTables中创建自定义计算的公式语言.您可以使用设计用于处理关系数据的DAX函数,并在DAX公式中执行动态聚合.
DAX公式与Excel公式非常相似.要创建DAX公式,请键入等号,后跟函数名称或表达式以及任何所需的值或参数.
DAX公式可以包含DAX函数并利用它们的用法.这是DAX公式在重要方面与DAX函数不同的地方.
DAX函数始终引用完整列或一张桌子.如果您只想使用表格或列中的特定值,则可以向公式添加过滤器.
如果要自定义行的计算行基础,Power Pivot提供的功能允许您使用当前行值或相关值来执行因上下文而异的计算.
DAX包含一种类型返回表作为结果的函数,而不是单个值.这些函数可用于为其他函数提供输入,从而计算整个表或列的值.
某些DAX函数提供时间智能,可让您创建使用有意义的日期范围进行计算,并比较并行期间的结果.
每个DAX公式都具有以下语法 :
每个公式必须以等号开头.
在等号的右侧,您可以键入或选择函数名称,也可以键入表达式.表达式可以包含由DAX运算符连接的表名和列名.
以下是一些有效的DAX公式 :
[column_Cost] + [column_Tax]
= Today ()
DAX提供智能感知功能,使您能够及时正确地编写DAX公式.使用此功能,您无需完全键入表,列和函数名称,但在编写DAX公式时从下拉列表中选择相关名称.
开始输入函数名的前几个字母. AutoComplete显示名称以这些字母开头的可用函数列表.
将指针放在任何函数名称上.将显示IntelliSense工具提示,使您可以使用该功能.
单击功能名称.函数名称出现在公式栏中,并显示语法,在您选择参数时将引导您.
键入表名的第一个字母你要的那个. AutoComplete显示名称以该字母开头的可用表和列的列表.
按TAB或单击名称从"自动完成"列表中添加项目公式.
单击 Fx 按钮显示可用功能列表.要从下拉列表中选择一个函数,请使用箭头键突出显示该项,然后单击"确定"将该函数添加到公式中.
将参数提供给该函数通过从可能的表和列的下拉列表中选择它们或通过键入所需的值.
使用这个方便的IntelliSense功能强烈推荐.
您可以在创建计算列和计算字段时使用DAX公式.
您可以在计算列中使用DAX公式,方法是添加列,然后在公式栏中键入表达式.您可以在PowerPivot窗口中创建这些公式.
您可以在计算字段中使用DAX公式.您可以创建这些公式 :
在"计算字段"对话框的"Excel"窗口中,或
在表的计算区域的Power Pivot窗口中.
相同的公式可能会有不同的行为,具体取决于公式是用于计算列还是计算字段.
在计算列中,公式始终应用于整个表格中列中的每一行.根据行上下文,值可能会更改.
但是,在计算字段中,结果的计算在很大程度上取决于上下文.也就是说,数据透视表的设计以及行和列标题的选择会影响计算中使用的值.
它是重要的是理解DAX中的上下文概念来编写DAX公式.在您的DAX之旅开始时这可能有点困难,但是一旦掌握了它,您就可以编写复杂和动态数据分析所需的有效DAX公式.有关详细信息,请参阅章节 - DAX上下文.
您已经在上一节中了解了IntelliSense功能.请记住在创建任何DAX公式时使用它.
要创建DAX公式,请使用以下步骤 :
键入等号.
在等号右侧,键入以下 :
键入函数或表名的第一个字母,然后从下拉列表中选择完整名称.
如果选择了函数名称,请键入括号'('.
如果选择了表名,请键入括号'['.键入列名的第一个字母,然后从下拉列表中选择完整的名称.
使用']'关闭列名称带有')'的函数名.
在表达式之间键入DAX运算符或输入','以分隔函数参数.
重复步骤1 - 5直到DAX公式完成.
例如,你想t查找东部地区的总销售额.您可以编写DAX公式,如下所示. East_Sales是表的名称.金额是表格中的一列.
SUM([East_Sales [Amount])
正如在DAX语法一章中已经讨论的那样,建议在每个对任何列名的引用中使用表名和列名.这被称为 - "完全限定名称".
DAX公式可以根据是计算字段还是计算列而变化.有关详细信息,请参阅以下部分.
您可以为计算列创建DAX公式Power Pivot窗口.
单击要在其中添加计算列的表格的选项卡.
单击功能区上的"设计"选项卡.
单击"添加".
在公式栏中键入计算列的DAX公式.
= DIVIDE(East_Sales [Amount],East_Sales [Units])
这个DAX公式为表East_Sales : 中的每一行执行以下操作;
将行的"金额"列中的值除以同一行中"单位"列中的值.
将结果放在新添加的列中行.
迭代重复步骤1和2,直到完成表格中的所有行.
您已使用上述公式为单位价格添加了一个单位价格列.
如您所见,计算列也需要计算和存储空间.因此,仅在必要时使用计算列.尽可能使用计算字段.
有关详细信息,请参阅"计算列"一章.
您可以在Excel窗口或Power Pivot窗口中为计算字段创建DAX公式.对于计算字段,您需要事先提供名称.
为计算字段创建DAX公式在Excel窗口中,使用"计算字段"对话框.
要在"Power Pivot"窗口中为计算字段创建DAX公式,请单击相关表中的计算区域.使用CalculatedFieldName启动DAX公式:=.
例如,总东部销售额:= SUM([East_Sales [Amount])
如果在Excel窗口中使用"计算字段"对话框,则可以在保存之前检查公式,并将其作为强制习惯,以确保使用正确的公式.
有关这些选项的更多详细信息,请参阅"计算字段"一章.
Power Pivot窗口也有一个公式栏,就像Excel窗口公式栏.使用自动完成功能,公式栏可以更轻松地创建和编辑公式,从而最大限度地减少语法错误.
输入表的名称,开始键入表的名称. Formula AutoComplete提供一个下拉列表,其中包含以这些字母开头的有效表名.如果需要,您可以从一个字母开始并输入更多字母以缩小列表范围.
要输入列的名称,您可以从列中选择它.所选表中的列名列表.在表名右侧键入一个括号'[',然后从所选表格中的列列表中选择列.
以下是使用自动完成和减号的一些提示;
您可以在DAX公式中嵌套函数和公式.在这种情况下,您可以在具有嵌套函数的现有公式的中间使用公式自动完成.插入点之前的文本用于显示下拉列表中的值,插入点后的所有文本保持不变.
您定义的名称对于常量的create不会显示在AutoComplete下拉列表中,但您仍然可以键入它们.
不会自动添加函数的右括号.你需要自己做.
你必须确保每个函数在语法上都是正确的.
您可以找到标记为 fx 的"插入函数"按钮,在Power Pivot窗口和Excel窗口中.
Power Pivot窗口中的Insert Function按钮位于左侧公式栏.
Excel窗口中的"插入函数"按钮位于公式右侧的"计算字段"对话框中.
单击 fx 按钮时,将出现"插入函数"对话框. "插入函数"对话框是查找与DAX公式相关的DAX函数的最简单方法.
"插入函数"对话框可帮助您按类别选择函数,并为每个函数提供简短描述函数.
假设您要创建以下计算字段 :
奖牌数:= COUNTA (]Medal])
您可以使用以下步骤使用"插入函数"对话框 :
单击结果表的计算区域.
在公式栏中键入以下内容 :
奖牌数:=
请点击插入功能按钮( fx ).
出现"插入函数"对话框.
在"选择类别"框中选择"统计"作为如下屏幕截图所示.
在选择功能框中选择COUNTA,如以下屏幕截图所示.
如您所见,所选的DAX显示函数语法和函数说明.这使您可以确保它是您要插入的函数.
单击"确定".奖牌数:= COUNTA(显示在公式栏中,并且还会显示显示函数语法的工具提示.
键入[.这意味着您将要键入a列名.当前表中所有列的名称和计算字段将显示在下拉列表中.您可以使用IntelliSense来完成公式.
类型M.下拉列表中显示的名称将仅限于以"M"开头的名称.
点击奖牌.
双击奖牌.奖牌数:= COUNTA([奖牌]将显示在公式栏中.关闭括号.
按Enter键.完成.您也可以使用相同的步骤创建计算列.您也可以按照相同的步骤使用Insert Func在Excel窗口的Calculated Field对话框中插入一个函数特征.
单击公式右侧的插入函数( fx )按钮./p>
出现"插入函数"对话框.其余步骤与上述步骤相同.
DAX公式最多可包含64个嵌套函数.但是,DAX公式不太可能包含这么多嵌套函数.
如果DAX公式有许多嵌套函数,它有以下缺点和减号;
该公式很难创建.
如果公式有错误,则调试非常困难.
公式评估不会很快.
在这种情况下,您可以将公式拆分为更小的可管理性公式并逐步构建大型公式.
执行数据分析时,您将对聚合数据执行计算.您可以在DAX公式中使用几种DAX聚合函数,例如SUM,COUNT,MIN,MAX,DISTINCTCOUNT等.
您可以使用标准聚合自动创建公式Power Pivot窗口中的AutoSum功能.
单击Power Pivot窗口中的Results选项卡.将显示结果表.
单击"奖章"列.整个列 - 奖章将被选中.
单击功能区上的"主页"选项卡.
单击"计算"组中"自动求和"旁边的向下箭头.
点击下拉列表中的COUNT.
如您所见,计算字段的奖牌数量出现在列下方的计算区域 - 奖章中. DAX公式也出现在公式栏中 :
奖章数:= COUNTA([Medal])
AutoSum功能为您完成了工作 - 为数据聚合创建了计算字段.此外,AutoSum采用了DAX函数COUNT的相应变体,即COUNTA(DAX具有COUNT,COUNTA,COUNTAX函数).
注意事项 - 要使用AutoSum功能,您需要单击功能区上AutoSum旁边的向下箭头.如果你点击AutoSum本身,你将得到 : 去;
奖牌总和:= SUM([Medal])
并且错误被标记为Medal不是数字数据列,并且列中的文本无法转换为数字.
有关DAX错误的详细信息,请参阅 DAX错误参考一章.
如您所知,在Power Pivot的数据模型中,您可以使用多个数据表并通过定义关系来连接表.这将使您能够创建有趣的DAX公式,使用相关表中的列的相关性进行计算.
当您在两个表之间创建关系时,您应该确保用作键的两列具有匹配的值,至少对于大多数行而言,如果不是完全匹配的话.在Power Pivot数据模型中,可能在键列中具有不匹配的值并仍然创建关系,因为Power Pivot不强制引用完整性(有关详细信息,请参阅下一节).但是,键列中存在空白或不匹配的值可能会影响DAX公式的结果和数据透视表的外观.
建立参照完整性涉及构建一组规则,以便在您输入或删除数据时保留表之间定义的关系.如果您没有专门确保这一点,因为Power Pivot不强制执行此操作,您可能无法在更改数据之前使用DAX公式获得正确的结果.
如果您强制执行参照完整性,你可以防止以下陷阱 :
当主表中没有关联的行时,将行添加到相关表中(即在键列中具有匹配值).
更改主表中的数据,这将导致相关表中的孤立行(即具有a的行)键列中的数据值在主表键列中没有匹配值.)
当存在匹配数据时从主表中删除行相关表格行中的值.