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

使用DAX创建从首个非零值开始计数、ID变更时重置的计算列

DAX 计算列实现方案

前置要求

你的表必须有可确定行先后顺序的唯一字段(比如自增ID、数据创建时间戳等,下文统称该字段为RowID,数值随你示例的行顺序递增),DAX没有表默认存储顺序的概念,无排序字段无法实现该逻辑。

计算列代码

把代码里的你的表名替换为你实际的表名即可:

index = 
VAR CurrentID = [id]
VAR CurrentRow = [RowID]
// 定位当前ID分组下第一个occurence非零的行位置
VAR FirstNonZeroPos = 
    MINX(
        FILTER(
            '你的表名',
            '你的表名'[id] = CurrentID && '你的表名'[occurence] <> 0
        ),
        [RowID]
    )
RETURN
IF(
    CurrentRow < FirstNonZeroPos || ISBLANK(FirstNonZeroPos),
    0,
    CurrentRow - FirstNonZeroPos + 1
)

逻辑说明

  1. 变量先固定当前行的ID和排序值,避免上下文切换导致取值错误
  2. 筛选同ID下所有occurence不为0的行,取最小的排序值作为计数的起始锚点
  3. 当前行位置早于锚点、或当前ID全为0没有锚点时返回0,否则用行号差计算连续计数,ID变更时会自动匹配新ID的锚点重新计数
  4. 你之前用RANKX未得到正确结果,核心是没有先定位计数锚点,且RANKX按值排序的逻辑无法匹配行顺序要求

结果验证

代入你给出的示例数据,A1分组首个非零行的排序值为3,对应行返回1,后续行依次+1;A2分组首个非零行排序值为7,对应返回1,后续依次+1,完全匹配你给出的index列结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:06:03