Microsoft Power Platform 基础到实战(3)-Power BI (1)-数据分析表达式 DAX(1)

这篇具有很好参考价值的文章主要介绍了Microsoft Power Platform 基础到实战(3)-Power BI (1)-数据分析表达式 DAX(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

Power BI 是一个统一、可扩展的自助服务和企业商业智能 (BI) 平台。您可以利用它连接到任何数据并实现数据可视化,并将视觉对象无缝融入您的日常应用中。
Microsoft Power Platform 基础到实战(3)-Power BI (1)-数据分析表达式 DAX(1)Microsoft Power Platform 基础到实战(3)-Power BI (1)-数据分析表达式 DAX(1)

数据分析表达式 (DAX) 是在 Analysis Services、Power BI 以及 Excel 中的 Power Pivot 使用的公式表达式语言。 DAX 公式包括函数、运算符和值,用于对表格数据模型中相关表和列中的数据执行高级计算和查询。

计算

DAX 公式在度量值、计算列、计算表和行级别安全性中使用。

度量值

度量值是动态计算公式,其结果会根据上下文更改。 度量值在支持使用多个属性(如 Power BI 报表或 Excel 数据透视表或数据透视图)组合和筛选模型数据的报表中使用。 度量值是通过使用模型设计器中的 DAX 公式栏来创建的。

度量值中的公式可以使用通过自动求和功能自动创建的标准聚合函数(如 COUNT 或 SUM),你也可以通过使用 DAX 公式栏来定义自己的公式。 命名度量值可作为参数传递给其他度量值。

在公式栏中为某一度量值定义公式时,工具提示功能会显示当前上下文中的总结果预览,但除此之外,在任何位置都不会立即输出结果。 您不能立即看到计算的(筛选)结果的原因是,在没有上下文的情况下无法确定度量值的结果。 若要计算度量值,需要一个可以提供上下文的报表客户端应用程序,在检索与每个单元相关的数据然后针对每个单元计算表达式时需要该应用程序提供的上下文。 该客户端可能是 Excel 数据透视表或数据透视图、Power BI 报表或 SQL Server Management Studio (SSMS) 中 DAX 查询中的表表达式。

度量值用于一些最常见的数据分析。 简单汇总(如总和、平均值、最小值、最大值和计数)可以通过“字段”框进行设置。
度量值的计算结果也始终随着你与的报表的交互而改变,以便进行快速和动态的临时数据浏览。

计算

DAX 公式在度量值、计算列、计算表和行级别安全性中使用。
度量值

度量值是动态计算公式,其结果会根据上下文更改。
度量值在支持使用多个属性(如 Power BI 报表或 Excel 数据透视表或数据透视图)组合和筛选模型数据的报表中使用。 度量值是通过使用模型设计器中的 DAX 公式栏来创建的。

度量值中的公式可以使用通过自动求和功能自动创建的标准聚合函数(如 COUNT 或 SUM),你也可以通过使用 DAX 公式栏来定义自己的公式。 命名度量值可作为参数传递给其他度量值。

在公式栏中为某一度量值定义公式时,工具提示功能会显示当前上下文中的总结果预览,但除此之外,在任何位置都不会立即输出结果。 您不能立即看到计算的(筛选)结果的原因是,在没有上下文的情况下无法确定度量值的结果。 若要计算度量值,需要一个可以提供上下文的报表客户端应用程序,在检索与每个单元相关的数据然后针对每个单元计算表达式时需要该应用程序提供的上下文。 该客户端可能是 Excel 数据透视表或数据透视图、Power BI 报表或 SQL Server Management Studio (SSMS) 中 DAX 查询中的表表达式。

无论客户端是什么,都会对结果中的每个单元格运行单独的查询。 也就是说,数据透视表中行标题和列标题的每种组合,或 Power BI 报表中切片器和筛选器的每种选择,都会生成不同的数据子集,并根据该子集计算度量值。
例如,使用这个非常简单的度量值公式:

Total Sales = SUM([Sales Amount])

当用户将 TotalSales 度量值放入报表中,然后将“产品”表中的“产品类别”列放入筛选器中时,将计算并显示每个产品类别的“销售额”总和。

与计算列不同,度量值的语法包括公式前面的度量值名称。 在刚才提供的示例中,名称 Total Sales 出现在公式之前。 创建度量值后,名称及其定义将显示在报表客户端应用程序字段列表中,并且根据透视和角色,可供模型的所有用户使用。

计算列

计算列是这样的列:在模型设计器中添加到现有表,然后用于创建定义列值的 DAX 公式。
当计算列包含有效的 DAX 公式时,输入公式后就会立即为每行计算值。 然后,将值存储在内存中数据模型中。
例如,在“日期”表中,在公式栏中输入公式后:

= [Calendar Year] & " Q" & [Calendar Quarter]

表中每行的值是通过从(同一个“日期”表中的)“日历年”列获取值来计算的,添加一个空格和大写字母 Q,然后添加(同一个“日期”表中的)“日历季度”列的值。 然后就会立即计算并显示计算列中每行的结果,例如 2017 Q1 。 仅当处理(刷新)表或任何相关表,或从内存中卸载模型然后重新加载时(如关闭和重新打开 Power BI Desktop 文件时),才会重新计算列值。

计算表

计算表是一个基于公式表达式的计算对象,派生自同一个模型中的所有或部分其他表。
DAX 公式定义表值,而非从数据源中查询值并将值加载到新表的列中。

计算表在角色扮演维度中非常有用。
例如“日期”表,如 OrderDate、ShipDate 或 DueDate,具体取决于外键关系。 通过为 ShipDate 显式创建计算表,将获得可用于查询的独立表,该表与任何其他表一样完全可操作。 在配置筛选的行集或其他现有表中列的子集或超集时,计算表也很有用。 这样可以在创建表的变体以支持特定方案时保持原始表不变。

计算表支持与其他表之间的关系。 计算表中的列具有数据类型、格式设置,并能归属于数据类别。 可以像对任何其他表一样,对计算表进行命名、显示或隐藏。 如果计算表从其中提取数据的任何表刷新或更新,则将重新计算计算表。

行级安全性

使用行级别安全性时,DAX 公式的计算结果必须为 TRUE/FALSE 布尔值条件,以定义特定角色成员的查询结果可以返回哪些行。 例如,对于“销售”角色的成员,具有以下 DAX 公式的“客户”表:

= Customers[Country] = "USA"

“销售”角色的成员将只能查看美国客户的数据,而聚合(如 SUM)只返回美国客户的数据。 行级别安全性在 Excel 中的 Power Pivot 中不可用。

使用 DAX 公式定义行级别安全性时,将创建一个允许的行集。 这不会拒绝对其他行的访问;相反,它们只是不作为允许的行集的一部分返回。 其他角色可允许访问 DAX 公式所排除的行。 如果用户是其他角色的成员,且该角色的行级别安全性允许访问该特定行集,则该用户可以查看该行的数据。

行级别安全性应用于指定的行以及相关行。 如果表具有多个关系,则筛选器将对处于活动状态的关系应用安全性。 行级别安全性公式将与为相关表定义的其他公式相交。

查询

可以在 SQL Server Management Studio (SSMS) 和 DAX Studio (daxstudio.org) 等开放源代码工具中创建和运行 DAX 查询。 不同于 DAX 计算公式只能在表格数据模型中创建,DAX 查询也可以针对 Analysis Services 多维模型运行。 与多维数据表达式 (MDX) 查询相比,DAX 查询通常更易于编写,而且效率更高。

DAX 查询是一个语句,类似于 T-SQL 中的 SELECT 语句。 DAX 查询的最基本类型是计算语句 。 例如,

EVALUATE
 ( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC

在结果中返回一个表,该表仅列出 SafetyStockLevel 小于 200 的产品,按 EnglishProductName 升序排序。

可以创建度量值作为查询的一部分。 度量值仅在查询期间存在。

公式

DAX 公式对于在计算列和度量值中创建计算以及使用行级别安全性保护数据方面非常重要。 要为计算列和度量值创建公式,请使用模型设计器窗口顶部的公式栏或 DAX 编辑器。 要为行级别安全性创建公式,请使用“角色管理器”或“管理角色”对话框。
公式基础知识

DAX 公式可以很简单,也可以非常复杂。
下面显示了一些可以在计算列中使用的简单公式示例。
Formula 定义

= TODAY() 	在计算列的每一行中插入今天的日期。
= 3 	在计算列的每一行中插入值 3= [Column1] + [Column2][Column1][Column2] 的同一行中的值相加,并将结果放置在同一行的计算列中。

无论所创建的公式是简单的还是复杂的,都可以按照以下步骤生成公式:

每个公式必须以等号 (=) 开头。

可以键入或选择一个函数名称,也可以键入一个表达式。

开始键入所需函数或名称的前几个字母,自动完成功能将显示可用函数、表和列的列表。 按 Tab 键将自动完成列表中的项添加到公式中。

还可以单击 Fx 按钮显示可用函数的列表 。 要从下拉列表中选择一个函数,请使用箭头键突出显示该项,然后单击“确定”将该函数添加到公式中 。

通过从可能的表和列下拉列表中选择参数,或者通过键入值,为函数提供参数。

检查语法错误:确保所有括号都成对,并且正确引用了列、表和值。

按 Enter 键接受该公式。

在计算列中,只要输入公式并验证公式,列就会填充值。 在度量值中,按 Enter 键会将度量值定义与表一起保存。 如果公式无效,将显示错误。

在公式中使用多个函数

您可以嵌套函数,这意味着您可以使用一个函数的结果作为另一个函数的参数。 在计算列中,最多可以嵌套 64 个级别的函数。 但是,嵌套可能会导致很难创建公式或者排除公式问题。 许多函数设计为仅用作嵌套函数。 这些函数返回一个表,该表不能直接保存为结果,而必须作为表函数的输入提供。 例如,函数 SUMX、AVERAGEX 和 MINX 全都要求将表作为第一个参数。

函数概述

函数是表达式中的命名公式。 大多数函数都包含必需和可选的实参(亦称为“形参”)作为输入。 函数在执行后返回值。 DAX 包括一些函数,可用于使用日期和时间执行计算、创建条件值、处理字符串、基于关系执行查找以及循环访问表以执行递归计算。 如果您熟悉 Excel 公式,会发现 Excel 公式与 DAX 公式中的多数函数都极为相似。

DAX 公式在以下方面显著不同:

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

如果需要逐行自定义计算,DAX 可提供允许您使用当前行值或相关值作为一种参数来执行计算(因上下文而异)的函数。 要了解这些函数的工作原理,请参阅本文中的上下文。

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

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

聚合函数

聚合函数计算由表达式定义的列或表中所有行的(标量)值,例如计数、求和、平均值、最小值或最大值。
属于此类别的函数
函数 说明
APPROXIMATEDISTINCTCOUNT 在列中返回唯一值的估计计数。
AVERAGE 返回列中所有数字的平均值(算术平均值)。
AVERAGEA 返回列中值的平均值(算术平均值)。
AVERAGEX 计算针对表进行计算的一组表达式的平均值(算术平均值)。
COUNT 计算指定列中包含非空值的行数。
COUNTA 计算指定列中包含非空值的行数。
COUNTAX 在对表计算表达式的结果时统计非空白结果数。
COUNTBLANK 对列中的空白单元格数目进行计数。
COUNTROWS 统计指定表中或由表达式定义的表中的行数。
COUNTX 在针对表计算表达式的结果时,对包含数字或计算结果为数字的表达式的行数目进行计数。
DISTINCTCOUNT 对列中的非重复值数目进行计数。
DISTINCTCOUNTNOBLANK 对列中的非重复值数目进行计数。
MAX 返回列中或两个标量表达式之间的最大数字值。
MAXA 返回列中的最大值。
MAXX 针对表的每一行计算表达式,并返回最大数字值。
MIN 返回列中或两个标量表达式之间的最小数字值。
MINA 返回列中的最小值,包括任何逻辑值和以文本表示的数字。
MINX 返回针对表中的每一行计算表达式而得出的最小数值。
PRODUCT 返回列中的数的乘积。
PRODUCTX 返回为表中的每一行计算的表达式的积。
SUM 对某个列中的所有数值求和。
SUMX 返回为表中的每一行计算的表达式的和。

日期和时间函数

这些函数有助于创建基于日期和时间的计算。 DAX 中很多函数都与 Excel 日期和时间函数类似。 不过 DAX 函数使用日期/时间数据类型,可以将列中的值用作参数 。
属于此类别的函数
函数 说明
CALENDAR 返回一个表,其中有一个包含一组连续日期的名为“Date”的列。
CALENDARAUTO 返回一个表,其中有一个包含一组连续日期的名为“Date”的列。
DATE 以日期/时间格式返回指定的日期。
DATEDIFF 返回两个日期之间的间隔边界的计数。
DATEVALUE 将文本格式的日期转换为日期/时间格式的日期。
DAY 返回一月中的日期,1 到 31 之间的数字。
EDATE 返回在开始日期之前或之后指定月份数的日期。
EOMONTH 以日期/时间格式返回指定月份数之前或之后的月份的最后一天的日期。
HOUR 以数字形式返回小时值,0 (12:00 A.M.) 到 23 (11:00 P.M.) 之间的数字。
MINUTE 给定日期和时间值,以数字形式返回分钟值,0 到 59 之间的数字。
MONTH 以数字形式返回月份值,1(一月)到 12(十二月)之间的数字。
NETWORKDAYS 返回两个日期之间的整个工作日数。
NOW 以日期/时间格式返回当前日期和时间。
QUARTER 将季度返回为从 1 到 4 的数值。
SECOND 以数字形式返回时间值的秒数,0 到 59 之间的数字。
TIME 将以数值形式给定的小时、分钟和秒值转换为日期/时间格式的时间。
TIMEVALUE 将文本格式的时间转换为日期/时间格式的时间。
TODAY 返回当前日期。
UTCNOW 返回当前的 UTC 日期和时间
UTCTODAY 返回当前的 UTC 日期。
WEEKDAY 返回指示日期属于星期几的数字,1 到 7 之间的数字。
WEEKNUM 根据 return_type 值返回给定日期和年份的周数。
YEAR 返回日期的年份,1900 到 9999 之间的四位整数。
YEARFRAC 计算由两个日期之间的整日数表示的年份分数。

筛选器函数

DAX 中的筛选器和值函数是最复杂且功能强大的函数,并且与 Excel 函数有很大的不同。 查找函数通过使用表和关系进行工作,与数据库类似。 筛选函数可用于操作数据上下文来创建动态计算。
属于此类别的函数
函数 说明
ALL 返回表中的所有行或列中的所有值,同时忽略可能已应用的任何筛选器。
ALLCROSSFILTERED 清除应用于表的所有筛选器。
ALLEXCEPT 删除表中所有上下文筛选器,已应用于指定列的筛选器除外。
ALLNOBLANKROW 从关系的父表中,返回除空白行之外的所有行或列的所有非重复值,并且忽略可能存在的所有上下文筛选器。
ALLSELECTED 删除当前查询的列和行中的上下文筛选器,同时保留所有其他上下文筛选器或显式筛选器。
CALCULATE 在已修改的筛选器上下文中计算表达式。
CALCULATETABLE 在已修改的筛选器上下文中计算表表达式。
EARLIER 返回所述列的外部计算传递中指定列的当前值。
EARLIEST 返回指定列的外部计算传递中指定列的当前值。
FILTER 返回一个表,用于表示另一个表或表达式的子集。
KEEPFILTERS 计算 CALCULATE 或 CALCULATETABLE 函数时,修改应用筛选器的方式。
LOOKUPVALUE 返回满足搜索条件所指定的所有条件的行的值。 函数可以应用一个或多个搜索条件。
REMOVEFILTERS 清除指定表或列中的筛选器。
SELECTEDVALUE 如果筛选 columnName 的上下文后仅剩下一个非重复值,则返回该值。 否则,返回 alternateResult。

财务函数

DAX 中的财务函数用于执行财务计算的公式,如净现值和回报率。 这些函数类似于 Microsoft Excel 中使用的财务函数。
属于此类别的函数
函数 描述
ACCRINT 返回支付定期利息的证券的应计利息。
ACCRINTM 返回支付到期利息的证券的应计利息。
AMORDEGRC 返回每个会计期间的折旧。 类似于 AMORLINC,但根据资产的使用寿命应用折旧系数。
AMORLINC 返回每个会计期间的折旧。
COUPDAYBS 返回从息票期开始到结算日之间的天数。
COUPDAYS 返回包含结算日的息票期内的天数。
COUPDAYSNC 返回从结算日到下一个息票日的天数。
COUPNCD 返回结算日之后的下一个息票日。
COUPNUM 返回结算日和到期日之间应付的息票数,舍入到最接近的整息票数。
COUPPCD 返回结算日之前的上一个息票日。
CUMIPMT 返回 start_period 和 end_period 之间为贷款支付的累计利息。
CUMPRINC 返回 start_period 和 end_period 之间为贷款支付的累计本金。
DB 使用固定余额递减法返回指定期间资产的折旧。
DDB 使用双倍余额递减法或你指定的一些其他方法返回指定期间的资产折旧。
DISC 返回证券的贴现率。
DOLLARDE 将以整数部分加小数部分表示的美元价格(如 1.02)转换为以小数表示的美元价格。
DOLLARFR 将以整数部分加小数部分表示的美元价格(如 1.02)转换为以小数表示的美元价格。
DURATION 返回假定面值为 $100 的麦考利久期。
EFFECT 返回给定名义年利率和每年的复利期数下的实际年利率。
FV 根据固定利率计算投资的未来价值。
INTRATE 返回一次性付息的证券的利率。
IPMT 返回基于定期固定付款和固定利率计算得出的给定投资周期内支付的利息。
ISPMT 按照等额本金计算贷款(或投资)在指定期限内支付(或收取)的利息。
MDURATION 返回修改后的证券(假定面值为 $100)麦考利久期。
NOMINAL 返回在给定实际利率和每年复利期数的情况下的名义年利率。
NPER 返回基于定期固定付款和固定利率计算得出的投资周期数。
ODDFPRICE 返回每 $100 面值的首期息票日不固定(短期或长期)的证券的价格。
ODDFYIELD 返回首期息票日不固定(长期或短期)的证券的收益率。
ODDLPRICE 返回末期息票日不固定(长期或短期)的证券每 $100 面值的价格。
ODDLYIELD 返回末期息票日不固定(长期或短期)的证券的收益率。
PDURATION 返回投资达到指定值所需的期数。
PMT 根据固定的付款期数和固定利率计算贷款的付款额。
PPMT 返回基于定期固定付款和固定利率计算得出的给定投资周期的本金付款。
PRICE 返回支付定期利息的证券的每 $100 面值的价格。
PRICEDISC 返回每 $100 面值的贴现证券的价格。
PRICEMAT 返回到期支付利息的每 $100 面值的证券的价格。
PV 根据固定利率计算贷款或投资的现值。
RATE 返回年金的每个周期的利率。
RECEIVED 返回一次性付息的证券到期收回的金额。
RRI 返回投资增长的等效利率。
SLN 返回一段时间内资产的直线折旧。
SYD 返回指定期间内资产的年限总额折旧。
TBILLEQ 返回国库券的债券等值收益率。
TBILLPRICE 返回每 $100 面值的国库券的价格。
TBILLYIELD 返回国库券的收益率。
VDB 使用双倍余额递减法或你指定的其他一些方法,返回你指定的任何期间(包括部分期间)的资产折旧。
XIRR 返回不一定具有周期性的现金流时间表的内部收益率。
XNPV 返回不一定具有周期性的现金流时间表的现值。
YIELD 返回支付定期利息的证券的收益率。
YIELDDISC 返回贴现证券的年收益率。
YIELDMAT 返回支付到期利息的证券的年收益率。

信息函数

DAX 信息函数查看作为参数提供的单元格或行,并告诉你此值是否与预期类型匹配。 例如,如果引用的值包含错误,则 ISERROR 函数返回 TRUE。
属于此类别的函数
函数 说明
COLUMNSTATISTICS 返回关于模型中每张表每一列的统计信息表。
CONTAINS 如果所有引用列的值存在或包含在这些列中,则返回 true;否则,该函数返回 false。
CONTAINSROW 如果表中存在或包含一行值,则返回 TRUE,否则返回 FALSE。
CONTAINSSTRING 返回 TRUE 或 FALSE,指示一个字符串是否包含另一个字符串。
CONTAINSSTRINGEXACT 返回 TRUE 或 FALSE,指示一个字符串是否包含另一个字符串。
CUSTOMDATA 返回连接字符串中 CustomData 属性的内容。
HASONEFILTER 如果 columnName 上的直接筛选值的数目为一个,则返回 TRUE;否则,返回 FALSE。
HASONEVALUE 如果筛选 columnName 的上下文后仅剩下一个非重复值,则返回 TRUE。 否则返回 FALSE。
ISAFTER 此函数为布尔函数,它会模仿 Start At 子句的行为,并为满足所有条件参数的行返回 true。
ISBLANK 检查值是否为空白,并返回 TRUE 或 FALSE。
ISCROSSFILTERED 如果筛选相同或相关表中的 columnName 或其他列,则返回 TRUE。
ISEMPTY 检查表是否为空。
ISERROR 检查值是否错误,并返回 TRUE 或 FALSE。
ISEVEN 如果 number 为偶数,则返回 TRUE;如果为奇数,则返回 FALSE。
ISFILTERED 如果直接筛选 columnName,则返回 TRUE。
ISINSCOPE 当指定的列在级别的层次结构内时,返回 True。
ISLOGICAL 检查值是否为逻辑值(TRUE 或 FALSE),并返回 TRUE 或 FALSE。
ISNONTEXT 检查值是否为非文本(空单元格为非文本),并返回 TRUE 或 FALSE。
ISNUMBER 检查值是否为数值,并返回 TRUE 或 FALSE。
ISODD 如果数字为奇数,则返回 TRUE;如果数字为偶数,则返回 FALSE。
ISONORAFTER 此函数为布尔函数,它会模仿 Start At 子句的行为,并为满足所有条件参数的行返回 true。
ISSELECTEDMEASURE 由表达式中的计算项用于确定上下文中的度量值是度量值列表中指定的度量值之一。
ISSUBTOTAL 使用 SUMMARIZE 表达式另外创建一列;如果该行包含作为参数提供的列的小计值,则返回 True,否则返回 False。
ISTEXT 检查值是否为文本,并返回 TRUE 或 FALSE。
NONVISUAL 将 SUMMARIZECOLUMNS 表达式中的值筛选器标记为不可见。
SELECTEDMEASURE 由表达式的计算项用于引用上下文中的度量值。
SELECTEDMEASUREFORMATSTRING 由表达式的计算项目用于检索上下文中度量值的格式字符串。
SELECTEDMEASURENAME 由表达式的计算项目用于按名称确定上下文中的度量值。
USERCULTURE 返回当前用户的区域设置。
USERNAME 从在连接时提供给系统的凭据中返回域名和用户名。
USEROBJECTID 返回当前用户的对象 ID 或 SID。
USERPRINCIPALNAME 返回用户主体名称。

逻辑函数

逻辑函数对表达式有效,用于返回表达式中值或集的信息。 例如,可以使用 IF 函数检查表达式的结果并创建条件结果。
属于此类别的函数
函数 说明
AND 检查两个参数是否均为 TRUE,如果两个参数都是 TRUE,则返回 TRUE。
BITAND 返回两个数字的按位“AND”。
BITLSHIFT 返回一个按指定位数向左移动的数字。
BITOR 返回两个数字的按位“OR”。
BITRSHIFT 返回一个按指定位数向右移动的数字。
BITXOR 返回两个数字的按位“XOR”。
COALESCE 返回第一个计算结果不为 BLANK 的表达式。
FALSE 返回逻辑值 FALSE。
IF 检查条件,如果为 TRUE,则返回一个值,否则返回第二个值。
IF.EAGER 检查条件,如果为 TRUE,则返回一个值,否则返回第二个值。 使用 eager 执行计划,该计划将始终执行分支表达式,而不考虑条件表达式。
IFERROR 计算表达式,如果表达式返回错误,则返回指定的值
NOT 将 FALSE 更改为 TRUE,或者将 TRUE 更改为 FALSE。
或者 检查某一个参数是否为 TRUE,如果是,则返回 TRUE。
SWITCH 针对值列表计算表达式,并返回多个可能的结果表达式之一。
TRUE 返回逻辑值 TRUE。

数学和三角函数

数据分析表达式 (DAX) 中的数学函数与 Excel 数学函数和三角函数非常相似。 本节列出了 DAX 提供的数学函数。
属于此类别的函数
函数 说明
ABS 返回某一数字的绝对值。
ACOS 返回某一数字的反余弦值(又称逆余弦值)。
ACOSH 返回某一数字的反双曲余弦值。
ACOT 返回某一数字的反余切值(又称逆余切值)。
ACOTH 返回某一数字的反双曲余切值。
ASIN 返回某一数字的反正弦值(又称逆正弦值)。
ASINH 返回某一数字的反双曲正弦值。
ATAN 返回某一数字的反正切值(又称逆正切值)。
ATANH 返回某一数字的反双曲正切值。
CEILING 将数值向上舍入为最接近的整数或最接近的基数倍数。
CONVERT 将一种数据类型的表达式转换为另一种数据类型的表达式。
COS 返回给定角度的余弦值。
COSH 返回某一数字的双曲余弦值。
COT 返回以弧度为单位指定的角度的余切值。
COTH 返回双曲角的双曲余切值。
CURRENCY 计算参数并以货币数据类型的形式返回结果。
DEGREES 将弧度转换成角度。
DIVIDE 执行除法运算,并在被 0 除时返回备用结果或 BLANK()。
EVEN 返回向上舍入到最接近的偶数的数字。
EXP 返回 e 的指定次方。
FACT 返回一个数字的阶乘,等于序列 123*…*(以给定数字结尾)。
FLOOR 向零方向将数值向下舍入为最接近的基数倍数。
GCD 返回两个或多个整数的最大公约数。
INT 将数值向下舍入到最接近的整数。
ISO.CEILING 将数值向上舍入为最接近的整数或最接近的基数倍数。
LCM 返回整数的最小公倍数。
LN 返回某一数字的自然对数。
LOG 根据指定的底数返回数字的对数。
LOG10 返回某一数字以 10 为底的对数。
MOD 返回一个被除数除以一个除数后所得的余数。 结果的符号始终与除数的符号相同。
MROUND 返回舍入到所需倍数的一个数字。
ODD 返回向上舍入到最接近的奇数的数字。
PI 返回 Pi 值 3.14159265358979,精确到 15 位。
POWER 返回某一数字的乘幂结果。
QUOTIENT 执行除法运算,并仅返回除法运算结果的整数部分。
RADIANS 将度转换为弧度。
RAND 返回大于或等于 0 并且小于 1 的随机数字(平均分布)。
RANDBETWEEN 返回指定的两个数值之间的一个随机数。
ROUND 将数值舍入到指定的位数。
ROUNDDOWN 向零的方向向下舍入某一数字。
ROUNDUP 按远离 0(零)的方向向上舍入某一数字。
SIGN 确定列中数字、计算结果或值的符号。
SIN 返回给定角度的正弦值。
SINH 返回某一数字的双曲正弦值。
SQRT 返回某一数字的平方根。
SQRTPI 返回 (数字 * pi) 的平方根。
TAN 返回给定角度的正切值。
TANH 返回某一数字的双曲正切值。
TRUNC 通过删除数字的小数或分数部分将数字截断为整数。

其他函数

这些函数执行无法定义为任何类别的唯一操作。
属于此类别的函数
函数 说明
BLANK 返回空白。
ERROR 引发错误并显示错误消息。
EVALUATEANDLOG 返回第一个参数的值,并将其记录在 DAX 评估日志探查器事件中。
TOCSV 以 CSV 格式的字符串形式返回表。
TOJSON 以 JSON 格式的字符串形式返回表。

关系函数

此类别中的函数用于管理和利用表之间的关系。
属于此类别的函数
函数 描述
CROSSFILTER 指定要用于计算两列之间存在的关系的交叉筛选方向。
RELATED 从其他表返回相关值。
RELATEDTABLE 在给定筛选器修改的上下文中计算表表达式。
USERELATIONSHIP 指定要在特定计算中使用的关系,如 columnName1 与 columnName2 之间存在的关系。

统计函数

统计函数计算与统计分布和概率相关的值,如标准偏差和排列数。
属于此类别的函数
函数 说明
BETA.DIST 返回 beta 分布。
BETA.INV 返回逆 beta 累积概率密度函数 (BETA.DIST)。
CHISQ.DIST 返回卡方分步。
CHISQ.DIST.RT 返回卡方分布的右尾概率。
CHISQ.INV 返回卡方分布的左尾逆概率。
CHISQ.INV.RT 返回卡方分布的右尾逆概率。
COMBIN 返回给定项数的组合数。
COMBINA 返回给定项数的组合数(包含重复)。
CONFIDENCE.NORM 置信区间是一个值范围。
CONFIDENCE.T 使用学生的 t 分布返回总体平均值的置信区间。
EXPON.DIST 返回指数分布。
GEOMEAN 返回列中数字的几何平均值。
GEOMEANX 返回针对表中的每一行计算的表达式的几何平均值。
LINEST 使用最小二乘法计算最适合给定数据的直线。
LINESTX 使用最小二乘法计算最适合给定数据的直线。 针对表中每一行进行计算的表达式的数据结果。
MEDIAN 返回列中数字的中值。
MEDIANX 返回针对表中的每一行计算的表达式的中值。
NORM.DIST 返回指定平均值和标准偏差的正态分布。
NORM.INV 指定平均值和标准偏差的逆正态累积分布。
NORM.S.DIST 返回标准正态分布(平均值为 0,标准偏差为 1)。
NORM.S.INV 返回逆标准正态累积分布。
PERCENTILE.EXC 返回范围中值的第 k 个百分点,其中 k 的范围为 0 到 1(不含 0 和 1)。
PERCENTILE.INC 返回范围中值的第 k 个百分点,其中 k 的范围为 0 到 1(含 0 和 1)。
PERCENTILEX.EXC 返回针对表中的每一行计算的表达式的百分位数。
PERCENTILEX.INC 返回针对表中的每一行计算的表达式的百分位数。
PERMUT 返回可从数字对象中选择的给定数目对象的排列数。
POISSON.DIST 返回泊松分布。
RANK.EQ 返回某个数字在数字列表中的排名。
RANKX 针对 table 参数中每一行,返回某个数字在数字列表中的排名 。
SAMPLE 返回指定表中 N 行的样本。
STDEV.P 返回整个总体的标准偏差。
STDEV.S 返回样本总体的标准偏差。
STDEVX.P 返回整个总体的标准偏差。
STDEVX.S 返回样本总体的标准偏差。
T.DIST 返回学生的左尾 t 分布。
T.DIST.2T 返回学生的双尾 t 分布。
T.DIST.RT 返回学生的右尾 t 分布。
T.INV 返回学生的左尾逆 t 分布。
T.INV.2t 返回学生的双尾逆 t 分布。
VAR.P 返回整个总体的方差。
VAR.S 返回样本总体的方差。
VARX.P 返回整个总体的方差。
VARX.S 返回样本总体的方差。

文本函数

数据分析表达式 (DAX) 包括一组文本函数,这些函数基于 Excel 中的字符串函数库,但已对其进行了修改以与表格模型中的表和列一起使用。 本部分介绍 DAX 语言中提供的文本功能。
属于此类别的函数
函数 说明
COMBINEVALUES 将两个或更多个文本字符串联接成一个文本字符串。
CONCATENATE 将两个文本字符串联接成一个文本字符串。
CONCATENATEX 连接为表中的每一行计算的表达式的结果。
EXACT 比较两个文本字符串,如果它们完全相同,则返回 TRUE;否则返回 FALSE。
FIND 返回一个文本字符串在另一个文本字符串中的起始位置。
FIXED 将数值舍入到指定的小数位数并将结果返回为文本。
FORMAT 根据所指定的格式将值转换为文本。
LEFT 从文本字符串开头返回指定数量的字符。
LEN 返回文本字符串中的字符数。
LOWER 将文本字符串中的所有字母都转换为小写。
MID 在提供开始位置和长度的情况下,从文本字符串中间返回字符串。
REPLACE REPLACE 根据指定的字符数,将部分文本字符串替换为不同的文本字符串。
REPT 按给定次数重复文本。
RIGHT RIGHT 根据指定的字符数返回文本字符串中的最后一个或几个字符。
SEARCH 返回按从左向右的读取顺序首次找到特定字符或文本字符串的字符编号。
SUBSTITUTE 在文本字符串中将现有文本替换为新文本。
TRIM 删除文本中除单词之间的单个空格外的所有空格。
UNICHAR 返回由数值引用的 Unicode 字符。
UNICODE 返回与文本字符串的首个字符对应的数字代码。
UPPER 将文本字符串转换为全大写字母。
VALUE 将表示数值的文本字符串转换为数值。

时间智能函数

数据分析表达式 (DAX) 还包括“时间智能函数”,这些时间智能函数通过使用时间段(包括日、月、季度和年)使您能够对数据进行操作,然后生成和比较针对这些时段的计算。
属于此类别的函数
函数 说明
CLOSINGBALANCEMONTH 计算当前上下文中该月最后一个日期的表达式。
CLOSINGBALANCEQUARTER 计算当前上下文中该季度最后一个日期的表达式。
CLOSINGBALANCEYEAR 计算当前上下文中该年份最后一个日期的表达式。
DATEADD 返回一个表,此表包含一列日期,日期从当前上下文中的日期开始按指定的间隔数向未来推移或者向过去推移。
DATESBETWEEN 返回一个包含一列日期的表,这些日期以指定开始日期,一直持续到指定的结束日期。
DATESINPERIOD 返回一个表,此表包含一列日期,日期以指定的开始日期开始,并按照指定的日期间隔一直持续到指定的数字。
DATESMTD 返回一个表,此表包含当前上下文中该月份至今的一列日期。
DATESQTD 返回一个表,此表包含当前上下文中该季度至今的一列日期。
DATESYTD 返回一个表,此表包含当前上下文中该年份至今的一列日期。
ENDOFMONTH 返回当前上下文中指定日期列的月份的最后一个日期。
ENDOFQUARTER 为指定的日期列返回当前上下文的季度最后一日。
ENDOFYEAR 返回当前上下文中指定日期列的年份的最后一个日期。
FIRSTDATE 返回当前上下文中指定日期列的第一个日期。
FIRSTNONBLANK 返回按当前上下文筛选的 column 列中的第一个值,其中表达式不为空
LASTDATE 返回当前上下文中指定日期列的最后一个日期。
LASTNONBLANK 返回按当前上下文筛选的 column 列中的最后一个值,其中表达式不为空。
NEXTDAY 根据当前上下文中的 dates 列中指定的第一个日期返回一个表,此表包含从第二天开始的所有日期的列。
NEXTMONTH 根据当前上下文中的 dates 列中的第一个日期返回一个表,此表包含从下个月开始的所有日期的列。
NEXTQUARTER 根据当前上下文中的 dates 列中指定的第一个日期返回一个表,其中包含下季度所有日期的列。
NEXTYEAR 根据 dates 列中的第一个日期,返回一个表,表中的一列包含当前上下文中明年的所有日期。
OPENINGBALANCEMONTH 计算当前上下文中该月份第一个日期的表达式。
OPENINGBALANCEQUARTER 计算当前上下文中该季度第一个日期的表达式。
OPENINGBALANCEYEAR 计算当前上下文中该年份第一个日期的表达式。
PARALLELPERIOD 返回一个表,此表包含一列日期,表示与当前上下文中指定的 dates 列中的日期平行的时间段,日期是按间隔数向未来推移或者向过去推移的。
PREVIOUSDAY 返回一个表,此表包含的某一列中所有日期所表示的日期均在当前上下文的 dates 列中的第一个日期之前。
PREVIOUSMONTH 根据当前上下文中的 dates 列中的第一个日期返回一个表,此表包含上一月份所有日期的列。
PREVIOUSQUARTER 根据当前上下文中的 dates 列中的第一个日期返回一个表,此表包含上一季度所有日期的列。
PREVIOUSYEAR 基于当前上下文中的“日期”列中的最后一个日期,返回一个表,该表包含上一年所有日期的列。
SAMEPERIODLASTYEAR 返回一个表,其中包含指定 dates 列中的日期在当前上下文中前一年的日期列。
STARTOFMONTH 返回当前上下文中指定日期列的月份的第一个日期。
STARTOFQUARTER 为指定的日期列返回当前上下文中季度的第一个日期。
STARTOFYEAR 返回当前上下文中指定日期列的年份的第一个日期。
TOTALMTD 计算当前上下文中该月份至今的表达式的值。
TOTALQTD 计算当前上下文中该季度至今的日期的表达式的值。
TOTALYTD 计算当前上下文中表达式的 year-to-date 值。

表操作函数

属于此类别的函数
函数 说明
ADDCOLUMNS 将计算列添加到给定的表或表表达式。
ADDMISSINGITEMS 向表添加多个列中的项组合(如果它们不存在)。
CROSSJOIN 返回一个表,其中包含参数中所有表的所有行的笛卡尔乘积。
CURRENTGROUP 从 GROUPBY 表达式的 table 参数中返回一组行。
DATATABLE 提供用于声明内联数据值集的机制。
DETAILROWS 计算为度量值定义的详细信息行表达式并返回数据。
DISTINCT 列 返回由一列组成的表,其中包含与指定列不同的值。
DISTINCT 表 通过删除另一个表或表达式中的重复行返回表。
EXCEPT 返回一个表的行,这些行未在另一个表中出现。
FILTERS 返回由直接作为筛选器应用到 columnName 的值组成的表。
GENERATE 返回一个表,其中包含 table1 中的每一行与在 table1 的当前行的上下文中计算 table2 所得表之间的笛卡尔乘积 。
GENERATEALL 返回一个表,其中包含 table1 中的每一行与在 table1 的当前行的上下文中计算 table2 所得表之间的笛卡尔乘积 。
GENERATESERIES 返回包含算术序列值的单列表。
GROUPBY 与 SUMMARIZE 函数类似,GROUPBY 不会对它添加的任何扩展列执行隐式 CALCULATE。
IGNORE 通过省略 BLANK/NULL 计算中的特定表达式,修改 SUMMARIZECOLUMNS。
INTERSECT 返回两个表的行交集,保留重复项。
NATURALINNERJOIN 执行一个表与另一个表的内部联接。
NATURALLEFTOUTERJOIN 使用 RightTable 执行与 LeftTable 的联接。
ROLLUP 通过向由 groupBy_columnName 参数定义的列的结果添加汇总行,修改 SUMMARIZE 的行为。
ROLLUPADDISSUBTOTAL 通过向基于 groupBy_columnName 列的结果添加汇总行/小计行,修改 SUMMARIZECOLUMNS 的行为。
ROLLUPISSUBTOTAL 将汇总组与 ADDMISSINGITEMS 表达式内的 ROLLUPADDISSUBTOTAL 添加的列进行配对。
ROLLUPGROUP 通过向由 groupBy_columnName 参数定义的列的结果添加汇总行,修改 SUMMARIZE 和 SUMMARIZECOLUMNS 的行为。
ROW 返回一个具有单行的表,其中包含针对每一列计算表达式得出的值。
SELECTCOLUMNS 将计算列添加到给定的表或表表达式。
SUBSTITUTEWITHINDEX 返回表示作为参数提供的两个表的左半联接的表。
SUMMARIZE 返回一个摘要表,显示对一组函数的请求总数。
SUMMARIZECOLUMNS 返回一组组的摘要表。
表构造函数 返回包含一列或多列的表。
TOPN 返回指定表的前 N 行。
TREATAS 将表表达式的结果作为筛选器应用于无关表中的列。
UNION 从一对表创建联合(联接)表。
VALUES 返回单列表,其中包含指定表或列中的非重复值。

变量

可以使用 VAR 在表达式中创建变量。 从技术上讲,VAR 不是函数,而是用于将表达式的结果存储为命名变量的关键字。 然后,可以将该变量作为参数传递给其他度量值表达式。 例如:

VAR
    TotalQty = SUM ( Sales[Quantity] )

Return

    IF (
        TotalQty > 1000,
        TotalQty * 0.95,
        TotalQty * 1.25
        )

在本示例中,可以将 TotalQty 作为命名变量传递给其他表达式。 变量可以是任何标量数据类型,包括表。 在 DAX 公式中使用变量的功能非常强大。

数据类型

您可以将数据从可能支持不同数据类型的众多不同数据源导入到模型中。 将数据导入模型时,数据将转换为表格模型数据类型之一。 当在计算中使用模型数据时,数据则会因计算的持续时间和输出而转换为 DAX 数据类型。 当您创建一个 DAX 公式时,该公式中使用的项将自动确定返回的值数据类型。

DAX 支持以下数据类型:

模型中的数据类型 	DAX 中的数据类型 	描述
整数 	一个 64 位(八字节)整数值 12 	没有小数位的数字。 整数可以是正数或负数,但必须是介于 -9,223,372,036,854,775,808 (-2^63)9,223,372,036,854,775,807 (2^63-1) 之间的整数。
十进制数 	一个 64 位(八字节)实数 12 	实数是可具有小数位的数字。 实数涵盖很广范围的值:

从 -1.79E +308-2.23E -308 的负值

零

从 2.23E -3081.79E + 308 的正值

但是,有效位数限制为 17 个小数位。
布尔 	布尔 	True 或 False 值。
文本 	String 	一个 Unicode 字符数据字符串。 可以是字符串,或以文本格式表示的数字或日期。
日期 	日期/时间 	采用接受的日期-时间表示形式的日期和时间。
有效值是 190031 日后的所有日期。
货币 	货币 	货币数据类型允许值介于 -922,337,203,685,477.5808922,337,203,685,477.5807 之间,并且具有四个小数位的固定精度。
空值 	空白 	空白是 DAX 中的一种数据类型,表示并替代 SQL 中的 Null。 您可以通过使用 BLANK 函数创建空白,并通过使用逻辑函数 ISBLANK 测试是否存在空白。

表格数据模型还包括表数据类型,作为许多 DAX 函数的输入或输出。 例如,FILTER 函数采用表作为输入,并输出仅包含满足筛选条件的行的另一个表。 通过组合表函数与聚合函数,您可以对动态定义的数据集执行复杂计算。

尽管数据类型通常都是自动设置的,但还是需要了解数据类型,尤其是它们如何应用到 DAX 公式,这一点非常重要。 举例来说,公式中的错误或是意外结果通常都是因为对参数中指定的数据类型使用了不该使用的特定运算符而导致的。 例如,公式 = 1 & 2返回结果为 12 的字符串。 但是公式 = “1” + "2"返回的结果为整数 3。

上下文

上下文是在创建 DAX 公式时需要了解的重要概念。 您可以通过上下文执行动态分析,因为公式的结果会发生更改以反映当前行或单元选择以及任何相关数据。 了解上下文并有效使用上下文对构建高性能的动态分析和解决公式中的问题至关重要。

可以在不同的上下文中计算表格模型中的公式,这取决于其他设计元素:



数据透视表或报表中应用的筛选器
公式中定义的筛选器
使用公式中的特殊函数指定的关系

有许多类型的上下文:“行上下文” 、“查询上下文” 和“筛选上下文”。

行上下文

可以将行上下文视为“当前行”。 如果您在计算列中创建某一公式,则该公式的“行上下文”将包括来自当前行中所有列的值。 如果该表与其他表相关,则上下文还包括来自另一个表中与当前行相关的所有值。

例如,假设创建将同一表中的两列(Freight 和 Tax)的值相加的计算列 = [Freight] + [Tax]。 此公式仅自动获取指定列中当前行的值。

行上下文还会依照已定义的表之间的任何关系(包括使用 DAX 公式在计算列中定义的关系)来确定相关表中与当前行关联的行。

例如,下面的公式使用 RELATED 函数根据订单的发货目的地从相关表提取税金值。 通过使用当前表中的区域值,在相关表中查找该区域,然后从相关表中获取该区域的税率,从而确定税金值。

= [Freight] + RELATED('Region'[TaxRate])  

此公式从 Region 表中获取当前区域的税率,并将其与 Freight 列中的值相加。 在 DAX 公式中,您无需了解或指定连接各表的特定关系。

多行上下文

DAX 包括对表执行迭代计算的函数。 这些函数可以具有多个当前行,其中每个行都有自己的行上下文。 实际上,可以利用这些函数创建用于以递归方式对内部和外部循环进行操作的公式。

例如,假设您的模型包含一个 Products 表和一个 Sales 表。 用户可能想要遍历整个 Sales 表,该表中全都是涉及多个产品的交易,并且您还要找到在任何一个交易中为每个产品订购的最大数量。

使用 DAX,您可以生成返回正确值的单个公式,并且只要用户向表中添加数据,结果就自动更新。

= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])  

