PowerBI中使用DAX实现按Source分组并对max(FYandFW)对应度量值求和的问题
PowerBI中使用DAX实现按Source分组并对max(FYandFW)对应度量值求和的问题
嗨,我来帮你搞定这个需求!从你的示例数据和预期结果来看,核心就是要先按Source分组,找出每个分组里最大的FYandFW值,然后把这些最大值对应的num(也就是带**标记的行)加总起来,对吧?
下面给你两种场景的DAX解决方案,你可以根据自己的实际情况选择:
场景1:num是数据表中的一列
如果你的num是直接存在表中的列(比如示例里的**代表这个行需要被计入求和),可以用这个度量值:
Sum of Max FYandFW Values = // 第一步:生成每个Source对应的最大FYandFW值的临时表 VAR MaxFYPerSource = SUMMARIZE( '你的数据表名', '你的数据表名'[Source], "@MaxFY", MAX('你的数据表名'[FYandFW]) ) // 第二步:筛选出原表中每个Source的最大FYandFW对应的行 VAR TargetRows = FILTER( '你的数据表名', ( '你的数据表名'[Source], '你的数据表名'[FYandFW] ) IN MaxFYPerSource ) // 第三步:对筛选后的行的num列求和 RETURN SUMX(TargetRows, '你的数据表名'[num])
场景2:num是一个已有的度量值
如果num不是表列,而是你已经定义好的度量值,那需要稍微调整一下,确保筛选上下文正确:
Sum of Max FYandFW Measures = // 生成每个Source的最大FYandFW临时表 VAR MaxFYPerSource = SUMMARIZE( '你的数据表名', '你的数据表名'[Source], "@MaxFY", MAX('你的数据表名'[FYandFW]) ) // 用ALL清除外部筛选,确保能正确找到所有Source的目标行 VAR TargetRows = FILTER( ALL('你的数据表名'), ( '你的数据表名'[Source], '你的数据表名'[FYandFW] ) IN MaxFYPerSource ) // 对目标行应用你的num度量值并求和 RETURN SUMX(TargetRows, [你的num度量值名称])
简单验证你的示例
拿你给的数据来说:
- Company A的最大FYandFW是202453,对应行的num是**(假设值为1)
- Company B的最大FYandFW是202502,对应行的num是**(假设值为1)
用上面的度量值计算后,结果就是2,完全符合你的预期。
小提示
- 记得把代码里的
你的数据表名和你的num度量值名称替换成你实际的表名和度量值哦 - 如果
FYandFW是文本类型也没关系,MAX函数会按字符顺序取最大的(你的格式是年份+周数,文本排序逻辑和数值排序一致) - 如果某个Source有多个相同的最大FYandFW行,这个代码会把所有这些行的num都加进去;如果只需要取其中一行,可以改用
TOPN函数来筛选
备注:内容来源于stack exchange,提问作者symkly
相关产品推荐
相关产品推荐

