突然想到的问题,例如有事实表与维度表各一,通过ID关联,现在想求事实表中所有ID对应的某维度值:
写法一,使用SELECTCOLUMNS引用原始列,然后用RELATED,但因为引用的是原始列,结果表的ID会随事实表重复,可以计算:
- EVALUATE
- SELECTCOLUMNS ( 'Fact', "ID", 'Fact'[ID], "Level", RELATED ( 'Level'[Level] ) )
复制代码
写法二,使用ADDCOLUMNS配合VALUES对ID去重,此时无法使用RELATED,DAXStudio提示没有相应关系,不可计算:
- EVALUATE
- ADDCOLUMNS ( VALUES ( 'Fact'[ID] ), "Level", RELATED ( 'Level'[Level] ) )
复制代码
写法三,使用扩展表知识替换写法二中的RELATED,可以计算:
- EVALUATE
- ADDCOLUMNS (
- VALUES ( 'Fact'[ID] ),
- "Level", CALCULATE ( SELECTEDVALUE ( 'Level'[Level] ), CALCULATETABLE ( 'Fact' ) )
- )
复制代码
当然正确的写法很多,例如还可以使用扩展表的知识配合SUMMARIZE,同样可以计算:
写法四:- EVALUATE
- SUMMARIZE ( 'Fact', 'Fact'[ID], 'Level'[Level] )
复制代码
我主要想知道写法二错在哪里,为什么经过VALUES一处理,RELATED就不能用了?跟lineage有关吗?
我的理解是RELATED只要有行上下文和关系就可以运行,ADDCOLUMNS提供了行上下文,而VALUES应该也不会破坏表间关系,所以为什么呢?
另外如果常常遇到这种需求(从多端表查询一端表的信息),用DAX怎么处理最好?
上附件,请大佬指点:
9963012216362.rar
(25.88 KB, 下载次数: 0)
|