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 函数具有相同的名称和相同的一般Behave。

  • 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 (<表>, <名称>, <表达式>, [<名称>, <表达式>] …)

  • 平均值(<列>)

  • 平均值(<列>)

  • AVERAGEX (<表>, <表达式>)

  • 计数(<列>)

  • COUNTA(<列>)

  • COUNTAX (<表>, <表达式>)

  • 计数空白(<列>)

  • COUNTROWS(<表>)

  • COUNTX (<表>, <表达式>)

  • CROSSJOIN(<表1>,<表2>,[<表3>] …)

  • 不同计数(<列>)

  • 生成(<表1>,<表2>)

  • GENERATEALL(<表1>,<表2>)

  • 最大值(<列>)

  • MAXA(<列>)

  • MAXX (<表>, <表达式>)

  • 最小值(<列>)

  • 米娜(<栏>)

  • MINX (<表>, <表达式>)

  • 产品(<列>)

  • PRODUCTX (<表>, <表达式>)

  • ROW (<名称>, <表达式>, [<名称>, <表达式>] …)

  • SELECTCOLUMNS (<表>, <名称>, <标量表达式>,

  • [<名称>, <标量表达式>] ...)

  • 总和(<列>)

  • SUMMARIZE (<表>, <groupBy_columnName>, [<groupBy_columnName>] …, [<名称>, <表达式>] …)

  • 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( {<表> | <列>, [<列>], [<列>] …} )

  • ALLEXCEPT(<表>, <列>, [<列>] …)

  • ALLNOBLANKROW(<表>|<列>)

  • ALLSELECTED([<表名> | <列名>])

  • 计算(<表达式>、<过滤器1>、<过滤器2>...)

  • 计算表(<表达式>、<过滤器1>、<过滤器2>...)

  • CROSSFILTER(<列名称1>、<列名称2>、<方向>)

  • 独特(<列>)

  • 早期(<列>,<数字>)

  • 最早的(<列>)

  • 过滤器(<表>,<过滤器>)

  • 过滤器(<列名称>)

  • HASONEFILTER(<列名称>)

  • HASONEVALUE(<列名称>)

  • 交叉过滤(<列名称>)

  • ISFILTERED(<列名称>)

  • KEEPFILTERS (<表达式>)

  • 相关(<列>)

  • RELATEDTABLE(<表名>)

  • SUBSTITUTEWITHINDEX (<表>, <索引列名称>, <索引列表>, <orderBy_表达式>, [<order>], [<orderBy_表达式>, [<order>]] …])

  • USERELATIONSHIP(<列名1>,<列名2>)

  • VALUES(<表名或列名>)

DAX 时间智能函数

DAX 时间智能函数返回日期表或使用日期表来计算聚合。这些 DAX 函数使您能够使用时间段(包括日、月、季度和年)操作数据,从而帮助您创建支持商业智能分析需求的计算。

以下是一些 DAX 时间智能功能 -

  • CLOSINGBALANCEMONTH (<表达式>,<日期>[,<过滤器>])

  • CLOSINGBALANCEQUARTER (<表达式>,<日期>, [<过滤器>])

  • CLOSINGBALANCEYEAR (<表达式>,<日期>, [<过滤器>], [<年结束日期>])

  • DATEADD (<日期>,<间隔数>, <间隔>)

  • DATESBETWEEN (<日期>,<开始日期>,<结束日期>)

  • DATESINPERIOD (<日期>,<开始日期>,<间隔数>,<间隔>)

  • DATESMTD(<日期>)

  • DATESQTD(<日期>)

  • DATESYTD (<日期>, [<年结束日期>])

  • 月末(<日期>)

  • 季度末(<日期>)

  • ENDOFYEAR(<日期>,[<年结束日期>])

  • 第一次约会(<日期>)

  • FIRSTNONBLANK (<列>,<表达式>)

  • 最后日期(<日期>)

  • LASTNONBLANK (<列>,<表达式>)

  • 第二天(<日期>)

  • 下个月(<日期>)

  • 下季度(<日期>)

  • NEXTYEAR(<日期>,[<年结束日期>])

  • OPENINGBALANCEMONTH (<表达式>,<日期>, [<过滤器>])

  • OPENINGBALANCEQUARTER (<表达式>,<日期>, [<过滤器>])

  • OPENINGBALANCEYEAR (<表达式>,<日期>, [<过滤器>], [<年结束日期>])

  • PARALLELPERIOD(<日期>、<间隔数>、<间隔>)

  • 前一天(<日期>)

  • 上个月(<日期>)

  • 上一季度(<日期>)

  • 上一年(<日期>,[<年结束日期>])

  • SAMEPERIODLASTYEAR(<日期>)

  • STARTOFMONTH(<日期>)

  • 季度开始时间(<日期>)

  • 年初(<日期>)

  • TOTALMTD (<表达式>,<日期>, [<过滤器>])

  • TOTALQTD(<表达式>,<日期>, [<过滤器>])

  • TOTALYTD(<表达式>,<日期>, [<过滤器>], [<年结束日期>])

