You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerBI中利用Unpivot实现多组system与rating列的匹配转换

解决方案:将宽表转换为窄表(配对system与rating并过滤null)

先明确你的原表和目标表结构:

原表

NAMEsystem 1system 2system 3rating 1rating 2rating 3
papaabcabdabe502525
mamaabcabdnull5050null

目标表

NAMEsystemrating
papaabc50
papaabd25
papaabe25
mamaabc50
mamaabd50

你猜的没错,核心就是逆透视(Unpivot),下面分两种常用场景给出具体操作:


场景1:用Excel Power Query(可视化操作)

  • 选中原数据区域,点击「数据」选项卡 → 「从表格/区域」,确认导入后进入Power Query编辑器
  • 按住Ctrl键,成对选中列:先选system 1+rating 1,再选system 2+rating 2,最后选system 3+rating 3
  • 点击顶部「转换」选项卡 → 「逆透视列」→ 「逆透视列(成对)」
  • 此时会生成多余的Attribute.1列,直接选中它右键删除
  • 点击system列的筛选按钮,取消勾选「null」;原数据中rating的null和system的null是配对的,过滤system的null即可
  • 点击「关闭并上载」,就能得到目标表

场景2:用SQL(以SQL Server为例)

推荐用CROSS APPLY的方式,比嵌套Unpivot更直观好理解:

SELECT 
    t.NAME,
    s.system,
    s.rating
FROM your_table_name t
CROSS APPLY (
    -- 把每行的3组system和rating拆成3行
    VALUES
        (t.[system 1], t.[rating 1]),
        (t.[system 2], t.[rating 2]),
        (t.[system 3], t.[rating 3])
) s(system, rating)
-- 过滤掉system或rating为null的行
WHERE s.system IS NOT NULL AND s.rating IS NOT NULL;

如果一定要用UNPIVOT语法,也可以这么写:

SELECT 
    NAME,
    system,
    rating
FROM (
    SELECT 
        NAME,
        system1 = [system 1], rating1 = [rating 1],
        system2 = [system 2], rating2 = [rating 2],
        system3 = [system 3], rating3 = [rating 3]
    FROM your_table_name
) t
UNPIVOT (
    system FOR sys_col IN (system1, system2, system3)
) up_sys
UNPIVOT (
    rating FOR rat_col IN (rating1, rating2, rating3)
) up_rat
WHERE 
    system IS NOT NULL 
    AND rating IS NOT NULL
    -- 确保system和rating的组对应(比如system1对应rating1)
    AND RIGHT(sys_col, 1) = RIGHT(rat_col, 1);

内容的提问来源于stack exchange,提问作者luibrain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:23:15