第三章 使用基本的表格函数
本章,我们要学习值函数和表函数,以及它们的区别。表函数对DAX中实现内部计算非常有用,它不仅用于写计算列和度量值,在写DAX查询时候,也非常好用。
这里,我们的目标只是介绍一下这些函数,不会深入的讨论。关于它们更详细的介绍,会放到第九章。本章,我们先介绍表函数在DAX中的角色,以及在大部分情况下,我们如何使用它们,同时也会介绍DAX的值表达式。
介绍表函数
DAX是一种函数语言,它根据代码,产生一个结果。目前为止,你看到的DAX表达式都是返回一个单一值,例如一个字符或者一个数字。我们称这样的函数为值函数。当你定义一个度量值或者计算列的时候,可以按下面这样书写:
= 4 + 3
= "DAX is a beautiful language"
= SUM ( Sales[Quantity] )
但是,当你写一个DAX表达式,它返回的是一个表的时候。你不能直接用于度量值或者计算列,但是表表达式可以是该DAX表达式的组成部分。例如,下面这个DAX表达式接受一个表表达式作为参数,这个表表达式就需要是一个DAX语句的查询。
最简单的例子就是表表达式引用表的名称。如下面的表达式,返回了整个sales表的内容。
= Sales
如果,你把上面的表达式用于度量值或者计算列,那么你将会报错。因为,度量值需要一个值作为结果。你必须要对表表达式进行处理以求获得一个值。通过把使用接受表表达式作为参数的函数,就可以解决整个问题。例如,你可以使用countrows来计算表的总行数。
= COUNTROWS ( Sales )
countrows使用下面的语法
COUNTROWS ( <table> )
使用可以接受表表达式作为参数的DAX函数,你可以直接写表的名称作为参数,也可以使用返回表的函数。
根据DAX返回的类型,我们对返回单一值的函数称为值函数,对返回表的函数,我们称为表函数。例如,countrows是值函数,因为它通过接受一个表作为参数,然后返回一个数值。
大部分的表函数都是对表进行处理,改变原始表的行或者列。例如,要计算sales表中单价大于100的行数,可以这样写:
= COUNTROWS (
FILTER (
Sales,
Sales[Unit Price] > 100
))
上面这个表达式,filter返回一个表,这个表只包含了单价大于100的记录。对于filter函数,本章后面会详细介绍。
通常情况,我们在DAX代码中使用表表达式来处理原始表的行,然后计算聚合结果,最后返回单一的值,不能把表表达式直接用于度量值和计算列。但是可以用于计算表的表达式中,或者用于DAX查询中,对原始数据表进行处理。
例如要返回单价大于100的表,可以使用下面这样的写法。
= FILTER (
Sales,
Sales[Unit Price] > 100
)
image.png
DAX还提供了evaluate表达式,可以用来对表进行查询
上面的语句可以在DAX客户端内查询,例如Microsoft Excel, DAX Studio, SQL Server Management Studio,Reporting Services等。下面的部分,详细介绍了evaluate的语法。
网友评论