Power BI 基于切片器选择筛选列并计算符合条件的年度总销售额
Power BI 按切片器选中年份动态计算合规总销售额方案
前置准备:优化数据表结构
先进入Power Query编辑器对原始宽表做转换,降低后续计算逻辑复杂度:
- 选中所有非销售额、非排除规则列(如公司ID、公司名称等)作为保留列
- 选中2016-2020年五列销售额数据,右键选择「逆透视列」,生成存储年份的「属性」列、存储对应销售额的「值」列
- 将「属性」列重命名为「年份」,数据格式调整为整数类型
方案1:通用动态匹配逻辑(适配任意年份选择组合)
新建如下DAX度量值,可自动匹配选中年份对应的排除规则列:
合规总销售额 = VAR 选中年份 = ALLSELECTED('你的表名'[年份]) VAR 排除列后缀 = CONCATENATEX(选中年份, [年份], "-", [年份], ASC) VAR 符合条件的销售额 = SUMX( '你的表名', IF( CALCULATE(VALUES('你的表名'[Excluded 后缀]), TREATAS({排除列后缀}, '你的表名'[排除列后缀])) = "N", '你的表名'[销售额], 0 ) ) RETURN 符合条件的销售额
注:将代码中你的表名替换为实际数据表名称即可
方案2:固定规则枚举方案(性能更稳定)
如果你的排除规则列固定为15种预设组合,直接用SWITCH枚举所有情况,运行效率更高:
合规总销售额_固定规则版 = VAR 选中年份拼接 = CONCATENATEX(ALLSELECTED('你的表名'[年份]), [年份], "-", [年份], ASC) RETURN SUMX( '你的表名', SWITCH( 选中年份拼接, "2016", IF('你的表名'[Excluded 2016] = "N", '你的表名'[2016年销售额], 0), "2017", IF('你的表名'[Excluded 2017] = "N", '你的表名'[2017年销售额], 0), "2016-2017", IF('你的表名'[Excluded 2016-2017] = "N", '你的表名'[2016年销售额] + '你的表名'[2017年销售额], 0), "2016-2017-2018", IF('你的表名'[Excluded 2016-2017-2018] = "N", '你的表名'[2016年销售额] + '你的表名'[2017年销售额] + '你的表名'[2018年销售额], 0) // 剩余11种年份组合按照以上规则补全即可 ) )
最终效果配置
- 切片器绑定「年份」字段,开启多选模式
- 表格可视化行维度添加「年份」字段,值添加上述度量值,即可得到示例中的匹配计算结果
内容的提问来源于stack exchange,提问作者Jackson Paul
相关产品推荐
相关产品推荐

