Tableau:不使用表计算实现工单状态起始时间偏移计算
实现方案:用LOD函数计算上一状态起始时间戳
完全可以不用表计算,通过LOD函数结合排序逻辑实现Status previous from字段,以下是具体步骤:
步骤1:处理NULL状态结束时间
先处理每个工单最后一行(Done状态)Status to为NULL的情况,保证排序逻辑正常:
IFNULL([Status to], DATEADD('second', 1, {FIXED [Ticket]: MAX([Status to])}))
将该字段命名为状态结束时间(含补全),它会把NULL替换为对应工单所有状态结束时间中最晚的时间加1秒,确保最后一行排在所有状态之后。
步骤2:为每个工单的状态行分配序号
基于补全后的状态结束时间,给每个工单的状态行按时间顺序分配唯一序号:
{FIXED [Ticket]: RANK([状态结束时间(含补全)])}
命名为状态序号,每个工单的第一行(New状态)序号为1,后续状态依次递增。
步骤3:计算上一状态起始时间戳
通过LOD关联当前行的上一个序号对应的状态起始时间:
{FIXED [Ticket], [状态序号]-1: MAX([Status from])}
命名为Status previous from,逻辑如下:
- 序号为1的行(第一行),
[状态序号]-1=0,无对应行,返回NULL - 序号为n的行,找到同工单中序号为n-1的行的
Status from,即上一状态的起始时间
特殊情况处理
如果同一工单内存在重复的状态结束时间,可修改状态序号的计算逻辑,结合Status from确保序号唯一:
{FIXED [Ticket]: RANK(CONCAT(STR([状态结束时间(含补全)]), STR([Status from])))}
内容的提问来源于stack exchange,提问作者Nicolaesse
相关产品推荐
相关产品推荐

