Power BI--DAX函数进阶
DIVIDE函数
作用:
安全除法,一个值得使用的除法函数。
在分母为0时,返回备用结果或BLANK()
语法:
DIVID(<numerator>, <denominator>[,<alternateresult>]>
参数:
numerator 分子
denominator 分母
alternateresult 提示值,当分母为零时返回值,默认为blank()
返回值:
十进制数
注意点:
无
举例:
IF函数
作用:
检查条件,如果为TRUE,则返回一个值,否则返回第二个值。
语法:
IF(<logical_test>,<value_if_true>[,<value_if_false>])
参数:
logical_test 计算结果可以是TRUE或FALSE的任何值或表达式
value_if_true 逻辑测试为TRUE时返回的值
value_if_false 逻辑测试为FALSE时返回的值。如果省略,则返回BLANK
返回值:
value_if_true, value_if_false或空
注意点:
- 如果value_if_true 和value_if_false的数据类型不同,则IF函数可返回可变数据类型;但如果value_if_true和value_if_false都是数值数据类型,则此函数会尝试返回单个数据类型。在后一种情况下,IF函数会隐式转换数据类型,以容纳这两个值。
- 创建度量值时,IF函数的logical_test部分只能使用度量值作为其参数;当创建列时,可以以列名作为其参数。
举例:
通常IF函数用于根据某列内容对数据进行分类。
SWITCH函数
作用:
针对值列表计算表达式,并返回多个可能的结果表达式之一。
语法:
SWITCH(<expression>,<value>,<result>[,<value>,<result>]...[,<else>])
参数:
expression 返回单个标量值的任何DAX表达式,其中,表达式将被计算多次(针对每行/上下文)
value 要与expression的结果相匹配的常量值
result 当expression的结果与对应value匹配时,要进行计算的任何标量表达式
else 如果expression的结果与任何value参数都不匹配,要进行计算的任何标量表达式
返回值:
一个标量值,如果与value匹配,则该值来自其中一个result表达式,如果与任何value值都不匹配,则该值来自else表达式。
注意点:
- 所有result表达式和else表达式必须属于同一数据类型。
举例:
RELATED函数
作用:
从其他表返回相关值。
语法:
RELATED(<column>)
参数:
column 包含要检索的值的列
返回值:
与当前行相关的单个值
注意点:
- RELATED函数要求当前表和具有相关信息的表之间存在关系。你需要指定包含所需数据的列,而该函数将遵循现有的多对一关系从相关表的指定列中提取值。如果不存在关系,则必须创建关系。
- RELATED函数执行查找时,将检查指定表中的所有值,而不考虑可能已应用的任何筛选器。
- RELATED函数需要行上下文;因此,该函数只能在当前行上下文明确的计算列表达式中使用,或者在使用表扫描函数的表达式中用作嵌套函数。
- RELATED函数不能用于跨有限关系提取列。
举例:
RELATEDTABLE函数
作用:
在给定筛选器修改的上下文中计算表表达式。
语法:
RELATEDTABLE(<table>)
参数:
table 现有表的名称
返回值:
值表
注意点:
- RELATEDTABLE函数更改在其中筛选数据的上下文,并在指定的新上下文中计算表达式。
- 此函数是CALCULATETABLE函数不带逻辑表达式的精简版。
- 在已计算的列或行级安全性规则中使用时,不支持在DirectQuary模式下使用此函数。
举例:
LOOKUPVALUE函数
作用:
返回满足一个或多个搜索条件所指定的所有条件的行的值。
语法:
LOOKUPVALUE(
<result_columnName>,
<search_columnName>,
<search_value>,
[,<search2_columnName>, <search2_value>]...
[,<alternateResult>]
)
参数:
result_columnName 包含要返回的值的现有列的名称。它不能是表达式。目标列
search_columnName 现有列的名称。它可以位于result_columnName所在的表中,也可以位于相关表中。不能是表达式。被查询列
serarch_value 要在search_columnName中搜索的值。依据列
alternateResult result_columnName的上下文已筛选为零个或多个非重复值时,返回该值。如果未提供,则在将result_columnName向下筛选为零值时,该函数返回BLANK;如果有多个非重复值,则返回错误。
返回值:
所有search_column和search_value对都匹配的行上的result_column的值。
如果没有符合所有搜索值的匹配项,则返回BLANK或alternateResult(如果提供).换句话说,如果仅部分条件匹配,则该函数将不会返回查找值。
如果有多行匹配搜索值,并且在所有情况下result_column值都相同,则返回该值。但是,如果result_column返回不同的值,则返回错误或alternateResult(如果提供)
注意点:
- 如果“结果”和“搜索”表之间存在关系,则在大多数情况下,使用RELATED函数(而不是LOOKUPVALUE)会更高效并可以提供更好的性能。
- 在函数循环访问搜索表中的行之前,将计算search_value和alternateResult参数。
- 在已计算的列或行级安全性规则中使用时,不支持在DirectQuery模式下使用此函数。
举例:
DATESYTD函数
作用:
返回一个表,此表包含当前上下文中该年份至今的一列日期。
语法:
DATESYTD(<dates>[,<year_end_date>])
参数:
dates 包含日期的列
year_end_date 带有日期的文本字符串,用于定义年末日期。默认值为12月31日
返回值:
包含单列日期值的表。
注意点:
dates参数可以是以下任意一项:
- 对日期/时间列的引用
- 返回单列日期/时间值的表表达式
- 定义日期/时间值的单列表的布尔表达式
- year_end_date参数是日期的字符串文本,采用的区域设置与创建工作簿的客户端的区域设置相同。日期的年份部分会被忽略。
- 在已计算的列或行级安全性规则中使用时,不支持在DirectQuery模式下使用此函数。
举例:
DATEADD函数
作用:
返回一个表,此表包含一列日期,日期从当前上下文中的日期开始按指定的间隔数向未来推移或者向过去推移。
语法:
DATEADD(<dates>,<number_of_intervals>,<interval>)
参数:
dates 包含日期的列
number_of_intervals 一个整数,指定要添加dates或从dates中减去的时间间隔数。
interval 日期偏移的间隔。interval的值可以是以下值之一:year、quarter、month、day
返回值:
包含单列日期值的表。
注意点:
dates参数可以是以下任一项:
- 对日期/时间列的引用
- 返回单列日期/时间值的表表达式
- 定义日期/时间值的单列表的布尔表达式
- 如果为number_of_intervals指定了正数,则dates中的日期向未来推移;如果指定的数字为负数,则dates中的日期向过去推移。
- interval参数是一个枚举,而不是一组字符串;因此不应将值括在引号中。此外,在使用值year、quarter、month和day时应将它们拼写完整。
- 结果表只包括dates列中存在的日期。
- 如果当前上下文中的日期未形成连续间隔,函数则会返回错误。
- 在已计算的列或行级安全性规则中使用时,不支持在DirectQuery模式下使用此函数。
举例:
FIRSTDATE函数
作用:
返回当前上下文中指定日期列的第一个日期。
语法:
FIRSTDATE(<dates>)
参数:
dates 包含日期的列
返回值:
包含具有日期值的单列和单行的表
注意点:
- dates参数可以是以下任一项:
- 对日期/时间列的引用
- 返回单列日期/时间值的表表达式
- 定义日期/时间值的单列表的布尔表达式
- 当前上下文是单个日期时,FIRSTDATE和LASTDATE函数返回的日期将相等。
- “返回值”是一个包含单个列和单个值的表。因此,该函数可用作任何参数中需要表的函数的参数。另外,只要需要日期值,就可以使用返回值。
- 在已计算的列或行级安全性规则中使用时,不支持在DirectQuery模式下使用此函数。