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

Power BI DAX 实现按产品分组、Set=1时组号递增且新产品组号重置

分组编号需求实现方案

需求说明

现有包含Index、Product、Set三个字段的有序数据,要求按Product分区计算组号:

  • 同一Product下,每遇到Set=1后,下一段数据的组号递增1
  • 切换到新Product时,组号自动重置为1

原始数据

IndexProductSet
1Table0
2Table0
3Table1
4Table0
5Table0
6Table1
7Table0
8Table1
9Chair0
10Chair0
11Chair0
12Chair1
13Chair0
14Chair0
15Chair1

期望输出

IndexProductSetGroup
1Table01
2Table01
3Table11
4Table02
5Table02
6Table12
7Table03
8Table13
9Chair01
10Chair01
11Chair01
12Chair11
13Chair02
14Chair02
15Chair12

实现方案

1. SQL实现(支持窗口函数版本,适配MySQL8.0+、PostgreSQL、SQL Server等)

核心逻辑:先对每个Product内的Set列做前向偏移1位,累计偏移后列中1的出现次数,加1即为当前行组号。

SELECT 
    `Index`,
    Product,
    `Set`,
    SUM(CASE WHEN lag_set = 1 THEN 1 ELSE 0 END) OVER (PARTITION BY Product ORDER BY `Index`) + 1 AS `Group`
FROM (
    SELECT 
        *,
        LAG(`Set`, 1, 0) OVER (PARTITION BY Product ORDER BY `Index`) AS lag_set
    FROM your_table_name
) t
ORDER BY `Index`;

将代码中的your_table_name替换为实际表名即可执行。

2. Python Pandas实现

import pandas as pd

# 构造示例数据,实际使用时可替换为读取自己的数据源
df = pd.DataFrame({
    'Index': range(1,16),
    'Product': ['Table']*8 + ['Chair']*7,
    'Set': [0,0,1,0,0,1,0,1,0,0,0,1,0,0,1]
})

# 分组计算组号
df['Group'] = df.groupby('Product')['Set'].apply(
    lambda x: x.shift(1, fill_value=0).cumsum() + 1
).reset_index(drop=True)

print(df)

3. Excel实现

假设数据从第2行开始,A列为Index、B列为Product、C列为Set、D列为待计算的Group:

  • D2单元格直接填入1
  • D3单元格输入公式:=IF(B3<>B2,1,IF(C2=1,D2+1,D2))
  • 将D3的公式向下拖拽填充到所有行即可
    内容的提问来源于stack exchange,提问作者Levy
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 16:36:02