有关此公式的详细示例,请参阅 EARLIER。

总之,该 EARLIER 函数存储来自当前运算之前的运算中的行上下文。 在任何时候,该函数都在内存中存储两组上下文:一组上下文表示公式的内部循环的当前行,另一组上下文表示公式的外部循环的当前行。 DAX 自动在两个循环之间馈送值,以便您可以创建复杂的聚合。

查询上下文

“查询上下文”是指为公式隐式检索的数据子集。 例如,当用户将度量值或字段放入报表时,引擎将检查行标题、列标题、切片器和报表筛选器,以确定上下文。 然后,对模型数据运行必要的查询以获取正确的数据子集,进行公式定义的计算,接着在报表中填充值。

由于上下文会根据放置公式的位置而更改,因此公式的结果也会更改。 例如,假设你创建一个对“销售”表“利润”列中的值求和的公式:= SUM(‘Sales’[Profit]) 。 如果在“销售”表中的计算列中使用此公式,则该公式的结果对于整个表将是相同的,因为公式的查询上下文始终是“销售”表的整个数据集 。 结果将包含所有区域、所有产品、所有年份等的利润。

但是,用户通常不希望看到数百次相同的结果,而是希望获得特定年份、特定国家/地区、特定产品或这些条件任意组合下的利润,然后获取总计。

