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
相关产品推荐
相关产品推荐

