使用DAX查询计算一对多关系下各项目的最大值
解决方案
你的DAX表达式仅计算出了每个项目对应的VALUE最大值,但没有筛选出对应这个最大值的整行数据,所以会返回所有市场行。以下几种方法可以实现目标:
方法一:创建计算表直接获取结果
通过先计算每个项目的最大VALUE,再关联原表筛选出对应行:
MaxValueRows = VAR ProjectMaxValues = SUMMARIZE( 'Table 2', 'Table 2'[PROJECT_NUMBER], "MaxValue", MAX('Table 2'[VALUE]) ) RETURN NATURALINNERJOIN( 'Table 2', ProjectMaxValues )
你可以将这个计算表与Table1关联,就能同时获取项目名称和对应最大VALUE的行数据。
方法二:用度量值标记并筛选
如果是在报表视觉对象中使用,可创建度量值标记当前行是否为该项目的VALUE最大行:
IsMaxValueRow = VAR CurrentValue = MAX('Table 2'[VALUE]) VAR ProjectMaxValue = CALCULATE( MAX('Table 2'[VALUE]), ALLEXCEPT('Table 2', 'Table 2'[PROJECT_NUMBER]) ) RETURN IF(CurrentValue = ProjectMaxValue, 1, 0)
之后在视觉对象的筛选器中,将该度量值设置为等于1,即可只显示每个项目VALUE最大的行,再关联Table1添加项目名称字段即可。
方法三:用TOPN直接提取每行
通过GENERATE遍历每个项目,配合TOPN取每个项目的VALUE最大行:
MaxValueRows = GENERATE( DISTINCT('Table 1'[PROJECT_NUMBER]), TOPN( 1, FILTER('Table 2', 'Table 2'[PROJECT_NUMBER] = EARLIER('Table 1'[PROJECT_NUMBER])), 'Table 2'[VALUE], DESC ) )
这个计算表会直接返回每个项目对应VALUE最大的完整行数据,包含MARKET、VALUE和PROJECT_NUMBER,可直接关联Table1获取项目名称。
内容的提问来源于stack exchange,提问作者Uddhava Swaminathan
相关产品推荐
相关产品推荐