在报表中,通过筛选、添加或删除字段以及使用切片器来更改上下文。 对于每个更改,为将在其中计算度量值的查询上下文。 因此,对于每个单元,在不同的“查询上下文”中计算在度量值中使用的相同公式。

筛选器上下文

“筛选上下文”是指每个列中允许存在的一组值,或可属于从相关表中检索到的值的一组值。 可以对设计器或表示层(报表和数据透视表)中的列应用筛选器。 也可以通过公式中的筛选表达式来显式定义筛选器。

通过在公式中使用参数,为列或表中允许存在的值集指定筛选约束时,将添加“筛选上下文”。 基于其他上下文(如行上下文或查询上下文)应用筛选上下文。

在表格模型中,可通过多种方式来创建筛选上下文。 在可使用该模型的客户端的上下文(如 Power BI 报表)中,用户可以通过在行标题和列标题上添加切片器或报表筛选器来动态创建筛选器。 还可以在公式中直接指定筛选表达式来执行以下操作:指定相关的值、筛选用作输入的表或动态获取计算中使用的值的上下文。 您还可以完全清除或有选择地清除特定列上的筛选器。 这在创建用于计算总计的公式时很有用。

确定公式中的上下文

在创建一个 DAX 公式时,首先会测试该公式的语法是否有效,然后测试该公式以确保其包含的列和表的名称位于当前上下文中。 如果找不到该公式指定的任一列或表,则将返回错误。

