QlikView公式构建求助:计算客户月度汇总最大值之和
QlikView解决方案:计算客户月度汇总最大值的总和
Hi Andreas, 早上好,新年快乐!针对你的需求,我提供两种QlikView实现方案,分别适配不同的场景:
方案一:脚本预处理(推荐大数据量场景)
因为你的数据集包含12000个客户及多年月度数据,脚本预处理能在数据加载阶段完成计算,效率远高于前端实时计算。步骤如下:
计算每个客户每月的总Value
先按customer和month分组,汇总同一客户同月份下所有netting的value:MonthlyCustomerTotal: LOAD customer, month, sum(value) as MonthlyTotal FROM [你的数据源文件路径/数据库连接] GROUP BY customer, month;这一步会生成类似示例中的月度汇总:customer1的201712为140,201801为141。
提取每个客户的最大月度汇总值
基于上面的表,按customer分组取最大值:CustomerMaxMonthly: LOAD customer, max(MonthlyTotal) as CustomerMaxValue RESIDENT MonthlyCustomerTotal GROUP BY customer;此时每个客户仅保留其最大的月度总值,比如customer1为141,customer2为400。
计算所有客户最大值的总和
最后汇总所有客户的最大值,得到最终上报数值:FinalTotal: LOAD sum(CustomerMaxValue) as OverallTotal RESIDENT CustomerMaxMonthly;运行脚本后,
OverallTotal就是你需要的结果(示例中为541)。
方案二:前端表达式(适合实时交互场景)
如果需要在图表、文本框等前端对象中直接计算,无需修改加载脚本,可以使用嵌套聚合表达式:
Sum(Aggr(Max(Aggr(Sum(value), customer, month)), customer))
表达式层级解释:
- 最内层
Aggr(Sum(value), customer, month):计算每个客户每月的总value; - 中间层
Max(...):为每个客户筛选出其月度汇总的最大值; - 最外层
Sum(...):将所有客户的最大值累加得到最终结果。
注意:大数据量下,前端嵌套聚合可能会有性能损耗,因此优先推荐方案一。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

