在Power BI中使用DAX实现宽表转长表的技术问询
Power BI 宽格式转长格式(含过滤)解决方案
一、DAX 计算表方案(优先推荐)
通过DAX创建计算表直接生成目标长格式数据,步骤如下:
- 在Power BI中点击建模选项卡 → 新建表,输入以下DAX表达式:
长格式表 = VAR TypeA = SELECTCOLUMNS( FILTER('原始表', '原始表'[type_a] = 1 && '原始表'[critical_level] <> 0), "critical_level", '原始表'[critical_level], "id_trans", '原始表'[id_trans], "agent", '原始表'[agent], "period", '原始表'[period], "type_col", "type_a" ) VAR TypeB = SELECTCOLUMNS( FILTER('原始表', '原始表'[type_b] = 1 && '原始表'[critical_level] <> 0), "critical_level", '原始表'[critical_level], "id_trans", '原始表'[id_trans], "agent", '原始表'[agent], "period", '原始表'[period], "type_col", "type_b" ) VAR TypeC = SELECTCOLUMNS( FILTER('原始表', '原始表'[type_c] = 1 && '原始表'[critical_level] <> 0), "critical_level", '原始表'[critical_level], "id_trans", '原始表'[id_trans], "agent", '原始表'[agent], "period", '原始表'[period], "type_col", "type_c" ) RETURN UNION(TypeA, TypeB, TypeC)
- 表达式说明:
- 三个变量
TypeA/TypeB/TypeC分别筛选出对应type列值为1、且critical_level不为0的行,同时重构列结构并添加type_col标记类型。 - 最后用
UNION合并三个数据集,得到目标长格式表。
- 三个变量
二、Power Query 预处理方案
若倾向于在数据加载阶段完成转换,操作步骤如下:
- 进入Power Query编辑器,选中原始数据集:
- 点击
critical_level列的筛选按钮,取消勾选0,过滤掉不需要的行。
- 点击
- 选中
critical_level、id_trans、agent、period这四列,右键选择逆透视其他列,此时会生成Attribute(对应type列名)和Value(对应0/1值)两列。 - 点击
Value列的筛选按钮,仅保留1的行。 - 右键
Attribute列,选择重命名,改为type_col;然后删除Value列。 - 点击关闭并应用,即可得到目标长格式数据。
注意:如果
type_a/type_b/type_c是DAX计算列,建议先在Power Query中直接将原始的"Present"/"Not Present"转换为0/1(用替换值功能),再执行上述逆透视操作,避免计算列带来的限制。
内容的提问来源于stack exchange,提问作者R_Student
相关产品推荐
相关产品推荐

