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公式./p>

DAX聚合函数


DAX聚合函数聚合表中各行的任何表达式,在计算中很有用.

以下是一些DAX聚合函数 :


  • ADDCOLUMNS(< table>,< name>,< expression>,[< name>,< expression&gt ;] ...)

  • 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&gt ;,< table2>)

  • MAX(< column>)

  • MAXA(< column>)

  • MAXX(< table>,< expression>)

  • MIN(< column>)

  • MINA(< column>)

  • MINX(< table>,< expression>)

  • PRODUCT(< column>)

  • PRODUCTX(< table>,< expression>)

  • ROW(< name>,< expression&gt ;,[< 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 Time Intelligence函数返回日期表或使用日期表来计算聚合.这些DAX功能可帮助您创建支持商业智能分析需求的计算,使您能够使用时间段(包括天,月,季度和年)来操纵数据.

以下是一些DAX时间智能函数 :


  • CLOSINGBALANCEMONTH(< expression>,< dates> [,< filter>])

  • CLOSINGBALANCEQUARTER(< expression>,< dates>,[< filter>])

  • CLOSINGBALANCEYEAR(< expression>,< ; date>,[< filter>],[< year_end_date>])

  • DATEADD(< dates>,< number_of_intervals>,<区间>)

  • DATESBETWEEN(< date>,< start_date>,< end_date>)

  • DATESINPERIOD(< date>,< start_date>,< number_of_intervals>,< inte rval>)

  • DATESMTD(< dates>)

  • DATESQTD(<dates>)

  • DATESYTD(< dates>,[< year_end_date>])

  • ENDOFMONTH(< date>)

  • 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(< date>,< number_of_intervals>,< interval>)

  • PREVIOUSDAY(<dates>)

  • PREVIOUSMONTH(< dates>)

  • P REVIOUSQUARTER(< dates>)

  • PREVIOUSYEAR(< dates>,[< year_end_date>])

  • SAMEPERIODLASTYEAR(< dates>)

  • STARTOFMONTH(< dates>)

  • STARTOFQUARTER(< dates>)

  • STARTOFYEAR(< dates>)

  • TOTALMTD(<expression>,< date>,[< 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&gt ;)

  • WEEKNUM(< date>,< return_type>)

  • YEAR(< date>)

  • YEARFRAC(< start_date>,< end_date>,< ba sis>)

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 Math和Trig函数 :


  • 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函数执行大多数其他函数所属的任何类别都无法定义的唯一操作to.

以下是一些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>)

  • SU MMARIZECOLUMNS(< 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 Text函数,您可以返回字符串的一部分,在字符串中搜索文本或连接字符串值.您还可以控制日期,时间和数字的格式.

以下是一些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>)