QlikSense集合分析:HH:MM格式时间筛选求和返回0问题排查
解决Qlik中时间条件求和返回0的问题
问题原因
你的STime列和vCurrentTime变量都是HH:MM格式的字符串,直接用字符串进行大小比较时,Qlik会按字符顺序而非时间逻辑判断,导致集合分析无法正确匹配符合条件的记录。
解决方案
需要将字符串格式的时间转换为Qlik可识别的时间数值类型(以一天的比例表示,0代表00:00,1代表23:59:59),再进行比较。以下是三种可行写法:
写法1:修改变量定义+集合分析
- 重新定义
vCurrentTime,让它返回时间数值而非字符串:
vCurrentTime = TIME(NOW()) // 不带格式参数,返回时间数值
- 确保
STime字段是时间类型(如果是字符串,加载数据时用Time#(STime, 'HH:MM') as STime转换),然后使用集合分析:
SUM({$<STime = {"<=$(=$(vCurrentTime))"}>}Points)
写法2:集合分析内直接转换字段
如果不想修改变量或字段类型,可在集合分析条件里直接转换时间格式:
SUM({$<STime = {"=Time#(STime, 'HH:MM') <= Time#('$(vCurrentTime)', 'HH:MM')"}>}Points)
写法3:条件求和替代集合分析
如果集合分析写法容易出错,也可以用IF函数直接做条件求和:
SUM(IF(Time#(STime, 'HH:MM') <= Time#('$(vCurrentTime)', 'HH:MM'), Points, 0))
验证说明
以上写法都会将11:50、13:25转换为时间数值,与14:45的时间数值正确比较,最终得到符合预期的求和结果12。
内容的提问来源于stack exchange,提问作者bodega18
相关产品推荐
相关产品推荐

