You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Qlik表格与Qlik Sense中编写含Partition By的Row_Number函数?

在Qlik Sense中实现带Partition By的Row_Number逻辑

Qlik Sense脚本没有直接支持SQL风格的OVER (PARTITION BY)语法,需要通过排序+条件判断来实现你要的行号逻辑,以下是具体实现方案:

脚本端实现(推荐,性能更优)

对应你给出的SQL逻辑,在加载脚本中按以下步骤操作:

  1. 先按分区字段(jobnumber)和排序字段(转换后的日期EventDate)对数据排序
  2. 使用Peek()函数对比上一行的分区字段值,判断是否需要重置行号

示例代码:

// 加载关联后的job和hist数据,生成row_id
LOAD
    job.jobnumber,
    Date(hist.EventTimeStamp) as EventDate, // 对应SQL的cast(hist.EventTimeStamp as Date)
    // 其他需要保留的字段(比如hist表的其他字段、job表的其他字段)
    // 生成row_id:同一jobnumber内按日期递增编号,不同jobnumber重置为1
    If(Peek(jobnumber) = jobnumber, Peek(row_id) + 1, 1) as row_id
FROM
    [你的数据源路径/数据库连接] // 替换为实际数据源,比如已关联的QVD或数据库表
ORDER BY
    jobnumber, EventDate ASC; // 必须按分区字段+排序字段排序,保证逻辑生效

代码说明

  • ORDER BY jobnumber, EventDate ASC:核心前提,确保同一jobnumber的记录按日期顺序排列,这样分区内的行号能正确递增
  • Peek(jobnumber):获取上一行的jobnumber值,和当前行对比,判断是否处于同一分区
  • Peek(row_id) + 1:如果在同一分区,行号在上一行基础上加1;否则重置为1

前端表达式实现(适用于临时计算)

如果需要在前端表格/图表中直接计算行号,可以用Aggr()函数结合RowNo()实现:

Aggr(
    RowNo(),
    jobnumber, // 分区字段
    Date(EventTimeStamp) // 排序字段
)

注意:前端计算适合数据量较小的场景,数据量大时建议优先用脚本生成行号,避免性能问题

内容的提问来源于stack exchange,提问作者neha ingley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:22:34