finebi 5.x版本。(项目上购买的,具体版本不清楚)
在finebi数据准备阶段,SQL抽出来数据基础上,做自助数据集,“新增列”中写逻辑。
预期目标是,如果时间戳字段 ${委托单派单时间}, ${开工时间}都不为空,则新增字段为两时间戳之差的绝对值,单位换算成天但保留小数;如果有上述时间戳有1个为null,则新增字段为0。
首先尝试如下公式:
IF(OR(ISNULL(${委托单派单时间}), ISNULL(${开工时间})), 0, ABS(${委托单派单时间}-${开工时间})/1000/60/60/24)
发现时间戳${委托单派单时间}为null时,新增字段计算结果也为null,而不是预期的0。
去掉ABS函数,上述问题依然存在,初步排除ABS函数本身的问题(所以没在标题中提)。
尝试DATESUBDATE函数,op值取"s",但得到的是取整后的天数,不是我期望的小数。
正在发这个帖子的时候突然想到,反正是ABS,不如调换两个变量的顺序,于是尝试如下公式:
IF(OR(ISNULL(${委托单派单时间}), ISNULL(${开工时间})), 0, ABS(${开工时间}-${委托单派单时间})/1000/60/60/24)
输出结果正确,${委托单派单时间})为null时,新增指标为预期的0。但反过来,如果${开工时间}为null,那这样调整依然会出现非预期的null,只不过我目前的数据集中${开工时间}不会为空,避开问题。
所以,这是帆软产品BUG吗?还是我的函数写的有问题?问题出在哪儿?求解答,谢谢!