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

如何用DAX创建基于油井月度生产数据的两类索引计算列

基于日期和油井的DAX计算列实现:RunningActMonth与RunningMonth

需求回顾

针对多油井的月度生产数据,需为每个油井生成两个计算列:

  • RunningActMonth:找到首个有产量(原油/水/天然气任一数值>0)的月份后,仅在当月有产量时递增计数,无产量时保持之前的最大计数;首个产量月份前返回0。
  • RunningMonth:找到首个有产量的月份后,无论当月是否有产量,持续递增计数;首个产量月份前返回0。

实现步骤

1. 辅助列:判断当月是否有产量

先创建辅助列标记当月是否存在有效产量,简化后续计算:

HasProduction = IF(OR('Table'[原油(Oil)]>0, 'Table'[水(Water)]>0, 'Table'[天然气(Gas)]>0), 1, 0)

2. 计算列:RunningActMonth

RunningActMonth = 
VAR WellFilter = ALLEXCEPT('Table', 'Table'[油井(Well)])
VAR FirstProdDate = CALCULATE(MIN('Table'[日期]), WellFilter, 'Table'[HasProduction] = 1)
VAR CurrentDate = 'Table'[日期]
VAR ProdCount = CALCULATE(COUNTROWS('Table'), WellFilter, 'Table'[日期] <= CurrentDate, 'Table'[HasProduction] = 1)
RETURN
IF(CurrentDate < FirstProdDate, 0, ProdCount)

逻辑说明:

  • WellFilter:限定计算仅针对当前行的油井
  • FirstProdDate:找到当前油井第一个有产量的日期
  • ProdCount:统计当前日期及之前,该油井有产量的月份总数
  • 最终判断:若当前日期早于首个产量日期返回0,否则返回统计的产量月份数

3. 计算列:RunningMonth

RunningMonth = 
VAR WellFilter = ALLEXCEPT('Table', 'Table'[油井(Well)])
VAR FirstProdDate = CALCULATE(MIN('Table'[日期]), WellFilter, 'Table'[HasProduction] = 1)
VAR CurrentDate = 'Table'[日期]
VAR MonthDiff = DATEDIFF(FirstProdDate, CurrentDate, MONTH) + 1
RETURN
IF(CurrentDate < FirstProdDate, 0, MonthDiff)

逻辑说明:

  • 同样限定油井上下文并找到首个产量日期
  • MonthDiff:计算当前日期与首个产量日期的月份间隔,加1得到连续递增的计数
  • 最终判断:早于首个产量日期返回0,否则返回间隔计数

验证示例

以示例中的PP-0001油井为例:

  • 首个产量日期为1990-09,该日期前所有行的两个计算列均返回0
  • 1990-09至1991-05期间每月均有产量,RunningActMonth从1递增至9,RunningMonth同步递增至9
  • 1991-06至1991-09无产量,RunningActMonth保持9,RunningMonth继续递增至13
  • 1991-10恢复产量,RunningActMonth递增至10,RunningMonth递增至14,与示例结果完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:47:01