DAX 日期和时间函数

DAX 日期和时间函数与 Excel 日期和时间函数类似。但是,DAX 日期和时间函数基于 DAX 的日期时间数据类型。

以下是 DAX 日期和时间函数 -

  • 日期(<年>、<月>、<日>)
  • 日期值(日期文本)
  • DAY(<日期>)
  • EDATE(<开始日期>, <月份>)
  • EOMONTH(<开始日期>, <月份>)
  • 小时(<日期时间>)
  • 分钟(<日期时间>)
  • 月(<日期时间>)
  • 现在()
  • 第二(<时间>)
  • TIME(时、分、秒)
  • 时间值(时间文本)
  • 今天()
  • 工作日(<日期>,<返回类型>)
  • WEEKNUM(<日期>, <返回类型>)
  • 年(<日期>)
  • YEARFRAC(<开始日期>, <结束日期>,​​ <基础>)

DAX 信息功能

DAX 信息函数查看作为参数提供的单元格或行,并告诉您该值是否与预期类型匹配。

以下是一些 DAX 信息功能 -

  • 包含(<表>、<列名称>、<值>、[<列名称>、<值>]...)

  • 自定义数据()

  • ISBLANK(<值>)

  • ISEROR(<值>)

  • ISEVEN(数字)

  • ISLOGICAL(<值>)

  • ISNOTEXT(<值>)

  • ISNUMBER(<值>)

  • ISONORAFTER (<标量表达式>, <标量表达式>, [排序顺序], [<标量表达式>, <标量表达式>, [排序顺序]]...)

  • ISTEXT(<值>)

  • LOOKUPVALUE (<结果列名称>, <搜索列名称>, <搜索值>, [<搜索列名称>, <搜索值>]...)

  • 用户名()

DAX 逻辑函数

DAX 逻辑函数返回有关表达式中的值的信息。例如,DAX TRUE 函数可让您知道正在计算的表达式是否返回 TRUE 值。

以下是 DAX 逻辑函数 -

  • AND(<逻辑 1>,<逻辑 2>)
  • 错误的()
  • IF(逻辑测试>,<值_如果_真>,值_如果_假)
  • IFERROR(值, value_if_error)
  • NOT(<逻辑>)
  • OR(<逻辑 1>,<逻辑 2>)
  • SWITCH(<表达式>, <值>, <结果>, [<值>, <结果>]…, [<其他>])
  • 真的()

DAX 数学和三角函数

DAX 数学和三角函数与 Excel 数学和三角函数非常相似。

