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

Qlik Sense中统计特定字段出现前的不同结果数并重置计算

Qlik Sense 统计每个UserID在每次Cat出现前的不同结果平均值

方法一:加载编辑器脚本实现

通过脚本提前计算结果,适合数据量较大的场景,步骤如下:

// 加载源数据,转换日期格式为Qlik可识别格式
SourceData:
LOAD 
    UserID,
    Date(Date#(Date, 'M/D/YY')) as Date,
    Result
FROM [你的数据源路径]; // 替换为实际数据源(如QVD、Excel等)

// 按用户和日期排序,保证记录的时间顺序正确
SortedData:
NoConcatenate
LOAD *
Resident SourceData
Order By UserID, Date Asc;
Drop Table SourceData;

// 追踪每个用户的结果集合,标记Cat出现的次数
CatPreStats:
LOAD 
    UserID,
    Date,
    Result,
    // 维护当前用户已出现的所有不同结果,用|分隔
    If(UserID = Peek(UserID), 
       If(Index(Peek(ResultSet), Result) = 0, 
          Peek(ResultSet) & '|' & Result, 
          Peek(ResultSet)), 
       Result) as ResultSet,
    // 记录当前是该用户的第几次Cat
    If(Result = 'Cat', 
       If(UserID = Peek(UserID), Peek(CatCount) + 1, 1), 
       0) as CatCount
Resident SortedData;

// 提取所有Cat记录,计算对应之前的不同结果数量
CatPreCounts:
LOAD 
    UserID,
    // 分割结果集并去重计数,处理开头无|的情况
    If(Index(ResultSet, '|') > 0, 
       SubFieldCount(ResultSet, '|'), 
       0) as DistinctResultsBeforeCat
Resident CatPreStats
Where Result = 'Cat';

// 按用户分组计算平均值,得到最终结果
FinalResult:
LOAD 
    UserID,
    Avg(DistinctResultsBeforeCat) as [# Results Before Cat]
Resident CatPreCounts
Group By UserID;

// 清理中间临时表
Drop Tables SortedData, CatPreStats, CatPreCounts;

方法二:前端表格度量表达式实现

无需修改脚本,直接在表格中创建度量,适合灵活调整的场景:

  1. 新建表格,将UserID设为维度
  2. 创建如下度量并命名为# Results Before Cat:
Avg(
    Aggr(
        // 计算当前Cat记录之前,同用户的不同结果数(排除当前Cat)
        Count(DISTINCT {<Date = {"<=$(=Date)"}, Result -= {'Cat'}>} Result),
        UserID, Date, Result
    )
)

度量逻辑说明:

  • Aggr(...)按用户、日期、结果分组,针对每条Cat记录,计算该日期及之前排除Cat外的不同结果数量
  • Avg(...)对每个用户的所有Cat对应的结果数取平均值,得到最终统计值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:10:08