使用表表达式
本章的开头,你可以看到,我们通常会使用表表达式作为DAX的参数。典型的使用方法是在函数中迭代一个表,对表中的每个行进行计算。例如,下面的sumx,所有其他以x为结尾的聚合函数都是这样的模式:
[Sales Amount] :=
SUMX (
Sales,
Sales[Quantity] * Sales[Unit Price]
)
可以用表函数来替代sales表,例如,可以使用filer来筛选销售数量大于1的记录:
[Sales Amount Multiple Items] :=
SUMX (
FILTER (
Sales,
Sales[Quantity] > 1
),
Sales[Quantity] * Sales[Unit Price]
)
在计算列中,可以使用relatedtable函数,从一方获取多方的表格。例如,下面的计算列保存在product表中,计算了各产品的销售额。
Product[Product Sales Amount] =
SUMX (
RELATEDTABLE ( Sales ),
Sales[Quantity] * Sales[Unit Price]
)
关于relatedtable表函数,在第四章会有详细的介绍。
表格函数中可以嵌套表格函数。例如,下面的计算列只计算了销售记录大于1的销售情况:
Product[Product Sales Amount Multiple Items] =
SUMX (
FILTER (
RELATEDTABLE ( Sales ),
Sales[Quantity] > 1
),
Sales[Quantity] * Sales[Unit Price]
)
当嵌套表格函数的时候,DAX对最内部的函数首先处理,然后逐一向外。这个不要和dax处理参数的顺序弄混了。
注意:
后面我们会看到,嵌套的执行顺序可能是您对语句结果产生疑问的源头,因为calculatetable的执行顺序和filter不一样。下一节,我们会学习filter,第五章,我们会学习calculatable。