本章的内容包括:
- 了解DAX中的功能
- 使用DAX函数制作定义明确的公式
- 发现哪些DAX函数可以帮助解决复杂的数据计算或操作需求
在第14章中,我将讨论函数如何成为计算表达式中命名公式的一部分。作为提出计算表达式的人,您是为函数提供特定参数的人——有些是必需的,有些是可选的——这些参数指定了您提供的输入类型。(这种参数通常被称为参数。)每次执行函数时,都会产生一个值。
使用DAX,许多函数类型允许您使用日期和时间、基于字符串的条件、查找和基于关系的查找来执行计算。当然,DAX也有基于标准计算的功能。函数是DAX中的一个突出功能——学会正确使用函数,您将极大地提高生产力。在本章中,我将描述14个类别中的200多个函数,以帮助提高DAX表达式的效率。
使用DAX参数和命名约定
与任何编程语言一样,DAX有一个标准化的参数命名约定,这有助于促进语言的使用,尤其是在参数名称中包含前缀时。(事实上,一些DAX参数允许您仅对名称使用前缀。)表15-1探讨了命名约定结构。
部分 | 参数名称和说明 |
表达式 | 返回单个值的DAX表达式。根据行上下文的不同,表达式可能被求值多次,也可能不被求值多次。 |
值 | 返回单个值的DAX表达式。与表达式关联的值在其他运算符之前精确计算一次 |
表 | 返回表数据的DAX表达式。 |
表名 | 任何使用标准DAX语法的现有表,尽管它不能是表达式。 |
列名 | 使用标准DAX语法的现有列,通常是完全限定的。它不能是表达式。 |
名称 | 必须使用字符串常量来提供新对象的名称。 |
顺序 | 使用枚举——换句话说,一个接一个地引用事物——来查找排序顺序。 |
Tier | 使用枚举来查找Tier值的处理方式。 |
类型 | 使用枚举查找PathItem(字符串的特定位置)和PathItemReverse(字符串的反向特定位置)数据类型。 |
预混合参数名称
每次限定参数时,您可能希望包含一个前缀——一个用于区分给定参数的特定唯一值。例如,可以在参数名称前面添加状态的首字母缩写。要使用前缀限定参数,请确保前缀是基于参数的描述性前缀。
此外,读取参数时不要有歧义——例如:
Hide_ColumnName引用用于在DAX LOOKUPVALUE()函数中隐藏值的列。
Seek_ColumnName引用用于在DAX LOOKUPVALUE()函数中显示值的列。
参数名称有时可以省略。您将只使用前缀,假设它足够清楚,可以描述参数。遵循此策略可能有助于避免以后在阅读代码时出现混淆。采用这种方法的一个例子是DATE (Year_value,
Month_value, Day_value).
使用参数
为了开始本章,下面列出了可供您使用的不同类型的函数,以及使用参数命名函数的基本规则。在图15-1中,您可以找到一个具有完全限定参数的示例函数。
每个DAX函数都有一个不同的参数结构。在图15-1中,您会注意到,特定DAX函数的每个参数都作为表的一部分包含了一个描述。对于提供的示例,DAX函数SELECTCOLUMNS具有以下属性:
- table:表达式返回一个表。
- name:列的名称;它需要双引号。
- scalar_expression:它返回标量值,例如整数或字符串。
对于DAX函数,保持严格的命名约定至关重要,尤其是在参数值方面。表名与列名一样,是特定于数据模型中显示的内容的。尽管如此,您仍然可以找到包围该列的方括号。一个例子是
Purchase [Purchase Amount].
使用公式和函数
如果你曾经在Excel中使用过公式,那么你可能在某种程度上熟悉DAX。Excel和DAX公式的结构和设计本质上相似,但有几个例外:
- DAX函数引用完整的列和表。若要引用表或列中的特定值,需要合并一个筛选器。
- DAX有多种函数,可以返回一个充满数据的表,而不仅仅是一个值。尽管报表中不存在该表,但它用于输入其他函数。
- DAX包含的不仅仅是数字函数。事实上,您拥有的功能包括时间智能和基于字符串的数据。这样的公式允许您定义或选择数据范围,甚至可以对一个或多个数据范围执行计算。
- DAX支持自定义计算,即使是针对一行数据。您可以将DAX用于当前行或一系列行,方法是在假定已知上下文的情况下应用参数执行计算。
因为DAX是一种函数式语言,所以任何包含公式的完整代码示例都包含一个函数。DAX公式可以是条件语句、函数和引用的组合。此外,DAX公式有两种风格:数字和非数字变体。数字数据包括整数、小数和基于货币的值。非数字由字符串和二进制对象组成。
正如您在下一节中看到的,14个类别由250多个基于DAX的函数组成。
读取DAX表达式时,请确保从最里面的函数到最外面的函数进行求值。表达式也遵循运算符规则,这使得制作DAX公式成为一项要求精度的任务。
聚合函数
“聚合”的意思是“将许多(通常不相关的)项组合成一个。”这就是为什么你不应该对有一个函数可以组合成一种形式感到惊讶。聚合函数包括基于标量的值,如count、sum、average、minimum和maximum。可以将它们用于基于表达式的列或表中的所有行。表15-2包括可用于该功能类型的所有功能。
函数 | 说明 |
---|---|
APPROXIMATEDISTINCTCOUNT | 在列中返回唯一值的估计计数。 |
AVERAGE | 返回列中所有数字的平均值(算术平均值)。 |
AVERAGEA | 返回列中值的平均值(算术平均值)。 |
AVERAGEX | 计算针对表进行计算的一组表达式的平均值(算术平均值)。 |
COUNT | 计算指定列中包含非空值的行数。 |
COUNTA | 计算指定列中包含非空值的行数。 |
COUNTAX | 在对表计算表达式的结果时统计非空白结果数。 |
COUNTBLANK | 对列中的空白单元格数目进行计数。 |
COUNTROWS | 统计指定表中或由表达式定义的表中的行数。 |
COUNTX | 在针对表计算表达式的结果时,对包含数字或计算结果为数字的表达式的行数目进行计数。 |
DISTINCTCOUNT | 对列中的非重复值数目进行计数。 |
DISTINCTCOUNTNOBLANK | 对列中的非重复值数目进行计数。 |
MAX | 返回列中或两个标量表达式之间的最大数字值。 |
MAXA | 返回列中的最大值。 |
MAXX | 针对表的每一行计算表达式,并返回最大数字值。 |
MIN | 返回列中或两个标量表达式之间的最小数字值。 |
MINA | 返回列中的最小值,包括任何逻辑值和以文本表示的数字。 |
MINX | 返回针对表中的每一行计算表达式而得出的最小数值。 |
PRODUCT | 返回列中的数的乘积。 |
PRODUCTX | 返回为表中的每一行计算的表达式的积。 |
SUM | 对某个列中的所有数值求和。 |
SUMX | 返回为表中的每一行计算的表达式的和。 |
日期和时间函数
日期和时间函数是从日期时间数据类型派生而来的,该数据类型始于1900年3月1日。表15-3列出了所有可用的日期和时间函数。
函数 | 说明 |
---|---|
CALENDAR | 返回一个表,其中有一个包含一组连续日期的名为“Date”的列。 |
CALENDARAUTO | 返回一个表,其中有一个包含一组连续日期的名为“Date”的列。 |
DATE | 以日期/时间格式返回指定的日期。 |
DATEDIFF | 返回两个日期之间的间隔边界的计数。 |
DATEVALUE | 将文本格式的日期转换为日期/时间格式的日期。 |
DAY | 返回一月中的日期,1 到 31 之间的数字。 |
EDATE | 返回在开始日期之前或之后指定月份数的日期。 |
EOMONTH | 以日期/时间格式返回指定月份数之前或之后的月份的最后一天的日期。 |
HOUR | 以数字形式返回小时值,0 (12:00 A.M.) 到 23 (11:00 P.M.) 之间的数字。 |
MINUTE | 给定日期和时间值,以数字形式返回分钟值,0 到 59 之间的数字。 |
MONTH | 以数字形式返回月份值,1(一月)到 12(十二月)之间的数字。 |
NETWORKDAYS | 返回两个日期之间的整个工作日数。 |
NOW | 以日期/时间格式返回当前日期和时间。 |
QUARTER | 将季度返回为从 1 到 4 的数值。 |
SECOND | 以数字形式返回时间值的秒数,0 到 59 之间的数字。 |
TIME | 将以数值形式给定的小时、分钟和秒值转换为日期/时间格式的时间。 |
TIMEVALUE | 将文本格式的时间转换为日期/时间格式的时间。 |
TODAY | 返回当前日期。 |
UTCNOW | 返回当前的 UTC 日期和时间 |
UTCTODAY | 返回当前的 UTC 日期。 |
WEEKDAY | 返回指示日期属于星期几的数字,1 到 7 之间的数字。 |
WEEKNUM | 根据 return_type 值返回给定日期和年份的周数。 |
YEAR | 返回日期的年份,1900 到 9999 之间的四位整数。 |
YEARFRAC | 计算由两个日期之间的整日数表示的年份分数。 |
筛选函数
filter函数支持DAX返回特定的数据类型、查找值以及按相关值选项进行筛选。使用查找函数进行筛选就像数据库一样,因为它支持使用表和关系。当您关注上下文时,过滤函数允许您通过创建动态计算来操作数据上下文。表15-4列出了Power BI中可用的所有过滤器功能。
函数 | 说明 |
---|---|
ALL | 返回表中的所有行或列中的所有值,同时忽略可能已应用的任何筛选器。 |
ALLCROSSFILTERED | 清除应用于表的所有筛选器。 |
ALLEXCEPT | 删除表中所有上下文筛选器,已应用于指定列的筛选器除外。 |
ALLNOBLANKROW | 从关系的父表中,返回除空白行之外的所有行或列的所有非重复值,并且忽略可能存在的所有上下文筛选器。 |
ALLSELECTED | 删除当前查询的列和行中的上下文筛选器,同时保留所有其他上下文筛选器或显式筛选器。 |
CALCULATE | 在已修改的筛选器上下文中计算表达式。 |
CALCULATETABLE | 在已修改的筛选器上下文中计算表表达式。 |
EARLIER | 返回所述列的外部计算传递中指定列的当前值。 |
EARLIEST | 返回指定列的外部计算传递中指定列的当前值。 |
FILTER | 返回一个表,用于表示另一个表或表达式的子集。 |
INDEX | 在指定分区(按指定顺序排序)或指定轴上的绝对位置(由位置参数指定)处返回一行。 |
KEEPFILTERS | 计算 CALCULATE 或 CALCULATETABLE 函数时,修改应用筛选器的方式。 |
LOOKUPVALUE | 返回满足搜索条件所指定的所有条件的行的值。 函数可以应用一个或多个搜索条件。 |
MATCHBY | 在窗口函数中,定义用于确定如何匹配数据和标识当前行的列。 |
OFFSET | 返回一个行,该行位于同一表中的当前行之前或之后(按给定的偏移量)。 |
ORDERBY | 定义用于确定每个 WINDOW 函数分区内排序顺序的列。 |
PARTITIONBY | 定义用于对 WINDOW 函数的 <relation> 参数进行分区的列。 |
RANK | 返回给定间隔内行的级别。 |
REMOVEFILTERS | 清除指定表或列中的筛选器。 |
ROWNUMBER | 返回给定间隔内行的唯一级别。 |
SELECTEDVALUE | 如果筛选 columnName 的上下文后仅剩下一个非重复值,则返回该值。 否则,返回 alternateResult。 |
WINDOW | 返回位于给定间隔内的多个行。 |
财务函数
在计算财务计算(如回报率、应计利息或折旧率)时,您将使用财务函数。表15-5列出了Power BI中可用的所有财务功能。
函数 | 描述 |
---|---|
ACCRINT | 返回支付定期利息的证券的应计利息。 |
ACCRINTM | 返回支付到期利息的证券的应计利息。 |
AMORDEGRC | 返回每个会计期间的折旧。 类似于 AMORLINC,但根据资产的使用寿命应用折旧系数。 |
AMORLINC | 返回每个会计期间的折旧。 |
COUPDAYBS | 返回从息票期开始到结算日之间的天数。 |
COUPDAYS | 返回包含结算日的息票期内的天数。 |
COUPDAYSNC | 返回从结算日到下一个息票日的天数。 |
COUPNCD | 返回结算日之后的下一个息票日。 |
COUPNUM | 返回结算日和到期日之间应付的息票数,舍入到最接近的整息票数。 |
COUPPCD | 返回结算日之前的上一个息票日。 |
CUMIPMT | 返回 start_period 和 end_period 之间为贷款支付的累计利息。 |
CUMPRINC | 返回 start_period 和 end_period 之间为贷款支付的累计本金。 |
DB | 使用固定余额递减法返回指定期间资产的折旧。 |
DDB | 使用双倍余额递减法或你指定的一些其他方法返回指定期间的资产折旧。 |
DISC | 返回证券的贴现率。 |
DOLLARDE | 将以整数部分加小数部分表示的美元价格(如 1.02)转换为以小数表示的美元价格。 |
DOLLARFR | 将以整数部分加小数部分表示的美元价格(如 1.02)转换为以小数表示的美元价格。 |
DURATION | 返回假定面值为 $100 的麦考利久期。 |
EFFECT | 返回给定名义年利率和每年的复利期数下的实际年利率。 |
FV | 根据固定利率计算投资的未来价值。 |
INTRATE | 返回一次性付息的证券的利率。 |
IPMT | 返回基于定期固定付款和固定利率计算得出的给定投资周期内支付的利息。 |
ISPMT | 按照等额本金计算贷款(或投资)在指定期限内支付(或收取)的利息。 |
MDURATION | 返回修改后的证券(假定面值为 $100)麦考利久期。 |
NOMINAL | 返回在给定实际利率和每年复利期数的情况下的名义年利率。 |
NPER | 返回基于定期固定付款和固定利率计算得出的投资周期数。 |
ODDFPRICE | 返回每 $100 面值的首期息票日不固定(短期或长期)的证券的价格。 |
ODDFYIELD | 返回首期息票日不固定(长期或短期)的证券的收益率。 |
ODDLPRICE | 返回末期息票日不固定(长期或短期)的证券每 $100 面值的价格。 |
ODDLYIELD | 返回末期息票日不固定(长期或短期)的证券的收益率。 |
PDURATION | 返回投资达到指定值所需的期数。 |
PMT | 根据固定的付款期数和固定利率计算贷款的付款额。 |
PPMT | 返回基于定期固定付款和固定利率计算得出的给定投资周期的本金付款。 |
PRICE | 返回支付定期利息的证券的每 $100 面值的价格。 |
PRICEDISC | 返回每 $100 面值的贴现证券的价格。 |
PRICEMAT | 返回到期支付利息的每 $100 面值的证券的价格。 |
PV | 根据固定利率计算贷款或投资的现值。 |
RATE | 返回年金的每个周期的利率。 |
RECEIVED | 返回一次性付息的证券到期收回的金额。 |
RRI | 返回投资增长的等效利率。 |
SLN | 返回一段时间内资产的直线折旧。 |
SYD | 返回指定期间内资产的年限总额折旧。 |
TBILLEQ | 返回国库券的债券等值收益率。 |
TBILLPRICE | 返回每 $100 面值的国库券的价格。 |
TBILLYIELD | 返回国库券的收益率。 |
VDB | 使用双倍余额递减法或你指定的其他一些方法,返回你指定的任何期间(包括部分期间)的资产折旧。 |
XIRR | 返回不一定具有周期性的现金流时间表的内部收益率。 |
XNPV | 返回不一定具有周期性的现金流时间表的现值。 |
YIELD | 返回支付定期利息的证券的收益率。 |
YIELDDISC | 返回贴现证券的年收益率。 |
YIELDMAT | 返回支付到期利息的证券的年收益率。 |
信息函数
如果您正在寻找一个用参数计算单元格或行的函数,信息函数可以决定该值是否与预期类型匹配。表15-6显示了所有信息功能。
函数 | 说明 |
---|---|
COLUMNSTATISTICS | 返回关于模型中每张表每一列的统计信息表。 |
CONTAINS | 如果所有引用列的值存在或包含在这些列中,则返回 true;否则,该函数返回 false。 |
CONTAINSROW | 如果表中存在或包含一行值,则返回 TRUE,否则返回 FALSE。 |
CONTAINSSTRING | 返回 TRUE 或 FALSE,指示一个字符串是否包含另一个字符串。 |
CONTAINSSTRINGEXACT | 返回 TRUE 或 FALSE,指示一个字符串是否包含另一个字符串。 |
CUSTOMDATA | 返回连接字符串中 CustomData 属性的内容。 |
HASONEFILTER | 如果 columnName 上的直接筛选值的数目为一个,则返回 TRUE;否则,返回 FALSE。 |
HASONEVALUE | 如果筛选 columnName 的上下文后仅剩下一个非重复值,则返回 TRUE。 否则返回 FALSE。 |
ISAFTER | 此函数为布尔函数,它会模仿 Start At 子句的行为,并为满足所有条件参数的行返回 true。 |
ISBLANK | 检查值是否为空白,并返回 TRUE 或 FALSE。 |
ISCROSSFILTERED | 如果筛选相同或相关表中的 columnName 或其他列,则返回 TRUE。 |
ISEMPTY | 检查表是否为空。 |
ISERROR | 检查值是否错误,并返回 TRUE 或 FALSE。 |
ISEVEN | 如果 number 为偶数,则返回 TRUE;如果为奇数,则返回 FALSE。 |
ISFILTERED | 如果直接筛选 columnName,则返回 TRUE。 |
ISINSCOPE | 当指定的列在级别的层次结构内时,返回 True。 |
ISLOGICAL | 检查值是否为逻辑值(TRUE 或 FALSE),并返回 TRUE 或 FALSE。 |
ISNONTEXT | 检查值是否为非文本(空单元格为非文本),并返回 TRUE 或 FALSE。 |
ISNUMBER | 检查值是否为数值,并返回 TRUE 或 FALSE。 |
ISODD | 如果数字为奇数,则返回 TRUE;如果数字为偶数,则返回 FALSE。 |
ISONORAFTER | 此函数为布尔函数,它会模仿 Start At 子句的行为,并为满足所有条件参数的行返回 true。 |
ISSELECTEDMEASURE | 由表达式中的计算项用于确定上下文中的度量值是度量值列表中指定的度量值之一。 |
ISSUBTOTAL | 使用 SUMMARIZE 表达式另外创建一列;如果该行包含作为参数提供的列的小计值,则返回 True,否则返回 False。 |
ISTEXT | 检查值是否为文本,并返回 TRUE 或 FALSE。 |
NONVISUAL | 将 SUMMARIZECOLUMNS 表达式中的值筛选器标记为不可见。 |
SELECTEDMEASURE | 由表达式的计算项用于引用上下文中的度量值。 |
SELECTEDMEASUREFORMATSTRING | 由表达式的计算项目用于检索上下文中度量值的格式字符串。 |
SELECTEDMEASURENAME | 由表达式的计算项目用于按名称确定上下文中的度量值。 |
USERCULTURE | 返回当前用户的区域设置。 |
USERNAME | 从在连接时提供给系统的凭据中返回域名和用户名。 |
USEROBJECTID | 返回当前用户的对象 ID 或 SID。 |
USERPRINCIPALNAME | 返回用户主体名称。 |
逻辑函数
假设您需要根据返回的值信息来响应表达式。在这种情况下,逻辑函数是一个合适的选择。逻辑函数的一些例子有IS、AND、OR和NOT。TRUE和FALSE也是逻辑运算符。Power BI逻辑运算符如表15-7所示。
函数 | 说明 |
---|---|
AND | 检查两个参数是否均为 TRUE,如果两个参数都是 TRUE,则返回 TRUE。 |
BITAND | 返回两个数字的按位“AND”。 |
BITLSHIFT | 返回一个按指定位数向左移动的数字。 |
BITOR | 返回两个数字的按位“OR”。 |
BITRSHIFT | 返回一个按指定位数向右移动的数字。 |
BITXOR | 返回两个数字的按位“XOR”。 |
COALESCE | 返回第一个计算结果不为 BLANK 的表达式。 |
FALSE | 返回逻辑值 FALSE。 |
IF | 检查条件,如果为 TRUE,则返回一个值,否则返回第二个值。 |
IF.EAGER | 检查条件,如果为 TRUE,则返回一个值,否则返回第二个值。 使用 eager 执行计划,该计划将始终执行分支表达式,而不考虑条件表达式。 |
IFERROR | 计算表达式,如果表达式返回错误,则返回指定的值 |
NOT | 将 FALSE 更改为 TRUE,或者将 TRUE 更改为 FALSE。 |
或者 | 检查某一个参数是否为 TRUE,如果是,则返回 TRUE。 |
SWITCH | 针对值列表计算表达式,并返回多个可能的结果表达式之一。 |
TRUE | 返回逻辑值 TRUE。 |
数学和三角函数
DAX中基于数学的函数运行所有标准数学运算,包括三角方程。该类别有30多种选项,如表15-8所示。
函数 | 说明 |
---|---|
ABS | 返回某一数字的绝对值。 |
ACOS | 返回某一数字的反余弦值(又称逆余弦值)。 |
ACOSH | 返回某一数字的反双曲余弦值。 |
ACOT | 返回某一数字的反余切值(又称逆余切值)。 |
ACOTH | 返回某一数字的反双曲余切值。 |
ASIN | 返回某一数字的反正弦值(又称逆正弦值)。 |
ASINH | 返回某一数字的反双曲正弦值。 |
ATAN | 返回某一数字的反正切值(又称逆正切值)。 |
ATANH | 返回某一数字的反双曲正切值。 |
CEILING | 将数值向上舍入为最接近的整数或最接近的基数倍数。 |
CONVERT | 将一种数据类型的表达式转换为另一种数据类型的表达式。 |
COS | 返回给定角度的余弦值。 |
COSH | 返回某一数字的双曲余弦值。 |
COT | 返回以弧度为单位指定的角度的余切值。 |
COTH | 返回双曲角的双曲余切值。 |
CURRENCY | 计算参数并以货币数据类型的形式返回结果。 |
DEGREES | 将弧度转换成角度。 |
DIVIDE | 执行除法运算,并在被 0 除时返回备用结果或 BLANK()。 |
EVEN | 返回向上舍入到最接近的偶数的数字。 |
EXP | 返回 e 的指定次方。 |
FACT | 返回一个数字的阶乘,等于序列 1*2*3*...*(以给定数字结尾)。 |
FLOOR | 向零方向将数值向下舍入为最接近的基数倍数。 |
GCD | 返回两个或多个整数的最大公约数。 |
INT | 将数值向下舍入到最接近的整数。 |
ISO.CEILING | 将数值向上舍入为最接近的整数或最接近的基数倍数。 |
LCM | 返回整数的最小公倍数。 |
LN | 返回某一数字的自然对数。 |
LOG | 根据指定的底数返回数字的对数。 |
LOG10 | 返回某一数字以 10 为底的对数。 |
MOD | 返回一个被除数除以一个除数后所得的余数。 结果的符号始终与除数的符号相同。 |
MROUND | 返回舍入到所需倍数的一个数字。 |
ODD | 返回向上舍入到最接近的奇数的数字。 |
PI | 返回 Pi 值 3.14159265358979,精确到 15 位。 |
POWER | 返回某一数字的乘幂结果。 |
QUOTIENT | 执行除法运算,并仅返回除法运算结果的整数部分。 |
RADIANS | 将度转换为弧度。 |
RAND | 返回大于或等于 0 并且小于 1 的随机数字(平均分布)。 |
RANDBETWEEN | 返回指定的两个数值之间的一个随机数。 |
ROUND | 将数值舍入到指定的位数。 |
ROUNDDOWN | 向零的方向向下舍入某一数字。 |
ROUNDUP | 按远离 0(零)的方向向上舍入某一数字。 |
SIGN | 确定列中数字、计算结果或值的符号。 |
SIN | 返回给定角度的正弦值。 |
SINH | 返回某一数字的双曲正弦值。 |
SQRT | 返回某一数字的平方根。 |
SQRTPI | 返回 (数字 * pi) 的平方根。 |
TAN | 返回给定角度的正切值。 |
TANH | 返回某一数字的双曲正切值。 |
TRUNC | 通过删除数字的小数或分数部分将数字截断为整数。 |
其他函数
有些函数不属于任何特定的类别,例如ERROR和BLANK。表15-9显示了其他地方不适用的所有功能。
函数 | 说明 |
---|---|
BLANK | 返回空白。 |
ERROR | 引发错误并显示错误消息。 |
EVALUATEANDLOG | 返回第一个参数的值,并将其记录在 DAX 评估日志探查器事件中。 |
TOCSV | 以 CSV 格式的字符串形式返回表。 |
TOJSON | 以 JSON 格式的字符串形式返回表。 |
父函数和子函数
父子函数是处理分层表集和使用函数操作日期时要考虑的选项。表15-10列出了所有父子函数。
函数 | 说明 |
---|---|
PATH | 返回一个带分隔符的文本字符串,其中包含当前标识符的所有父项的标识符。 |
PATHCONTAINS | 如果指定的路径中存在指定的项,则返回 TRUE。 |
PATHITEM | 从 PATH 函数的计算结果得到的字符串,返回指定位置处的项 。 |
PATHITEMREVERSE | 从 PATH 函数的计算结果得到的字符串,返回指定位置处的项 。 |
PATHLENGTH | 返回给定 PATH 结果中指定项的父项数目,包括自身。 |
关系函数
如果您的业务目标是管理表之间的关系,那么关系函数是合适的。
您经常会发现,这些函数涉及一个或多个表之间的集成。表15-11描述了关系函数。
函数 | 描述 |
---|---|
CROSSFILTER | 指定要用于计算两列之间存在的关系的交叉筛选方向。 |
RELATED | 从其他表返回相关值。 |
RELATEDTABLE | 在给定筛选器修改的上下文中计算表表达式。 |
USERELATIONSHIP | 指定要在特定计算中使用的关系,如 columnName1 与 columnName2 之间存在的关系。 |
统计函数
当处理无法使用其他数字库完成的统计数据和更复杂的数学复杂性时,您会发现统计函数非常有价值。如表15-12所示,统计函数的一些例子是分布和概率数据,包括标准差。
函数 | 说明 |
---|---|
BETA.DIST | 返回 beta 分布。 |
BETA.INV | 返回逆 beta 累积概率密度函数 (BETA.DIST)。 |
CHISQ.DIST | 返回卡方分步。 |
CHISQ.DIST.RT | 返回卡方分布的右尾概率。 |
CHISQ.INV | 返回卡方分布的左尾逆概率。 |
CHISQ.INV.RT | 返回卡方分布的右尾逆概率。 |
COMBIN | 返回给定项数的组合数。 |
COMBINA | 返回给定项数的组合数(包含重复)。 |
CONFIDENCE.NORM | 置信区间是一个值范围。 |
CONFIDENCE.T | 使用学生的 t 分布返回总体平均值的置信区间。 |
EXPON.DIST | 返回指数分布。 |
GEOMEAN | 返回列中数字的几何平均值。 |
GEOMEANX | 返回针对表中的每一行计算的表达式的几何平均值。 |
LINEST | 使用最小二乘法计算最适合给定数据的直线。 |
LINESTX | 使用最小二乘法计算最适合给定数据的直线。 针对表中每一行进行计算的表达式的数据结果。 |
MEDIAN | 返回列中数字的中值。 |
MEDIANX | 返回针对表中的每一行计算的表达式的中值。 |
NORM.DIST | 返回指定平均值和标准偏差的正态分布。 |
NORM.INV | 指定平均值和标准偏差的逆正态累积分布。 |
NORM.S.DIST | 返回标准正态分布(平均值为 0,标准偏差为 1)。 |
NORM.S.INV | 返回逆标准正态累积分布。 |
PERCENTILE.EXC | 返回范围中值的第 k 个百分点,其中 k 的范围为 0 到 1(不含 0 和 1)。 |
PERCENTILE.INC | 返回范围中值的第 k 个百分点,其中 k 的范围为 0 到 1(含 0 和 1)。 |
PERCENTILEX.EXC | 返回针对表中的每一行计算的表达式的百分位数。 |
PERCENTILEX.INC | 返回针对表中的每一行计算的表达式的百分位数。 |
PERMUT | 返回可从数字对象中选择的给定数目对象的排列数。 |
POISSON.DIST | 返回泊松分布。 |
RANK.EQ | 返回某个数字在数字列表中的排名。 |
RANKX | 针对 table 参数中每一行,返回某个数字在数字列表中的排名 。 |
SAMPLE | 返回指定表中 N 行的样本。 |
STDEV.P | 返回整个总体的标准偏差。 |
STDEV.S | 返回样本总体的标准偏差。 |
STDEVX.P | 返回整个总体的标准偏差。 |
STDEVX.S | 返回样本总体的标准偏差。 |
T.DIST | 返回学生的左尾 t 分布。 |
T.DIST.2T | 返回学生的双尾 t 分布。 |
T.DIST.RT | 返回学生的右尾 t 分布。 |
T.INV | 返回学生的左尾逆 t 分布。 |
T.INV.2t | 返回学生的双尾逆 t 分布。 |
VAR.P | 返回整个总体的方差。 |
VAR.S | 返回样本总体的方差。 |
VARX.P | 返回整个总体的方差。 |
VARX.S | 返回样本总体的方差。 |
表操作函数
将表操作函数视为使用DAX操作表数据的另一种方式,而无需处理数据模型。从JOIN语句到GROUPBY,您将在这里找到许多类似的函数,这些函数在企业关系数据库解决方案(如Azure SQL Server)中很常见,用于操作表数据,如表15-13所示。
函数 | 说明 |
---|---|
ADDCOLUMNS | 将计算列添加到给定的表或表表达式。 |
ADDMISSINGITEMS | 向表添加多个列中的项组合(如果它们不存在)。 |
CROSSJOIN | 返回一个表,其中包含参数中所有表的所有行的笛卡尔乘积。 |
CURRENTGROUP | 从 GROUPBY 表达式的 table 参数中返回一组行。 |
DATATABLE | 提供用于声明内联数据值集的机制。 |
DETAILROWS | 计算为度量值定义的详细信息行表达式并返回数据。 |
DISTINCT 列 | 返回由一列组成的表,其中包含与指定列不同的值。 |
DISTINCT 表 | 通过删除另一个表或表达式中的重复行返回表。 |
EXCEPT | 返回一个表的行,这些行未在另一个表中出现。 |
FILTERS | 返回由直接作为筛选器应用到 columnName 的值组成的表。 |
GENERATE | 返回一个表,其中包含 table1 中的每一行与在 table1 的当前行的上下文中计算 table2 所得表之间的笛卡尔乘积 。 |
GENERATEALL | 返回一个表,其中包含 table1 中的每一行与在 table1 的当前行的上下文中计算 table2 所得表之间的笛卡尔乘积 。 |
GENERATESERIES | 返回包含算术序列值的单列表。 |
GROUPBY | 与 SUMMARIZE 函数类似,GROUPBY 不会对它添加的任何扩展列执行隐式 CALCULATE。 |
IGNORE | 通过省略 BLANK/NULL 计算中的特定表达式,修改 SUMMARIZECOLUMNS。 |
INTERSECT | 返回两个表的行交集,保留重复项。 |
NATURALINNERJOIN | 执行一个表与另一个表的内部联接。 |
NATURALLEFTOUTERJOIN | 使用 RightTable 执行与 LeftTable 的联接。 |
ROLLUP | 通过向由 groupBy_columnName 参数定义的列的结果添加汇总行,修改 SUMMARIZE 的行为。 |
ROLLUPADDISSUBTOTAL | 通过向基于 groupBy_columnName 列的结果添加汇总行/小计行,修改 SUMMARIZECOLUMNS 的行为。 |
ROLLUPISSUBTOTAL | 将汇总组与 ADDMISSINGITEMS 表达式内的 ROLLUPADDISSUBTOTAL 添加的列进行配对。 |
ROLLUPGROUP | 通过向由 groupBy_columnName 参数定义的列的结果添加汇总行,修改 SUMMARIZE 和 SUMMARIZECOLUMNS 的行为。 |
ROW | 返回一个具有单行的表,其中包含针对每一列计算表达式得出的值。 |
SELECTCOLUMNS | 将计算列添加到给定的表或表表达式。 |
SUBSTITUTEWITHINDEX | 返回表示作为参数提供的两个表的左半联接的表。 |
SUMMARIZE | 返回一个摘要表,显示对一组函数的请求总数。 |
SUMMARIZECOLUMNS | 返回一组组的摘要表。 |
表构造函数 | 返回包含一列或多列的表。 |
TOPN | 返回指定表的前 N 行。 |
TREATAS | 将表表达式的结果作为筛选器应用于无关表中的列。 |
UNION | 从一对表创建联合(联接)表。 |
VALUES | 返回单列表,其中包含指定表或列中的非重复值。 |
文本函数
与Excel中字符串函数库中的一组文本函数一样,DAX文本函数允许您使用表格模型中的表和列。表15-14包含了所有Power BI文本功能。
函数 | 说明 |
---|---|
COMBINEVALUES | 将两个或更多个文本字符串联接成一个文本字符串。 |
CONCATENATE | 将两个文本字符串联接成一个文本字符串。 |
CONCATENATEX | 连接为表中的每一行计算的表达式的结果。 |
EXACT | 比较两个文本字符串,如果它们完全相同,则返回 TRUE;否则返回 FALSE。 |
FIND | 返回一个文本字符串在另一个文本字符串中的起始位置。 |
FIXED | 将数值舍入到指定的小数位数并将结果返回为文本。 |
FORMAT | 根据所指定的格式将值转换为文本。 |
LEFT | 从文本字符串开头返回指定数量的字符。 |
LEN | 返回文本字符串中的字符数。 |
LOWER | 将文本字符串中的所有字母都转换为小写。 |
MID | 在提供开始位置和长度的情况下,从文本字符串中间返回字符串。 |
REPLACE | REPLACE 根据指定的字符数,将部分文本字符串替换为不同的文本字符串。 |
REPT | 按给定次数重复文本。 |
RIGHT | RIGHT 根据指定的字符数返回文本字符串中的最后一个或几个字符。 |
SEARCH | 返回按从左向右的读取顺序首次找到特定字符或文本字符串的字符编号。 |
SUBSTITUTE | 在文本字符串中将现有文本替换为新文本。 |
TRIM | 删除文本中除单词之间的单个空格外的所有空格。 |
UNICHAR | 返回由数值引用的 Unicode 字符。 |
UNICODE | 返回与文本字符串的首个字符对应的数字代码。 |
UPPER | 将文本字符串转换为全大写字母。 |
VALUE | 将表示数值的文本字符串转换为数值。 |
时间智能函数
时间智能功能使您可以根据时间段操作数据。时间范围包括天、月、季度和年。表15-15列出了所有相关的Power BI时间智能功能。
函数 | 说明 |
---|---|
CLOSINGBALANCEMONTH | 计算当前上下文中该月最后一个日期的表达式。 |
CLOSINGBALANCEQUARTER | 计算当前上下文中该季度最后一个日期的表达式。 |
CLOSINGBALANCEYEAR | 计算当前上下文中该年份最后一个日期的表达式。 |
DATEADD | 返回一个表,此表包含一列日期,日期从当前上下文中的日期开始按指定的间隔数向未来推移或者向过去推移。 |
DATESBETWEEN | 返回一个包含一列日期的表,这些日期以指定开始日期,一直持续到指定的结束日期。 |
DATESINPERIOD | 返回一个表,此表包含一列日期,日期以指定的开始日期开始,并按照指定的日期间隔一直持续到指定的数字。 |
DATESMTD | 返回一个表,此表包含当前上下文中该月份至今的一列日期。 |
DATESQTD | 返回一个表,此表包含当前上下文中该季度至今的一列日期。 |
DATESYTD | 返回一个表,此表包含当前上下文中该年份至今的一列日期。 |
ENDOFMONTH | 返回当前上下文中指定日期列的月份的最后一个日期。 |
ENDOFQUARTER | 为指定的日期列返回当前上下文的季度最后一日。 |
ENDOFYEAR | 返回当前上下文中指定日期列的年份的最后一个日期。 |
FIRSTDATE | 返回当前上下文中指定日期列的第一个日期。 |
FIRSTNONBLANK | 返回按当前上下文筛选的 column 列中的第一个值,其中表达式不为空 |
LASTDATE | 返回当前上下文中指定日期列的最后一个日期。 |
LASTNONBLANK | 返回按当前上下文筛选的 column 列中的最后一个值,其中表达式不为空。 |
NEXTDAY | 根据当前上下文中的 dates 列中指定的第一个日期返回一个表,此表包含从第二天开始的所有日期的列。 |
NEXTMONTH | 根据当前上下文中的 dates 列中的第一个日期返回一个表,此表包含从下个月开始的所有日期的列。 |
NEXTQUARTER | 根据当前上下文中的 dates 列中指定的第一个日期返回一个表,其中包含下季度所有日期的列。 |
NEXTYEAR | 根据 dates 列中的第一个日期,返回一个表,表中的一列包含当前上下文中明年的所有日期。 |
OPENINGBALANCEMONTH | 计算当前上下文中该月份第一个日期的表达式。 |
OPENINGBALANCEQUARTER | 计算当前上下文中该季度第一个日期的表达式。 |
OPENINGBALANCEYEAR | 计算当前上下文中该年份第一个日期的表达式。 |
PARALLELPERIOD | 返回一个表,此表包含一列日期,表示与当前上下文中指定的 dates 列中的日期平行的时间段,日期是按间隔数向未来推移或者向过去推移的。 |
PREVIOUSDAY | 返回一个表,此表包含的某一列中所有日期所表示的日期均在当前上下文的 dates 列中的第一个日期之前。 |
PREVIOUSMONTH | 根据当前上下文中的 dates 列中的第一个日期返回一个表,此表包含上一月份所有日期的列。 |
PREVIOUSQUARTER | 根据当前上下文中的 dates 列中的第一个日期返回一个表,此表包含上一季度所有日期的列。 |
PREVIOUSYEAR | 基于当前上下文中的“日期”列中的最后一个日期,返回一个表,该表包含上一年所有日期的列。 |
SAMEPERIODLASTYEAR | 返回一个表,其中包含指定 dates 列中的日期在当前上下文中前一年的日期列。 |
STARTOFMONTH | 返回当前上下文中指定日期列的月份的第一个日期。 |
STARTOFQUARTER | 为指定的日期列返回当前上下文中季度的第一个日期。 |
STARTOFYEAR | 返回当前上下文中指定日期列的年份的第一个日期。 |
TOTALMTD | 计算当前上下文中该月份至今的表达式的值。 |
TOTALQTD | 计算当前上下文中该季度至今的日期的表达式的值。 |
TOTALYTD | 计算当前上下文中表达式的 year-to-date 值。 |