- 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 - 排名和比较值
- Excel DAX 有用资源
- DAX - 快速指南
- DAX - 有用资源
- 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中的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>)