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中的datetime数据类型,但在Excel中没有。

  • Excel没有返回表的函数,但某些函数可以使用数组。许多DAX函数可以轻松引用完整的表和列来执行计算并返回表或值列。DAX的这种能力增强了Power Pivot、Power View和Power BI的功能,DAX在其中得到使用。

  • 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查找函数通过使用表及其之间的关系来工作。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的datetime数据类型。

以下是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 父子函数可用于管理数据模型中以父子层次结构呈现的数据。

以下是某些 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>)
广告