DAX从入门到精通 4-5-3 介绍values函数
上面的例子很有意思,因为它介绍了如何在有关系存在的情况下,计算客户购买特定商品的人次。但是,如果你在意的是计算客户的数量,那么我们刚好可以借此机会介绍下values函数。
values是一个表函数,它只会返回表格的一个列。包含了筛选上下文可见的所有值。values有很多高级的用法,这个后面会介绍。现在阶段,我们只用values解决现在的问题。
在之前的透视表中,我们更改NumOfCustomers的表达式如下:
[NumOfCustomers] := COUNTROWS ( VALUES ( Sales[CustomerKey] ))
表达式不是计算customers表中customers的数量,而是计算sales表中筛选上下文条件下的值的数量。因此这个表达式不需要依赖sale是表和customers表。只使用了sales表。
当你在product表添加过滤器的时候,它同样会过滤sales表,因为过滤条件会通过关系传导。因此,不是所有的CustomerKey都是可见的,只有过滤后的行情况会被计算。
这个表达式的意思是,计算所选产品对应的sales表的customer key的数量。因为每个customer key代表一个customer,所以也就是计算了对应的customer的数量。
做笔记:
你可以使用distinctcount得到一样的结果,它计算了列中不同的值的数量。通常情况下,我们建议使用distinctcount,而不是使用countrows和values。这里我们使用countrow和values,是为了学习,因为values是很有用的函数,后面我们会经常用到,详细用法后面会介绍。
使用values而不是使用关系的方向,会同时带来优点和缺点。在模型中使用filter会更有灵活性,因为它使用了关系。因此,因此,你不仅可以通过customerkey来计算customer数量,还可以使用客户的其他属性来计算(例如客户的categories)。这也就是,这些原因会迫使你使用单向的过滤器,或者你可能会出于性能考虑而使用values。在12章,我们会更详细的讨论。