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;
方法二:前端表格度量表达式实现
无需修改脚本,直接在表格中创建度量,适合灵活调整的场景:
- 新建表格,将
UserID设为维度 - 创建如下度量并命名为
# 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
相关产品推荐
相关产品推荐

