【bug】数据准备阶段,计算时间戳之差,如果被减数为NULL会让外层IF函数结果为非预期的NULL

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吗?还是我的函数写的有问题?问题出在哪儿?求解答,谢谢!

 

Anttrush 发布于 2023-8-10 11:10
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
取消
  • 1关注人数
  • 241浏览人数
  • 最后回答于:2023-8-10 11:10
    请选择关闭问题的原因
    确定 取消
    返回顶部