从数据到信息
从信息到洞察

什么是表函数

本节你会了解 DAX 中标量函数和表函数的区别。表函数是 DAX 内部计算的核心,在编写 DAX 查询而不是度量值或计算列的 DAX 表达式时,表函数非常有用

本文将介绍表函数在 DAX 中的作用, 以及如何在基础场景中使用它们。

表函数介绍

DAX 是一种函数式语言,表达式在计值后得到结果。到目前为止,你已经知晓 DAX 表达式通常返回单个值,例如字符串或数字。我们称这些表达式为标量表达式。当定义度量值计算列时,我们使用的都是标量表达式,如下面的示例所示:

= 4 + 3
= "DAX is a beautiful language"
= SUM ( Sales[Quantity] )

但是, 你还可以编写生成表的 DAX 表达式作为结果。我们不能直接将生成表的函数表达式分配给度量值或计算列, 但这不妨碍表函数成为 DAX 的重要组成部分。例如, 有些 DAX 函数允许将返回表的表达式作为其参数,编写 DAX 查询的时候也需要用到这种表表达式。

返回表的表达式的最简单的例子是在 DAX 表达式中引用表名,下面这个表达式返回销售表的全部内容(所有列和所有行):

= Sales

度量值只能返回单个值

如果你尝试将返回表的表达式分配给度量值或计算列, 则会出现错误:

该表达式引用多列,多列不能转换为标量值

因为度量值只能返回单个值(标量)。你需要进一步操作表表达式以获得一个标量值,使用接受表表达式作为参数的聚合函数可以完成这个任务。例如, 使用 COUNTROWS 函数计算表包含的行数:

= COUNTROWS ( Sales )

COUNTROWS 的用法

COUNTROWS ( <table> )

COUNTROWS 使用接受表表达式作为参数的 DAX 函数,你可以在参数中直接引用表名,或者引用返回表的函数。

我们根据 DAX 函数的返回类型对其进行分类。我们称返回标量值的函数为“标量函数”,返回表的为“表函数”。例如,COUNTROWS 是一个标量函数,因为它返回一个数值,并接受一个表作为参数。

表函数通常对一个表进行操作,更改原始表的行和/或列。例如,可以使用以下表达式计算单价大于 100 的销售表的行数:

= COUNTROWS (
    FILTER (
        Sales,
        Sales[Unit Price] > 100
    )
  )

FILTER 返回一个表,其中只包含单价大于 100 的行。

通常,我们在代码中使用返回表的表达式来迭代表格的行,并聚合一些值,以返回一个标量值作为结果。表表达式不能直接分配给度量值或计算列,但是,你可以在 Power BI Desktop 中通过新建表来使用表表达式,或在 DAX 查询中使用表表达式,以物化(materializing)表表达式的内容。

Excel 目前不支持新建表,你可以使用一种叫做链接回表的方法在 Power Pivot 中新建表

例如, 你可以通过执行下面的表达式来获取单位价格大于 100 的所有销售记录组成的表, 结果如图所示。

= FILTER (
    Sales,
    Sales[Unit Price] > 100
 )

按 Unit_Price 大于 100 筛选出的销售表

DAX 也提供了 EVALUATE 语句,你可以用它来计算返回表的表达式:

EVALUATE
FILTER (
    Sales,
    Sales[Unit Price] > 100
)

你可以在任何客户端工具中执行 DAX 查询(Microsoft Excel、Power BI Desktop、DAX Studio、SQL Server Management Studio、Reporting Services 等)。在下一篇文章中,你将看到对 EVALUATE 语法更详细的解释。

 

说点什么

avatar
1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
  订阅本文评论  
提醒