📜  Excel DAX-函数

📅  最后修改于: 2020-12-01 04:43:50             🧑  作者: Mango


大多数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中但不是Excel中的datetime数据类型。

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

  • 平均(<列>)

  • AVERAGEA(<列>)

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

  • COUNT(<列>)

  • COUNTA(<列>)

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

  • COUNTBLANK(<列>)

  • COUNTROWS(<表>)

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

  • CROSSJOIN(,[]…)

  • DISTINCTCOUNT(<列>)

  • 生成()

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

  • 最大(<列>)

  • MAXA(<列>)

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

  • MIN(<列>)

  • MINA(<列>)

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

  • 产品(<列>)

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

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

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

  • []…)

  • SUM(<列>)

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

  • SUMX(<表格>,<表达式>)

  • TOPN(

    ,[],[,[]]…)

    DAX过滤器功能

    DAX筛选器函数返回与当前行相关的列,表或值。您可以使用DAX筛选器功能返回特定的数据类型,在相关表中查找值以及按相关值进行筛选。 DAX查找功能通过使用表及其之间的关系来工作。 DAX筛选器功能使您可以操纵数据上下文以创建动态计算。

    以下是一些DAX筛选器功能-

    • ADDMISSINGITEMS(,[]…,

    ,[]…[filterTable]…)

  • ALL({<表> | <列>,[<列>],[<列>]…})

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

  • ALLNOBLANKROW(<表> | <列>)

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

  • 计算(<表达式>,<过滤器1>,<过滤器2> …)

  • 可计算(<表达式>,<过滤器1>,<过滤器2> …)

  • 交叉过滤器()

  • DISTINCT(<列>)

  • EARLIER(<列>,<数字>)

  • 最早(<列>)

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

  • 过滤器(<列名称>)

  • HASONEFILTER(<列名称>)

  • HASONEVALUE(<列名称>)

  • ISCROSSFILTERED(<列名称>)

  • ISFILTERED(<列名称>)

  • KEEPFILTERS(<表达式>)

  • 相关(<列>)

  • RELATEDTABLE()

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

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

  • VALUES()

  • DAX时间智能功能

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

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

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

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

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

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

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

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

    • DATESMTD(<日期>)

    • DATESQTD(<日期>)

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

    • ENDOFMONTH(<日期>)

    • ENDOFQUARTER(<日期>)

    • ENDOFYEAR(,[])

    • FIRSTDATE(<日期>)

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

    • LASTDATE()

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

    • NEXTDAY(<日期>)

    • 下个月(<日期>)

    • NEXTQUARTER(<日期>)

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

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

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

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

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

    • PREVIOUSDAY(<日期>)

    • 上一个月(<日期>)

    • 上一个季度(<日期>)

    • PREVIOUSYEAR(<日期>,[<年末日期>])

    • SAMEPERIODLASTYEAR(<日期>)

    • STARTOFMONTH(<日期>)

    • STARTOFQUARTER(<日期>)

    • STARTOFYEAR(<日期>)

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

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

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

    DAX日期和时间功能

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

    以下是DAX日期和时间功能-

    • DATE(<年>,<月>,<天>)
    • DATEVALUE(date_text)
    • DAY(<日期>)
    • EDATE(<开始日期>,<月>)
    • EOMONTH(<开始日期>,<月份>)
    • HOUR(<日期时间>)
    • MINUTE(<日期时间>)
    • MONTH(<日期时间>)
    • 现在()
    • 秒(<时间>)
    • TIME(时,分,秒)
    • TIMEVALUE(time_text)
    • 今天()
    • WEEKDAY(<日期>,<返回类型>)
    • WEEKNUM(<日期>,<返回类型>)
    • 年()
    • YEARFRAC(<开始日期>,<结束日期>,<基础>)

    DAX信息功能

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

    以下是一些DAX信息功能-

    • 包含(<表>,<列名称>,<值>,[<列名称>,<值>] …)

    • CUSTOMDATA()

    • ISBLANK(<值>)

    • ISERROR(<值>)

    • ISEVEN(个)

    • ISLOGICAL(<值>)

    • ISNONTEXT(<值>)

    • ISNUMBER(<值>)

    • ISONORAFTER(,[sort_order],[,[sort_order]]…)

    • ISTEXT(<值>)

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

    • 用户名()

    DAX逻辑功能

    DAX逻辑函数返回有关表达式中值的信息。例如,DAX TRUE函数使您知道所求值的表达式是否返回TRUE值。

    以下是DAX逻辑功能-

    • AND(<逻辑1>,<逻辑2>)
    • 假()
    • IF(逻辑测试>,,value_if_false)
    • IFERROR(值,value_if_error)
    • NOT(<逻辑>)
    • OR(<逻辑1>,<逻辑2>)
    • 开关(<表达式>,<值>,<结果>,[<值>,<结果>]…,[<其他>])
    • 真正()

    DAX数学和Trig函数

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

    以下是一些DAX Math和Trig函数-

    • ABS(<数字>)
    • ACOS(编号)
    • ACOSH(数量)
    • ASIN(编号)
    • ASINH(数字)
    • ATAN(数字)
    • ATANH(编号)
    • CEILING(<数字>,<重要性>)
    • COMBIN(数字,数字选择)
    • COMBINA(数字,数字选择)
    • COS(数量)
    • COSH(个)
    • 货币(<值>)
    • 角度(角度)
    • DIVIDE(<分子>,<分母>,[])
    • 偶数
    • EXP(<数字>)
    • 事实(<数字>)
    • 地板(<数字>,<重要性>)
    • GCD(数字1,[数字2],…)
    • INT(<数字>)
    • ISO.CEILING(<数字>,[<重要性>])
    • LCM(数字1,[数字2],…)
    • LN(<数字>)
    • LOG(<数字>,<基数>)
    • LOG10(<数字>)
    • INT(<数字>)
    • MROUND()
    • 奇数)
    • PI()
    • POWER(<数字>,<功率>)
    • 产品(<列>)
    • PRODUCTX(<表格>,<表达式>)
    • QUOTIENT(<分子>,<分母>)
    • RADIANS(角度)
    • RAND()
    • RANDBETWEEN(<底部>,<顶部>)
    • ROUND(<数字>,<数字位数>)
    • ROUNDDOWN(<数字>,<数字位数>)
    • ROUNDUP(<数字>,<数字位数>)
    • SIN(数字)
    • SINH(数字)
    • SIGN(<数字>)
    • SQRT(<数字>)
    • SUM(<列>)
    • SUMX(<表>,<表达式>)
    • TAN(数字)
    • 罐(数量)
    • TRUNC(<数字>,<数字位数>)

    DAX其他功能

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

    以下是一些DAX其他功能-

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

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

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

    • ISEMPTY(<表表达式>)

    • NATURALINNERJOIN()

    • NATURALLEFTOUTERJOIN()

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

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

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

    DAX父子功能

    DAX父级和子级功能可用于管理在数据模型中以父级/子级层次结构形式显示的数据。

    以下是一些DAX父子功能-

    • PATH()
    • PATHCONTAINS(<路径>,<项目>)
    • PATHITEM(<路径>,<位置>,[<类型>])
    • PATHITEMREVERSE(<路径>,<位置>,[<类型>])
    • PATHLENGTH(<路径>)

    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,size)

    • DATATABLE(ColumnName1,DataType1,ColumnName2,DataType2 …,{{Value1,Value2 …},{ValueN,ValueN + 1 …} …})

    • EXPON.DIST(x,lambda,累积)

    • GEOMEAN(<列>)

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

    • MEDIAN(<列>)

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

    • PERCENTILE.EXC(<列>,)

    • PERCENTILE.INC(<列>,)

    • PERCENTILEX.EXC(<表>,<表达式>,k)

    • PERCENTILEX.EXC(<表>,<表达式>,k)

    • POISSON.DIST(x,平均值,累积)

    • RANK.EQ(<值>,<列名> [,<顺序>])

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

    • 样本(

    ,[],[,[]]…)

  • STDEV.P(<列名称>)

  • STDEV.S(<列名>)

  • STDEVX.P(<表>,<表达式>)

  • STDEVX.S(<表>,<表达式>)

  • SQRTPI(数字)

  • VAR.P(<列名称>)

  • VAR.S(<列名称>)

  • VARX.P(<表格>,<表达式>)

  • VARX.S(<表>,<表达式>)

  • XIRR(<表>,<值>,<日期>,[猜测])

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

  • DAX文字功能

    DAX文本功能可用于表和列。随着DAX文本功能,您可以返回一个字符串的一部分,搜索字符串或连接字符串值中的文本。您还可以控制日期,时间和数字的格式。

    以下是一些DAX文本功能-

    • 空白()
    • CODE(文字)
    • CONCATENATE(<文本1>,<文本2>)
    • CONCATENATEX(<表>,<表达式>,[定界符])
    • 精确()
    • FIND(<查找文本>,<文本内>,[<开始编号>],[])
    • 固定(<数字>,<小数>,)
    • 格式(<值>,<格式字符串>)
    • LEFT(<文本>,<数字字符>)
    • LEN(<文字>)
    • LOWER(<文本>)
    • MID(<文本>,<起始编号>,<编号字符>)
    • 替换()
    • REPT(<文本>,)
    • RIGHT(<文本>,)
    • SEARCH(<查找文本>,<文本内>,[<开始编号>],[])
    • SUBSTITUTE(<文本>,<旧文本>,<新文本>,<实例编号>)
    • TRIM(<文本>)
    • 上()
    • VALUE(<文本>)