最近重新又看了一下《 DAX 权威指南 2 》中关于扩展表的一些相关概念,然后又重新学习了一遍扩展表和 RELATED 函数,发现了一些比较有意思东西就是 RELATED 的实际作用以及在计算列中如何根据自己的需求去使用 RELATED ,以下是关于 RELATED 的一些个人理解:
先说结论:
1 RELATED 的实际作用在当前扩展表的行上下文中访问相关表中指定相关列的值
2 计算列中可以修改因当前活跃关系而生成的扩展表并且使用 RELATED 进行访问
简单补充一些相关概念:
扩展表有两部分组成,一是原始表的所有列,二是相对于原始表处于一端的相关表的所有列。
因为在 PBI 中对原始表的引用实际上引用原始表对应的扩展表,扩展表根据上面所说的由两部分组成,原始表和相关表。虽然引用的是扩展表但是能够直接使用列引用访问的只有原始表的原始列,如果想访问扩展表中相关表的相关列,这个时候 RELATED 就发挥作用了,感觉在 RELATED 中引用相关表中的相关列更多地是作为直接引用原始表的原始列的一个补充。因为直接列引用只能访问原始列,RELATED 列引用也只能访问相关列,两种列引用方法的使用范围没有重叠。
好了,最后就是来介绍一下如何在计算列中修改扩展表以及如何用 RELATED 访问修改后的扩展表中的相关列。这里是以《 DAX 权威指南 2 》第14章第1节关于扩展表描述作为上文,进行一些结合个人理解的补充:
书中的观点就是在计算列中不能使用 CALCULATE 通过 USERELATIONSHIP 去修改现有活跃的关系进而修改现有由引擎基于当前原始表生成的扩展表,所以这个场景下也就没有完美的解决办法,给出的原因如下:
然后给出替代的解决方案就是使用 LOOKUPVALUE 忽略任何筛选上下文,去基于条件迭代搜索一行:
但是我尝试过换一个思路就可以解决在计算列中修改当前行的扩展表以及访问这个修改后的扩展表中指定的相关列中的值,实现方案如下:
计算的结果如下:
以上就是关于 RELATED 的一些个人理解,如果有误,也请交流指出。