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

PowerBI中按唯一订单号将下一行秒值转为新列的方法

PowerBI 创建“下一行秒数”计算列方案

原始数据

订单号秒数
1051
10100
102
100
2012
20722
203
30200
4098
400
505
50200
50200

目标效果

订单号秒数下一行秒数
1051100
101002
1020
100BLANK
2012722
207223
203BLANK
30200BLANK
40980
400BLANK
505200
50200200
50200BLANK

实现方法

方法1:使用OFFSET函数(推荐,PowerBI Desktop 2022.11+版本支持)

创建计算列时,输入以下DAX公式,替换你的表名为实际表名称:

下一行秒数 = 
CALCULATE(
    SELECTEDVALUE('你的表名'[秒数]),
    OFFSET(1, 
        FILTER('你的表名', '你的表名'[订单号] = EARLIER('你的表名'[订单号])),
        ORDERBY('你的表名'[秒数], ASC)
    )
)
  • 逻辑:按订单号分组,取当前行之后第1行的秒数值,若当前是组内最后一行,自动返回BLANK。

方法2:兼容旧版本的RANKX写法

如果你的PowerBI版本不支持OFFSET,用以下公式:

下一行秒数 = 
VAR 当前行排名 = 
    RANKX(
        FILTER('你的表名', '你的表名'[订单号] = EARLIER('你的表名'[订单号])),
        '你的表名'[秒数],
        ,
        ASC,
        DENSE
    )
VAR 组内最大排名 = 
    MAXX(
        FILTER('你的表名', '你的表名'[订单号] = EARLIER('你的表名'[订单号])),
        RANKX(
            FILTER('你的表名', '你的表名'[订单号] = EARLIER('你的表名'[订单号])),
            '你的表名'[秒数],
            ,
            ASC,
            DENSE
        )
    )
RETURN
    IF(
        当前行排名 < 组内最大排名,
        MAXX(
            FILTER(
                '你的表名',
                '你的表名'[订单号] = EARLIER('你的表名'[订单号]) &&
                RANKX(
                    FILTER('你的表名', '你的表名'[订单号] = EARLIER('你的表名'[订单号])),
                    '你的表名'[秒数],
                    ,
                    ASC,
                    DENSE
                ) = 当前行排名 + 1
            ),
            '你的表名'[秒数]
        ),
        BLANK()
    )
  • 逻辑:先给每个订单号下的行按秒数升序排名,判断当前行是否为组内最后一行,若非最后一行,取排名+1对应的秒数,否则返回BLANK。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:22:44