如前所述,通过使用模型中的可用表、表之间的所有关系和所应用的所有筛选器来确定验证(和重新计算操作)期间的上下文。

例如,如果刚刚将一些数据导入到一个新表中,而该表未与任何其他表关联(并且尚未应用任何筛选器),则当前上下文是表中的完整列集。 如果通过关系将该表与其他表链接,则当前上下文将包括相关的表。 如果将该表中的某个列添加到一个报表中,该报表具有切片器并且可能具有一些报表筛选器,则公式的上下文是报表的每个单元中的数据子集。

上下文是一个很有用的概念,但也可能导致很难排除公式问题。 我们建议您从简单的公式和关系入手,了解上下文的工作原理。 下一节提供了一些示例,说明公式如何使用不同类型的上下文来动态返回结果。

运算符

DAX 语言在公式中使用四种不同类型的运算符:

对值进行比较,并返回一个逻辑 TRUE\FALSE 值的比较运算符。
执行返回数值的算术运算的算术运算符。
联接两个或更多文本字符串的文本连接运算符。
将两个或更多表达式组合起来以返回单个结果的逻辑运算符。

使用表和列

表格数据模型中的表与 Excel 表类似,但在处理数据和公式的方式上有所不同:

公式只使用表和列,而不使用各个单元格、范围引用或数组。
公式可以使用关系从相关表中获取值。 检索到的值始终与当前行值相关。
您不能像在 Excel 工作表中一样使用不规则或“不齐整”的数据。 表中每行所包含的列数必须相同。 然而,一些列中可以包含空值。 Excel 数据表和表格模型数据表不能互换。
由于为每列都设置了数据类型,该列中的每个值必须同属一种类型。

