DAX从入门到精通 2-6-9 关联函数
2019-06-23 本文已影响0人
PowerBI入门到实践
当你需要处理表间关系的时候,两个非常有用的函数是related和relatedtable。
我们知道计算列可以引用其本身所在表的列。但是,如果你需要引用参考的列在另外一个表格呢?除非两个表格间已经建立的了关系,否则是不可以使用其他表的列的。如果表间建立了关系,那么可以使用related函数来获取引用表的列。
例如:你需要在sales表建立一个计算列,来检测销售的产品是否是在‘cell phone’类目下,如果是 的话,则对其standard cost进行一个减少。要计算这样的列,我们就需要检测产品的分类,但是这个分类不在sales表中。但是,一个关系从sale表开始,通过product表和product subcategory,连接到product category表。
image.png
从关系的开始到关系的结束,无论需要多少个步骤,DAX都可以沿着关系的流向,得到关联表的值,因此AdjustedCost列可以这样写:
Sales[AdjustedCost] =
IF (
RELATED ( 'Product Category'[Category] ) = "Cell Phone",
Sales[UnitCost] * 0.95,
Sales[UnitCost]
)
在一对多的关系中,related可以得到一方的信息,这情况下,在关联表中只有一行对应的数据,如果没有的话,related返回blank。
如果你是在一方,想要获取多方的信息。那么related函数不能起到作用,因为可能会返回了多个行。这样情况下,要使用relatedtable。relatetable返回一个表,表中包含了所有返回的相关行。例如,你想知道每个分类包含多少种产品,可以建立一个计算列,然后这样写。
= COUNTROWS ( RELATEDTABLE ( Product ) )
这个就是计算了每个分类下有多少种产品。
所以和related函数不同,relatedtable函数总是沿着关系的链条,从一方流向多方。