Excel DAX - 函数
大多数 DAX 函数 具有与 Excel 函数相同的名称和功能。 但是,DAX 函数已被修改为使用 DAX 数据类型并处理表和列。
DAX 有一些 Excel 中没有的附加功能。 这些 DAX 函数是为特定目的而提供的,例如基于与数据模型的关系数据库方面相关的关系进行查找、迭代表以执行递归计算、执行动态聚合以及利用时间智能进行计算的能力。< /p>
在本章中,您将了解 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>] …)
AVERAGE (<column>)
AVERAGEA (<column>)
AVERAGEX (<table>, <expression>)
COUNT (<column>)
COUNTA (<column>)
COUNTAX (<table>, <expression>)
COUNTBLANK (<column>)
COUNTROWS (<table>)
COUNTX (<table>, <expression>)
CROSSJOIN (<table1>, <table2>, [<table3>] …)
DISTINCTCOUNT (<column>)
GENERATE (<table1>, <table2>)
GENERATEALL (<table1>, <table2>)
MAX (<column>)
MAXA (<column>)
MAXX (<table>, <expression>)
MIN (<column>)
MINA (<column>)
MINX (<table>, <expression>)
PRODUCT (<column>)
PRODUCTX (<table>, <expression>)
ROW (<name>, <expression>, [<name>, <expression>] …)
SELECTCOLUMNS (<table>, <name>, <scalar_expression>,
[<name>, <scalar_expression>] …)
SUM (<column>)
SUMMARIZE (<table>, <groupBy_columnName>, [<groupBy_columnName>] …, [<name>, <expression>] …)
SUMX (<table>, <expression>)
TOPN (<n_value>, <table>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]] …)
DAX 过滤器函数
DAX 过滤器函数返回与当前行相关的列、表或值。 您可以使用 DAX 筛选器函数返回特定数据类型、在相关表中查找值并按相关值进行筛选。 DAX Lookup 函数通过使用表和它们之间的关系来工作。 DAX 过滤器函数使您能够操纵数据上下文以创建动态计算。
以下是一些 DAX 过滤器函数 −
ADDMISSINGITEMS(<showAllColumn>, [<showAllColumn>] …, <table>, <groupingColumn>, [<groupingColumn>] … [filterTable] …)
ALL( {<table> | <column>, [<column>], [<column>] …} )
ALLEXCEPT(<table>, <column>, [<column>] …)
ALLNOBLANKROW(<table>|<column>)
ALLSELECTED([<tableName> | <columnName>])
CALCULATE (<expression>, <filter1>, <filter2>…)
CALCULATETABLE (<expression>, <filter1>, <filter2>…)
CROSSFILTER (<columnName1>, <columnName2>, <direction>)
DISTINCT (<column>)
EARLIER(<column>, <number>)
EARLIEST(<column>)
FILTER(<table>,<filter>)
FILTERS(<columnName>)
HASONEFILTER(<columnName>)
HASONEVALUE(<columnName>)
ISCROSSFILTERED (<columnName>)
ISFILTERED (<columnName>)
KEEPFILTERS (<expression>)
RELATED(<column>)
RELATEDTABLE(<tableName>)
SUBSTITUTEWITHINDEX (<table>, <indexColumnName>, <indexColumnsTable>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]] …])
USERELATIONSHIP(<columnName1>,<columnName2>)
VALUES(<TableNameOrColumnName>)
DAX 时间智能函数
DAX 时间智能函数返回日期表或使用日期表来计算聚合。 这些 DAX 函数使您能够使用时间段(包括日、月、季度和年)来处理数据,从而帮助您创建支持商业智能分析需求的计算。
以下是一些 DAX 时间智能函数 −
CLOSINGBALANCEMONTH (<expression>,<dates>[,<filter>])
CLOSINGBALANCEQUARTER (<expression>,<dates>, [<filter>])
CLOSINGBALANCEYEAR (<expression>,<dates>, [<filter>], [<year_end_date>])
DATEADD (<dates>,<number_of_intervals>, <interval>)
DATESBETWEEN (<dates>,<start_date>,<end_date>)
DATESINPERIOD (<dates>,<start_date>, <number_of_intervals>,<interval>)
DATESMTD (<dates>)
DATESQTD (<dates>)
DATESYTD (<dates>, [<year_end_date>])
ENDOFMONTH (<dates>)
ENDOFQUARTER (<dates>)
ENDOFYEAR (<dates> , [<year_end_date>])
FIRSTDATE (<dates>)
FIRSTNONBLANK (<column>,<expression>)
LASTDATE (<dates>)
LASTNONBLANK (<column>,<expression>)
NEXTDAY (<dates>)
NEXTMONTH (<dates>)
NEXTQUARTER (<dates>)
NEXTYEAR (<dates>, [<year_end_date>])
OPENINGBALANCEMONTH (<expression>,<dates>, [<filter>])
OPENINGBALANCEQUARTER (<expression>,<dates>, [<filter>])
OPENINGBALANCEYEAR (<expression>,<dates>, [<filter>], [<year_end_date>])
PARALLELPERIOD (<dates>,<number_of_intervals>, <interval>)
PREVIOUSDAY(<dates>)
PREVIOUSMONTH(<dates>)
PREVIOUSQUARTER(<dates>)
PREVIOUSYEAR (<dates>, [<year_end_date>])
SAMEPERIODLASTYEAR(<dates>)
STARTOFMONTH(<dates>)
STARTOFQUARTER(<dates>)
STARTOFYEAR(<dates>)
TOTALMTD (<expression>,<dates>, [<filter>])
TOTALQTD(<expression>,<dates>, [<filter>])
TOTALYTD(<expression>,<dates>, [<filter>], [<year_end_date>])
DAX 日期和时间函数
DAX 日期和时间函数类似于 Excel 日期和时间函数。 但是,DAX 日期和时间函数基于 DAX 的日期时间数据类型。
以下是 DAX 日期和时间函数 −
- DATE(<year>, <month>, <day>)
- DATEVALUE(date_text)
- DAY(<date>)
- EDATE(<start_date>, <months>)
- EOMONTH(<start_date>, <months>)
- HOUR(<datetime>)
- MINUTE(<datetime>)
- MONTH(<datetime>)
- NOW()
- SECOND(<time>)
- TIME(hour, minute, second)
- TIMEVALUE(time_text)
- TODAY()
- WEEKDAY(<date>, <return_type>)
- WEEKNUM(<date>, <return_type>)
- YEAR(<date>)
- YEARFRAC(<start_date>, <end_date>, <basis>)
DAX 信息函数
DAX 信息函数查看作为参数提供的单元格或行,并告诉您该值是否与预期类型匹配。
以下是一些DAX 信息函数 −
CONTAINS (<table>, <columnName>, <value>, [<columnName>, <value>]…)
CUSTOMDATA()
ISBLANK(<value>)
ISERROR(<value>)
ISEVEN(number)
ISLOGICAL(<value>)
ISNONTEXT(<value>)
ISNUMBER(<value>)
ISONORAFTER (<scalar_expression>, <scalar_expression>, [sort_order], [<scalar_expression>, <scalar_expression>, [sort_order]]…)
ISTEXT(<value>)
LOOKUPVALUE (<result_columnName>, <search_columnName>, <search_value>, [<search_columnName>, <search_value>]…)
USERNAME()
DAX 逻辑函数
DAX 逻辑函数返回有关表达式中值的信息。 例如,DAX TRUE 函数可让您了解您正在评估的表达式是否返回 TRUE 值。
以下是 DAX 逻辑函数 −
- AND(<logical1>,<logical2>)
- FALSE()
- IF(logical_test>,<value_if_true>, value_if_false)
- IFERROR(value, value_if_error)
- NOT(<logical>)
- OR(<logical1>,<logical2>)
- SWITCH(<expression>, <value>, <result>, [<value>, <result>]…, [<else>])
- TRUE()
DAX 数学和三角函数
DAX 数学函数和三角函数与 Excel 数学函数和三角函数非常相似。
以下是一些 DAX 数学和三角函数 −
- ABS(<number>)
- ACOS(number)
- ACOSH(number)
- ASIN(number)
- ASINH(number)
- ATAN(number)
- ATANH(number)
- CEILING(<number>, <significance>)
- COMBIN(number, number_chosen)
- COMBINA(number, number_chosen)
- COS(number)
- COSH(number)
- CURRENCY(<value>)
- DEGREES(angle)
- DIVIDE(<numerator>, <denominator>, [<alternateresult>])
- EVEN(number)
- EXP(<number>)
- FACT(<number>)
- FLOOR(<number>, <significance>)
- GCD(number1, [number2], ...)
- INT(<number>)
- ISO.CEILING(<number>, [<significance>])
- LCM(number1, [number2], ...)
- LN(<number>)
- LOG(<number>,<base>)
- LOG10(<number>)
- INT(<number>)
- MROUND(<number>, <multiple>)
- ODD(number)
- PI()
- POWER(<number>, <power>)
- PRODUCT(<column>)
- PRODUCTX(<table>, <expression>)
- QUOTIENT(<numerator>, <denominator>)
- RADIANS(angle)
- RAND()
- RANDBETWEEN(<bottom>,<top>)
- ROUND(<number>, <num_digits>)
- ROUNDDOWN(<number>, <num_digits>)
- ROUNDUP(<number>, <num_digits>)
- SIN(number)
- SINH(number)
- SIGN(<number>)
- SQRT(<number>)
- SUM(<column>)
- SUMX(<table>, <expression>)
- TAN(number)
- TANH(number)
- 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 <name> = <expression>
DAX 父子函数
DAX Parent 和 Child 函数可用于管理在数据模型中显示为父/子层次结构的数据。
以下是一些 DAX 父子函数 −
- PATH(<ID_columnName>, <parent_columnName>)
- PATHCONTAINS(<path>, <item>)
- PATHITEM(<path>, <position>, [<type>])
- PATHITEMREVERSE(<path>, <position>, [<type>])
- PATHLENGTH(<path>)
DAX 统计函数
DAX 统计函数与 Excel 统计函数非常相似。
以下是一些 DAX 统计函数 −
BETA.DIST(x, alpha, beta, cumulative,[A],[B])
BETA.INV(probability, alpha, beta,[A],[B])
CHISQ.INV(probability, deg_freedom)
CHISQ.INV.RT(probability, deg_freedom)
CONFIDENCE.NORM(alpha, standard_dev, size)
CONFIDENCE.T(alpha, standard_dev, size)
DATATABLE (ColumnName1, DataType1, ColumnName2, DataType2 ..., {{Value1, Value2...}, {ValueN, ValueN+1...}...})
EXPON.DIST(x, lambda, cumulative)
GEOMEAN(<column>)
GEOMEANX(<table>, <expression>)
MEDIAN(<column>)
MEDIANX(<table>, <expression>)
PERCENTILE.EXC(<column>, <k>)
PERCENTILE.INC(<column>, <k>)
PERCENTILEX.EXC(<table>, <expression>, k)
PERCENTILEX.EXC(<table>, <expression>, k)
POISSON.DIST(x, mean, cumulative)
RANK.EQ(<value>, <columnName>[, <order>])
RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])
SAMPLE (<n_value>, <table>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]]…)
STDEV.P(<ColumnName>)
STDEV.S(<ColumnName>)
STDEVX.P(<table>, <expression>)
STDEVX.S(<table>, <expression>)
SQRTPI(number)
VAR.P(<columnName>)
VAR.S(<columnName>)
VARX.P(<table>, <expression>)
VARX.S(<table>, <expression>)
XIRR(<table>, <values>, <dates>, [guess])
XNPV(<table>, <values>, <dates>, <rate>)
DAX 文本函数
DAX 文本函数适用于表和列。 使用 DAX 文本函数,您可以返回字符串的一部分、在字符串中搜索文本或连接字符串值。 您还可以控制日期、时间和数字的格式。
以下是一些 DAX 文本函数 −
- BLANK()
- CODE(text)
- CONCATENATE(<text1>, <text2>)
- CONCATENATEX(<table>, <expression>, [delimiter])
- EXACT(<text1>,<text2>)
- FIND(<find_text>, <within_text>, [<start_num>], [<NotFoundValue>])
- FIXED(<number>, <decimals>, <no_commas>)
- FORMAT(<value>, <format_string>)
- LEFT(<text>, <num_chars>)
- LEN(<text>)
- LOWER(<text>)
- MID(<text>, <start_num>, <num_chars>)
- REPLACE(<old_text>, <start_num>, <num_chars>, <new_text>)
- REPT(<text>, <num_times>)
- RIGHT(<text>, <num_chars>)
- SEARCH(<find_text>, <within_text>, [<start_num>], [<NotFoundValue>])
- SUBSTITUTE(<text>, <old_text>, <new_text>, <instance_num>)
- TRIM(<text>)
- UPPER (<text>)
- VALUE(<text>)