在公式中引用表和列

可以通过名称来引用任何表和列。 例如,下面的公式说明如何通过使用“完全限定”的名称来引用两个表中的列:

= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])  

计算公式时,模型设计器首先检查常规语法,然后根据当前上下文中的可能列和表检查所提供的列和表的名称。 如果名称不明确或者列或表无法找到,则您将收到有关公式的错误(在发生错误的单元格中,用 #ERROR 字符串代替数据值)。 要详细了解表、列和其他对象的命名要求,请参阅 DAX 语法中的命名要求。

表关系

通过在表之间创建关系,可以在计算中使用其他表中的相关值。 例如,可以使用计算列来确定与当前经销商相关的所有装运记录,然后对每个记录的装运成本求和。 但在许多情况下,关系可能没有必要。 可以在公式中使用 LOOKUPVALUE 函数,以在 result_columnName 中返回符合 search_column 和 search_value 参数中指定条件的行的值。

很多 DAX 函数都要求两个表或多个表之间存在关系,以便定位所引用的列并返回有意义的结果。 其他函数将尝试确定关系;但是,为获得最佳结果,您始终应尽量创建关系。 表格数据模型支持表之间的多个关系。 为避免混淆或不正确的结果,一次只将一个关系指定为活跃关系,但可以根据需要更改活跃关系以便在计算中遍历数据中的不同连接。 可使用 USERELATIONSHIP 函数指定一个或多个要在特定计算中使用的关系。

使用关系时,必须遵守以下公式设计规则:

当表通过关系进行连接时,必须确保用作键的两列具有匹配的值。 不会强制实施引用完整性,因此可以在键列中具有不匹配的值并仍创建关系。 如果发生这种情况,您应注意空值或不匹配值可能会影响公式的结果。

使用关系在模型中链接表时,可以扩大公式的计算范围(或“上下文”)。 因添加新表、新关系或因活动关系改变而引起的上下文变化可能会导致结果发生意外变化。 有关详细信息,请参阅本文中的上下文。

处理和刷新

处理和重新计算是两个独立但相关的运算。 在设计包含复杂公式、大量数据或从外部数据源获取的数据的模型时,应充分了解这些概念。

处理(刷新)使用外部数据源中的新数据更新模型中的数据。

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

对计算列中的值进行计算并存储在模型中。 若要更新计算列中的值,必须使用以下三个处理命令之一处理该模型 —“处理全部”、“处理数据”或“处理重新计算”。 每当您更改公式时,必须始终针对整个列重新计算公式的结果。

每当用户向数据透视表添加度量值或打开报表时,都会动态计算度量值计算的值;当用户修改上下文时,度量值返回的值将更改。 度量值的结果将始终反映内存中缓存中的最新内容。

处理和重新计算对行级别安全性公式没有影响,除非重新计算的结果返回不同的值,从而确定行是否可由角色成员查询。

更新

DAX 处于持续改进中。 新函数和已更新的函数随下一次发布更新一起发布,通常每月一次。 首先更新服务,然后更新已安装的应用程序,如 Power BI Desktop、Excel、SQL Server Management Studio (SSMS) 和 Visual Studio Analysis Services 项目扩展 (SSDT)。 SQL Server Analysis Services 随下一次累积更新一起更新。 与 Power BI Desktop 更新一致,新函数将首先在 DAX 函数引用中进行公布和说明。

并非所有函数都在早期版本的 SQL Server Analysis Services 和 Excel 中受支持。
疑难解答

如果在定义公式时遇到错误,公式可能会包含“语法错误” 、“语义错误” 或“计算错误”。

语法错误最容易解决。 它们通常涉及缺少括号或逗号。

当语法正确,但引用的值或列在公式的上下文中没有意义时,会发生另一种类型的错误。 此类语义和计算错误可能是由于下列任何问题导致的:

公式中引用不存在的列、表或函数。
公式似乎正确,但在数据引擎提取数据时,它会发现类型不匹配,并引发错误。
公式将数量或类型不正确的参数传递给函数。
公式中引用有错误的其他列,因此它的值无效。
公式会引用尚未处理的列,这意味着,它有元数据,但没有用于计算的实际数据。

在前四种情况中,DAX 标记包含无效公式的整个列。 在最后一种情况中,DAX 会灰显该列,以便指示该列处于未处理的状态中。文章来源地址https://www.toymoban.com/news/detail-479105.html

到了这里,关于Microsoft Power Platform 基础到实战(3)-Power BI (1)-数据分析表达式 DAX(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Power Platform 零基础 Power Apps canvas+Power Automate 画布应用基础搭建应用流程

    1、Power Apps 介绍 Power Apps 是一套应用程序、服务、连接器和数据平台,可让您有机会构建自定义应用程序以满足您的业务需求。通过使用 Power Apps,您可以快速构建自定义业务应用程序,以连接到存储在基础数据平台 (Microsoft Dataverse) 或各种在线和本地数据源(SharePoint、Exce

    2024年02月05日
    浏览(31)
  • 微软 Power Platform 零基础 Power Pages 网页搭建高阶实际案例实践(四)

    上一篇文章我们使用Power Pages自定义页面搭建了一个支持工单功能,这篇文章我们来继续来优化一下让网页变得更加丰富和完美。 这里我只增加了下载功能,还可以加一些其他的增删改查。 3.1、添加联系人查找字段,增加一对多关系 添加好字段后放到窗体里可以锁定可以隐

    2024年02月05日
    浏览(25)
  • 微软Power Platform 零基础 Power Apps canvas+SharePoint 画布应用基础搭建应用流程学习实践进阶

    我们在上节学习了基础 Power Apps canvas+Power Automate 画布应用基础搭建应用流程. 那么本节我们继续学习实践进阶基础画布应用。 本节学习来源:探索BI、自动化、低代码的技术与融合— 微软Power Platform平台赋能全民开发者 《全民开发大讲堂》. 1、需求背景 公司内巡检小组将定

    2024年02月04日
    浏览(32)
  • 利用Power Automate,轻松下载Power BI报告中的数据

        Power Automate是微软的流程自动化(RPA)工具,可以友好、无代码的实现各种低效工作流程的自动化处理。它也已经集成到了Power BI中,在 Power BI 报表中创建 Power Automate 视觉对象后,终端用户只需单击报表中的按钮即可运行自动化流。 通过二者的协同,可以提供更强大、更灵

    2024年02月04日
    浏览(32)
  • Power BI矩阵行数据平铺及列数据排序

           众所周知,Power BI中矩阵通常由三部分属性组成,分别是行、列以及值。各属性添加不同数据组合后,矩阵会呈现出不同的样式,有时我们需要对样式进行灵活调整,比如将行属性的多级数据平铺展示以及列属性数据排序。 一、矩阵行属性的多级数据展示 1、利用+/

    2023年04月16日
    浏览(25)
  • Power BI 数据导入(SQL Server、MySQL、网页数据)

    POWER BI 可以连接多种数据源,包括: 文件(文本、CSV、Excel) 数据库(SQL Server、MySQL、Azure Cosmos DB等NoSQL数据库) Power Platform和Azure(都是微软的数据产品/云平台) 联机服务(Google Analytics、GitHub等常用的应用软件) 其他(比如网页、Python脚本等) Excel(Power Query、Power Pivot、Power

    2024年02月04日
    浏览(43)
  • 【数据可视化和BI技术】数据可视化和BI技术的原理、方法和工具,如Tableau、Power BI

    数据可视化和BI技术是当今企业数据分析和业务决策过程中广泛应用的技术。它能够将大量数据转化成可视化的图表和图形,帮助用户更好地理解数据,挖掘出数据背后的价值。在此,我们将从以下几个方面介绍数据可视化和BI技术。 数据可视化和BI技术是通过将海量数据集成

    2024年02月16日
    浏览(31)
  • Power BI实现实时动态和用户输入的数据交互

    背景:Power BI一般作为一个展示和分析数据的平台存在,即使是我们用Direct Query的mode也是受制于连接的数据库的表刷新,不能实现实时动态数据变化展示。 解决思路:当Power Apps里面输入了新的数据时,数据会写入到database的table表里面,然后通过Direct Query来连接的Power BI,发

    2024年02月07日
    浏览(32)
  • Power BI 实现日历图,在一张图中展示天、周、月数据变化规律

    《数据可视化》这本书里介绍了一个时间可视化的案例(如下图所示), 以日历图的形式展示数据的变化 ,可以在一张图上同时观察到: (1)每一天的数据变化;(2)随周变化的数据规律;(3)随月变化的数据规律。 这样的展示形式对于所有随日期变化的数据都有参考价

    2024年02月07日
    浏览(43)
  • Power BI 傻瓜入门 3. 选择Power BI的版本

    本章内容包括: Excel与Power BI的比较 选择Power BI的桌面版和服务版之间的差异 了解Microsoft提供的许可选项 挑选正确版本的Power BI可能就像参观世界上最大的糖果店:你可以从许多细微差别的替代品中进行选择。选择可以归结为想要、需要、规模,当然还有钱。有些版本是免费

    2024年02月08日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包