Excel DAX – 函数
Excel DAX – 函数
大多数DAX 函数具有与 Excel 函数相同的名称和功能。但是,DAX 函数已被修改为使用 DAX 数据类型并使用表和列。
DAX 具有一些您在 Excel 中找不到的附加功能。这些 DAX 函数是为特定目的而提供的,例如基于与数据模型的关系数据库方面相关联的关系的查找、迭代表以执行递归计算、执行动态聚合以及利用时间智能进行计算的能力。
在本章中,您将了解 DAX 语言支持的函数。有关这些 DAX 函数用法的更多信息,请参阅本教程库中的教程 – DAX 函数。
什么是 DAX 函数?
DAX 函数是 DAX 语言中提供的内置函数,使您能够对数据模型中的表中的数据执行各种操作。如前所述,DAX 用于数据分析和商业智能目的,需要支持从数据中提取、吸收和获取洞察力。一旦您掌握了 DAX 语言和 DAX 函数的用法,基于数据模型的 DAX 函数为您提供了这些实用程序,这些实用程序可以使您的工作更简单。
Excel 函数与 DAX 函数
您知道的 Excel 函数与 DAX 函数之间存在某些相似之处。但是,也存在某些差异。您需要弄清楚这些,以免在使用 DAX 函数和编写包含 DAX 函数的 DAX 公式时出错。
Excel 函数和 DAX 函数之间的相似之处
-
许多 DAX 函数与 Excel 函数具有相同的名称和相同的一般行为。
-
DAX 具有类似于 Excel 中的数组和向量查找函数的查找函数。
Excel 函数和 DAX 函数之间的差异
-
DAX 函数已被修改为采用不同类型的输入,并且某些 DAX 函数可能返回不同的数据类型。因此,尽管它们具有相同的名称,但您需要分别了解它们的用法。在本教程中,您会发现每个 DAX 函数都以 DAX 为前缀,以避免与 Excel 函数混淆。
-
如果没有必要的修改,您不能在 Excel 公式中使用 DAX 函数或在 DAX 中使用 Excel 公式/函数。
-
Excel 函数将单元格引用或单元格区域作为引用。DAX 函数从不将单元格引用或单元格区域作为引用,而是将列或表作为引用。
-
Excel 日期和时间函数返回一个整数,该整数将日期表示为序列号。DAX 日期和时间函数返回 DAX 中但不在 Excel 中的日期时间数据类型。
-
Excel 没有返回表的函数,但有些函数可以处理数组。许多 DAX 函数可以轻松引用完整的表和列来执行计算并返回一个表或一列值。DAX 的这种能力为使用 DAX 的 Power Pivot、Power View 和 Power BI 增添了力量。
-
DAX 查找函数要求在表之间建立关系。
-
Excel 支持一列数据中的变体数据类型,即您可以在一个列中包含不同数据类型的数据。而 DAX 期望表的列中的数据始终具有相同的数据类型。如果数据的数据类型不同,DAX 会将整个列更改为最适合该列中所有值的数据类型。但是,如果导入数据并出现此问题,DAX 可以标记错误。
要了解 DAX 数据类型和数据类型转换,请参阅“DAX 语法参考”一章。
DAX 函数的类型
DAX 支持以下类型的函数。
- DAX 表值函数
- DAX 过滤器函数
- DAX 聚合函数
- DAX 时间智能函数
- DAX 日期和时间函数
- DAX 信息函数
- DAX 逻辑函数
- DAX 数学和三角函数
- DAX 其他功能
- DAX 父子函数
- DAX 统计函数
- DAX 文本函数
在本节中,您将了解函数类别级别的 DAX 函数。有关 DAX 函数语法以及 DAX 函数返回和执行的详细信息 – 请参阅本教程库中的 DAX 函数教程。
DAX 时间智能功能和 DAX 过滤功能非常强大,需要特别提及。有关详细信息,请参阅章节 – 了解 DAX 时间智能和 DAX 过滤器功能。
DAX 表值函数
许多 DAX 函数将表作为输入或输出表,或者两者兼而有之。这些 DAX 函数称为 DAX 表值函数。由于表可以只有一列,因此 DAX 表值函数也将单列作为输入。您有以下类型的 DAX 表值函数 –
- DAX 聚合函数
- DAX 过滤器功能
- DAX 时间智能功能
了解 DAX 表值函数可帮助您有效地编写 DAX 公式。
DAX 聚合函数
DAX 聚合函数聚合表行上的任何表达式,并且在计算中很有用。
以下是一些 DAX 聚合函数 –
-
ADDCOLUMNS (<table>, <name>, <expression>, [<name>, <expression>] …)
-
平均值(<列>)
-
平均值(<列>)
-
AVERAGEX (<表>, <表达式>)
-
COUNT (<列>)
-
COUNTA (<列>)
-
COUNTAX (<表>, <表达式>)
-
COUNTBLANK(<列>)
-
COUNTROWS (<table>)
-
COUNTX (<表>, <表达式>)
-
交叉连接 (<table1>, <table2>, [<table3>] …)
-
DISTINCTCOUNT(<列>)
-
生成 (<table1>, <table2>)
-
GENERATEALL (<table1>, <table2>)
-
最大(<列>)
-
MAXA(<列>)
-
MAXX (<表>, <表达式>)
-
最小值(<列>)
-
米娜(<列>)
-
MINX (<表>, <表达式>)
-
产品(<列>)
-
PRODUCTX (<table>, <expression>)
-
ROW (<名称>, <表达式>, [<名称>, <表达式>] …)
-
SELECTCOLUMNS (<table>, <name>, <scalar_expression>,
-
[<名称>, <标量表达式>] …)
-
总和(<列>)
-
总结 (<table>, <groupBy_columnName>, [<groupBy_columnName>] …, [<name>, <expression>] …)
-
SUMX (<表>, <表达式>)
-
TOPN (<n_value>, <table>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]] …)
DAX 过滤器函数
DAX 筛选器函数返回与当前行相关的列、表或值。您可以使用 DAX 筛选器函数返回特定数据类型、在相关表中查找值以及按相关值筛选。DAX 查找函数通过使用表和它们之间的关系来工作。DAX 过滤器函数使您能够操作数据上下文以创建动态计算。
以下是一些 DAX 过滤器功能 –
-
ADDMISSINGITEMS(<showAllColumn>, [<showAllColumn>] …, <table>, <groupingColumn>, [<groupingColumn>] … [filterTable] …)
-
ALL( {<table> | <column>, [<column>], [<column>] …} )
-
ALLEXCEPT(<table>, <column>, [<column>] …)
-
ALLNOBLANKROW(<table>|<column>)
-
ALLSELECTED([<tableName> | <columnName>])
-
计算(<表达式>、<过滤器1>、<过滤器2>…)
-
CALCULATETABLE (<表达式>, <filter1>, <filter2>…)
-
CROSSFILTER (<columnName1>, <columnName2>, <direction>)
-
DISTINCT (<列>)
-
早期(<列>,<编号>)
-
最早(<列>)
-
过滤器(<表>,<过滤器>)
-
过滤器(<列名>)
-
HASONEFILTER(<列名>)
-
HASONEVALUE(<列名>)
-
ISCROSSFILTERED (<columnName>)
-
已过滤 (<columnName>)
-
KEEPFILTERS (<表达式>)
-
相关(<列>)
-
相关表(<表名>)
-
SUBSTITUTEWITHINDEX (<table>, <indexColumnName>, <indexColumnsTable>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]] …])
-
USERELATIONSHIP(<columnName1>,<columnName2>)
-
值(<表名或列名>)
DAX 时间智能函数
DAX 时间智能函数返回日期表或使用日期表来计算聚合。这些 DAX 函数使您能够使用时间段(包括天、月、季度和年)操作数据,从而帮助您创建支持商业智能分析需求的计算。
以下是一些 DAX 时间智能功能 –
-
CLOSINGBALANCEMONTH (<表达式>,<日期>[,<过滤器>])
-
CLOSINGBALANCEQUARTER(<表达式>、<日期>、[<过滤器>])
-
CLOSINGBALANCEYEAR (<表达式>,<日期>, [<过滤器>], [<年终日期>])
-
DATEADD (<日期>,<number_of_intervals>, <interval>)
-
DATESBETWEEN (<dates>,<start_date>,<end_date>)
-
DATESINPERIOD (<dates>,<start_date>, <number_of_intervals>,<interval>)
-
DATESMTD(<日期>)
-
DATESQTD (<日期>)
-
DATESYTD (<dates>, [<year_end_date>])
-
ENDOFMONTH(<日期>)
-
ENDOFQUARTER(<日期>)
-
ENDOFYEAR (<dates> , [<year_end_date>])
-
第一天(<日期>)
-
FIRSTNONBLANK (<列>,<表达式>)
-
上次日期(<日期>)
-
LASTNONBLANK (<列>,<表达式>)
-
次日(<日期>)
-
下个月(<日期>)
-
下一季度(<日期>)
-
NEXTYEAR (<dates>, [<year_end_date>])
-
OPENINGBALANCEMONTH (<表达式>,<日期>, [<过滤器>])
-
OPENINGBALANCEQUARTER(<表达式>、<日期>、[<过滤器>])
-
OPENINGBALANCEYEAR(<表达式>、<日期>、[<过滤器>]、[<年终日期>])
-
PARALLELPERIOD (<dates>,<number_of_intervals>, <interval>)
-
前一天(<日期>)
-
上个月(<日期>)
-
上一季度(<日期>)
-
上一年 (<dates>, [<year_end_date>])
-
SAMEPERIODLASTYEAR(<日期>)
-
STARTOFMONTH(<日期>)
-
STARTOFQUARTER(<日期>)
-
STARTOFYEAR(<日期>)
-
TOTALMTD (<表达式>,<日期>, [<过滤器>])
-
TOTALQTD(<表达式>,<日期>, [<过滤器>])
-
TOTALYTD(<表达式>,<日期>, [<过滤器>], [<year_end_date>])
DAX 日期和时间函数
DAX 日期和时间函数类似于 Excel 日期和时间函数。但是,DAX 日期和时间函数基于 DAX 的日期时间数据类型。
以下是 DAX 日期和时间函数 –
- 日期(<年>,<月>,<日>)
- 日期值(日期文本)
- DAY(<日期>)
- EDATE(<开始日期>, <月>)
- EOMONTH(<开始日期>, <月>)
- 小时(<日期时间>)
- 分钟(<日期时间>)
- MONTH(<日期时间>)
- 现在()
- 第二(<时间>)
- TIME(时、分、秒)
- 时间值(时间文本)
- 今天()
- WEEKDAY(<日期>, <返回类型>)
- WEEKNUM(<日期>, <返回类型>)
- 年(<日期>)
- YEARFRAC(<开始日期>, <结束日期>, <基础>)
DAX 信息函数
DAX 信息函数查看作为参数提供的单元格或行,并告诉您该值是否与预期类型匹配。
以下是一些 DAX 信息功能 –
-
包含 (<table>, <columnName>, <value>, [<columnName>, <value>]…)
-
自定义数据()
-
ISBLANK(<值>)
-
ISERROR(<值>)
-
ISEVEN(数)
-
ISLOGICAL(<值>)
-
ISNONTEXT(<值>)
-
ISNUMBER(<值>)
-
ISONORAFTER (<scalar_expression>, <scalar_expression>, [sort_order], [<scalar_expression>, <scalar_expression>, [sort_order]]…)
-
ISTEXT(<值>)
-
LOOKUPVALUE(<result_columnName>、<search_columnName>、<search_value>、[<search_columnName>、<search_value>]…)
-
用户名()
DAX 逻辑函数
DAX 逻辑函数返回有关表达式中值的信息。例如,DAX TRUE 函数让您知道您正在评估的表达式是否返回 TRUE 值。
以下是 DAX 逻辑函数 –
- AND(<逻辑 1>,<逻辑 2>)
- 错误的()
- IF(logical_test>,<value_if_true>, value_if_false)
- IFERROR(value, value_if_error)
- 非(<逻辑>)
- 或(<逻辑1>,<逻辑2>)
- SWITCH(<表达式>, <值>, <结果>, [<值>, <结果>]…, [<else>])
- 真的()
DAX 数学和三角函数
DAX 数学和三角函数与 Excel 数学和三角函数非常相似。
以下是一些 DAX 数学和三角函数 –
- ABS(<编号>)
- ACOS(数量)
- ACOSH(人数)
- ASIN(数量)
- ASINH(数量)
- ATAN(数量)
- ATANH(数量)
- 天花板(<数字>,<重要性>)
- 组合(号码,号码_选择)
- 组合(号码,号码_选择)
- COS(数)
- COSH(人数)
- 货币(<值>)
- DEGREES(角度)
- DIVIDE(<分子>, <分母>, [<alternateresult>])
- 偶数(数字)
- 经验(<数量>)
- 事实(<数字>)
- 楼层(<数字>,<意义>)
- GCD(number1, [number2], …)
- INT(<数字>)
- ISO.CEILING(<number>, [<significance>])
- LCM(number1, [number2], …)
- LN(<编号>)
- LOG(<数字>,<基数>)
- LOG10(<编号>)
- INT(<数字>)
- MROUND(<number>, <multiple>)
- 奇数)
- PI()
- 功率(<数字>, <功率>)
- 产品(<列>)
- PRODUCTX(<表>, <表达式>)
- QUOTIENT(<分子>, <分母>)
- 弧度(角度)
- 兰德()
- 随机(<底部>,<顶部>)
- ROUND(<number>, <num_digits>)
- ROUNDDOWN(<number>, <num_digits>)
- ROUNDUP(<number>, <num_digits>)
- SIN(号码)
- SINH(号码)
- 签名(<数字>)
- SQRT(<编号>)
- SUM(<列>)
- SUMX(<表>, <表达式>)
- 谭(号码)
- TANH(数量)
- TRUNC(<number>,<num_digits>)
DAX 其他功能
这些 DAX 函数执行独特的操作,大多数其他函数所属的任何类别都无法定义这些操作。
以下是一些 DAX 其他功能 –
-
EXCEPT(<table_expression1>, <table_expression2>
-
GROUPBY (<table>, [<groupBy_columnName1>], [<name>, <expression>] … )
-
INTERSECT(<table_expression1>, <table_expression2>)
-
ISEMPTY(<table_expression>)
-
NATURALINNERJOIN(<leftJoinTable>, <rightJoinTable>)
-
NATURALLEFTOUTERJOIN(<leftJoinTable>, <rightJoinTable>)
-
SUMMARIZECOLUMNS (<groupBy_columnName>, [<groupBy_columnName>]…, [<filterTable>] …, [<name>, <expression>]…)
-
UNION (<table_expression1>, <table_expression2>, [<table_expression>]…)
-
VAR <名称> = <表达式>
DAX 父子函数
DAX 父子函数可用于管理在数据模型中显示为父/子层次结构的数据。
以下是一些 DAX 父子函数 –
- PATH(<ID_columnName>, <parent_columnName>)
- PATHCONTAINS(<路径>, <项目>)
- PATHITEM(<路径>, <位置>, [<类型>])
- PATHITEMREVERSE(<路径>, <位置>, [<类型>])
- 路径长度(<路径>)
DAX 统计函数
DAX 统计函数与 Excel 统计函数非常相似。
以下是一些 DAX 统计函数 –
-
BETA.DIST(x, alpha, beta, 累积,[A],[B])
-
BETA.INV(概率, alpha, beta,[A],[B])
-
CHISQ.INV(概率,deg_freedom)
-
CHISQ.INV.RT(概率,deg_freedom)
-
信心.规范(alpha,standard_dev,大小)
-
信心.T(alpha,standard_dev,大小)
-
数据表 (ColumnName1, DataType1, ColumnName2, DataType2 …, {{Value1, Value2…}, {ValueN, ValueN+1…}…})
-
EXPON.DIST(x, lambda, 累积)
-
GEOMEAN(<列>)
-
GEOMEANX(<表>, <表达式>)
-
中位数(<列>)
-
MEDIANX(<表>, <表达式>)
-
PERCENTILE.EXC(<列>, <k>)
-
PERCENTILE.INC(<列>, <k>)
-
PERCENTILEX.EXC(<表>, <表达式>, k)
-
PERCENTILEX.EXC(<表>, <表达式>, k)
-
POISSON.DIST(x,平均值,累积)
-
RANK.EQ(<value>, <columnName>[, <order>])
-
RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])
-
SAMPLE (<n_value>, <table>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]]…)
-
STDEV.P(<列名>)
-
STDEV.S(<列名>)
-
STDEVX.P(<表>, <表达式>)
-
STDEVX.S(<表>, <表达式>)
-
SQRTPI(数量)
-
VAR.P(<列名>)
-
VAR.S(<列名>)
-
VARX.P(<表>, <表达式>)
-
VARX.S(<表>, <表达式>)
-
XIRR(<table>, <values>, <dates>, [guess])
-
XNPV(<table>, <values>, <dates>, <rate>)
DAX 文本函数
DAX 文本函数适用于表和列。使用 DAX 文本函数,您可以返回字符串的一部分、搜索字符串中的文本或连接字符串值。您还可以控制日期、时间和数字的格式。
以下是一些 DAX 文本函数 –
- 空白的()
- 代码(文本)
- 连接(<文本1>,<文本2>)
- CONCATATEX(<table>, <expression>, [delimiter])
- 精确(<文本1>,<文本2>)
- FIND(<find_text>, <within_text>, [<start_num>], [<NotFoundValue>])
- 固定(<数字>,<小数>,<无逗号>)
- 格式(<值>,<格式字符串>)
- 左(<文本>,<num_chars>)
- LEN(<文本>)
- 降低(<文本>)
- MID(<text>, <start_num>, <num_chars>)
- REPLACE(<old_text>, <start_num>, <num_chars>, <new_text>)
- REPT(<text>, <num_times>)
- 右(<文本>,<num_chars>)
- 搜索(<find_text>, <within_text>, [<start_num>], [<NotFoundValue>])
- 替换(<文本>,<旧文本>,<新文本>,<实例编号>)
- 修剪(<文本>)
- 上 (<文本>)
- 值(<文本>)