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

Power Query自定义列按分组统计首月非零原油产量计数方法求助

Power Query 实现步骤与公式

核心逻辑

先按「PRMS Reserves Category、PRMS Reserves Sub Category、UNIQUEID」三个维度定位每个井的首次非零产量月份,再统计每个分组月度下匹配首次投产月的井数,其余月份计数为0。

分步实现(推荐,易维护、性能更优)

步骤1:提取所有井的首次非零产量月份表

对原始表(此处命名为源)先筛选非零产量记录,再分组取每个井的最小日期:

首次投产月映射 = Table.Group(
    Table.SelectRows(源, each [Gross Oil Well Head Volume (MBBL)] > 0),
    {"PRMS Reserves Category", "PRMS Reserves Sub Category", "UNIQUEID"},
    {{"首次投产月", each List.Min([Date]), type date}}
)

步骤2:生成月度产量聚合表

按分组+月份维度聚合总产量:

月度产量聚合 = Table.Group(
    源,
    {"PRMS Reserves Category", "PRMS Reserves Sub Category", "Date"},
    {{"Sum of Gross Oil", each List.Sum([Gross Oil Well Head Volume (MBBL)]), type number}}
)

步骤3:添加Count自定义列

关联首次投产月映射表,统计当前月份符合条件的井数:

结果表 = Table.AddColumn(月度产量聚合, "Count", (current) =>
    Table.RowCount(
        Table.SelectRows(首次投产月映射,
            each [PRMS Reserves Category] = current[PRMS Reserves Category]
            and [PRMS Reserves Sub Category] = current[PRMS Reserves Sub Category]
            and [首次投产月] = current[Date]
        )
    ),
    type number
)

单自定义列嵌套写法(适合不想拆分中间表的场景)

直接在月度聚合表中添加如下公式的自定义列即可,无需单独生成中间映射表:

(current) =>
let
    // 筛选当前分组下所有非零产量记录
    filterGroup = Table.SelectRows(源,
        each [PRMS Reserves Category] = current[PRMS Reserves Category]
        and [PRMS Reserves Sub Category] = current[PRMS Reserves Sub Category]
        and [Gross Oil Well Head Volume (MBBL)] > 0
    ),
    // 统计当前分组下每个井的首次投产月
    firstProdMonth = Table.Group(filterGroup, {"UNIQUEID"}, {{"首次月", each List.Min([Date])}}),
    // 匹配当前月份的井数
    count = Table.RowCount(Table.SelectRows(firstProdMonth, each [首次月] = current[Date]))
in
    count

注意事项

  • 需确保Date列为日期类型,若为文本格式需先转换为日期,否则最小日期计算会出错
  • 数据量超过10万行时推荐用分步写法,提前对分组列、日期列建索引可大幅提升查询效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:15:00