以下是一些 DAX 数学和三角函数 -

  • ABS(<数字>)
  • ACOS(数量)
  • ACOSH(数量)
  • ASIN(号码)
  • ASINH(数量)
  • ATAN(数量)
  • ATANH(数量)
  • CEILING(<数字>, <意义>)
  • COMBIN(数字, number_chosen)
  • COMBINA(数字, number_chosen)
  • COS(数量)
  • 香港吸烟与健康委员会(数目)
  • 货币(<值>)
  • 度(角度)
  • DIVIDE(<分子>, <分母>, [<替代结果>])
  • 偶数(数字)
  • EXP(<数字>)
  • 事实(<数字>)
  • FLOOR(<数字>, <意义>)
  • GCD(数字 1, [数字 2], ...)
  • INT(<数字>)
  • ISO.CEILING(<数字>, [<重要性>])
  • LCM(数字 1, [数字 2], ...)
  • LN(<数字>)
  • LOG(<数字>,<基数>)
  • LOG10(<数字>)
  • INT(<数字>)
  • MROUND(<数字>, <多个>)
  • 奇数)
  • PI()
  • POWER(<数字>, <功率>)
  • 产品(<列>)
  • PRODUCTX(<表>, <表达式>)
  • 商(<分子>, <分母>)
  • 弧度(角度)
  • 兰德()
  • RANDBETWEEN(<底部>,<顶部>)
  • ROUND(<数字>, <数字位数>)
  • ROUNDDOWN(<数字>, <数字数字>)
  • ROUNDUP(<数字>, <数字数字>)
  • SIN(号码)
  • SINH(数量)
  • SIGN(<数字>)
  • SQRT(<数字>)
  • SUM(<列>)
  • SUMX(<表>, <表达式>)
  • TAN(数字)
  • TANH(数字)
  • TRUNC(<数字>,<数字位数>)

DAX其他功能

这些 DAX 函数执行无法由大多数其他函数所属的任何类别定义的独特操作。

以下是一些 DAX 其他功能 -

  • EXCEPT(<表表达式1>, <表表达式2>

  • GROUPBY (<表>, [<groupBy_columnName1>], [<名称>, <表达式>] ... )

  • INTERSECT(<表表达式1>, <表表达式2>)

  • ISEMPTY(<表表达式>)

  • NATURALINNERJOIN(<leftJoinTable>, <rightJoinTable>)

  • NATURALLEFTOUTERJOIN(<leftJoinTable>, <rightJoinTable>)

  • SUMMARIZECOLUMNS (<groupBy_columnName>, [<groupBy_columnName>]..., [<filterTable>] ..., [<name>, <expression>]...)

  • UNION (<表表达式1>, <表表达式2>, [<表表达式>]...)

  • VAR <名称> = <表达式>

DAX 父函数和子函数

DAX 父函数和子函数可用于管理在数据模型中作为父/子层次结构呈现的数据。

以下是一些 DAX 父函数和子函数 -

  • PATH(<ID_列名称>, <父列名称>)
  • 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)

  • CONFIDENCE.NORM(alpha, standard_dev, 大小)

  • CONFIDENCE.T(alpha, standard_dev, 大小)

  • 数据表(列名称1、数据类型1、列名称2、数据类型2 ...、{{值1、值2...}、{值N、值N+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(<值>, <列名称>[, <顺序>])

  • RANKX(<表>, <表达式>[, <值>[, <顺序>[, <关系>]]])

  • 示例(<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(<表>, <值>, <日期>, [猜测])

  • XNPV(<表>, <值>, <日期>, <比率>)

DAX 文本函数

DAX 文本函数适用于表和列。使用 DAX Text 函数,您可以返回字符串的一部分、搜索字符串中的文本或连接字符串值。您还可以控制日期、时间和数字的格式。

以下是一些 DAX 文本函数 -

  • 空白的()
  • 代码(文本)
  • 连接(<文本1>,<文本2>)
  • CONCATATEX(<表>, <表达式>, [分隔符])
  • 精确(<文本1>,<文本2>)
  • FIND(<查找文本>, <文本内>, [<起始编号>], [<NotFoundValue>])
  • FIXED(<数字>, <小数>, <无逗号>)
  • FORMAT(<值>, <格式字符串>)
  • LEFT(<文本>, <字符数>)
  • LEN(<文本>)
  • 下(<文本>)
  • MID(<文本>, <起始编号>, <字符数>)
  • REPLACE(<旧文本>, <起始编号>, <字符数>, <新文本>)
  • REPT(<文本>, <次数>)
  • 右(<文本>,<字符数>)
  • SEARCH(<find_text>, <within_text>, [<start_num>], [<NotFoundValue>])
  • SUBSTITUTE(<文本>, <旧文本>, <新文本>, <实例编号>)
  • 修剪(<文本>)
  • 上部(<文本>)
  • 值(<文本>)