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

Tableau中按Parent ID分组计算审批耗时DateDiff的问题

按Parent ID分组计算审批日期差的解决方案

核心思路是锁定同一Parent ID内的"Pending review"和"Approved"状态对应的日期,而非简单计算上下行日期差,避免跨ID的错误计算。以下分常用工具场景给出具体实现:

Excel/Google Sheets 实现

假设你的数据结构为:

  • A列:Parent ID
  • B列:状态(取值为Pending review或Approved)
  • C列:状态对应的日期

公式示例

直接匹配当前行Parent ID对应的两个状态日期,计算天数差:

=IFERROR(DATEDIF(
    XLOOKUP(A2&"Pending review", A:A&B:B, C:C),
    XLOOKUP(A2&"Approved", A:A&B:B, C:C),
    "d"
), "状态缺失")
  • 逻辑:用XLOOKUP拼接Parent ID和状态作为匹配键,精准定位同一ID下的待审核/已批准日期
  • IFERROR用于处理某个Parent ID缺少其中一种状态的情况,返回提示文本

如果你的版本不支持XLOOKUP,可以用INDEX+MATCH替代:

=IFERROR(DATEDIF(
    INDEX(C:C, MATCH(A2&"Pending review", A:A&B:B, 0)),
    INDEX(C:C, MATCH(A2&"Approved", A:A&B:B, 0)),
    "d"
), "状态缺失")

SQL 实现

假设数据表名为approval_records,字段包括parent_id、status、record_date(状态对应的日期)。

方案1:自连接(适用于每个Parent ID仅各有一条待审核/已批准记录)

SELECT
    t1.parent_id,
    DATEDIFF(t2.record_date, t1.record_date) AS approval_days
FROM
    (SELECT parent_id, record_date FROM approval_records WHERE status = 'Pending review') t1
JOIN
    (SELECT parent_id, record_date FROM approval_records WHERE status = 'Approved') t2
ON t1.parent_id = t2.parent_id;

方案2:分组聚合(适用于同一Parent ID有多个状态记录,取最早待审核、最晚已批准日期)

SELECT
    parent_id,
    DATEDIFF(
        MAX(CASE WHEN status = 'Approved' THEN record_date END),
        MIN(CASE WHEN status = 'Pending review' THEN record_date END)
    ) AS approval_days
FROM approval_records
GROUP BY parent_id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:05:33