如何在Power BI中用DAX/M CODE处理宽格式数据:汇总与比例计算
Power BI宽格式数据分组汇总解决方案
方法一:Power Query 数据转换实现
1. 过滤数据
- 进入Power Query编辑器,选中目标数据集
- 点击「开始」→「行」→「筛选行」,设置条件:
critical_level > 0
2. 分组聚合
- 点击「转换」→「分组依据」,选择「高级」模式:
- 分组列:添加
agent、period - 聚合列:
- 名称:
type_a_sum,操作「求和」,列选type_a - 名称:
type_b_sum,操作「求和」,列选type_b - 名称:
type_c_sum,操作「求和」,列选type_c - 名称:
subtotal,操作「计数行」,列选id_trans
- 名称:
- 分组列:添加
- 点击「确定」完成分组
3. 计算比例并整理
- 添加自定义列计算
type_a比例:
重命名列名为= [type_a_sum] / [subtotal]type_a - 同理创建
type_b、type_c比例列,公式分别为[type_b_sum]/[subtotal]、[type_c_sum]/[subtotal] - 选中比例列,点击「转换」→「格式化」→「保留两位小数」
- 删除临时的
type_a_sum、type_b_sum、type_c_sum列
方法二:DAX 创建汇总计算表
1. 创建筛选表(可选)
若需单独存储过滤后的数据,新建计算表:
FilteredTable = FILTER(原始表名, 原始表名[critical_level] > 0)
2. 生成汇总表
新建计算表,直接输出分组后的汇总结果:
SummaryTable = SUMMARIZE( FilteredTable, FilteredTable[agent], FilteredTable[period], "type_a", DIVIDE(SUM(FilteredTable[type_a]), COUNT(FilteredTable[id_trans])), "type_b", DIVIDE(SUM(FilteredTable[type_b]), COUNT(FilteredTable[id_trans])), "subtotal", COUNT(FilteredTable[id_trans]), "type_c", DIVIDE(SUM(FilteredTable[type_c]), COUNT(FilteredTable[id_trans])) )
注:
DIVIDE函数可自动处理除数为0的异常情况
3. 格式化比例值
- 选中
SummaryTable中的type_a、type_b、type_c列 - 在「建模」选项卡的「格式」组,设置格式为「百分比」并保留两位小数
两种方法最终均可得到符合需求的汇总表:
| agent | period | type_a | type_b | type_c | subtotal |
|---|---|---|---|---|---|
| mark | may | 0.67 | 0.33 | 0.67 | 3 |
| sam | may | 1.00 | 0.00 | 0.50 | 2 |
内容的提问来源于stack exchange,提问作者R_Student
相关产品推荐
相关产品推荐

