如何在QlikView中实现Tableau的Include与Fixed类型LOD表达式?
嘿,我来帮你把Tableau里这两个LOD表达式转换成QlikView的写法,核心是对应上QlikView的Aggr函数和聚合逻辑,分两种情况详细说:
Tableau的Fixed LOD是完全忽略当前图表的视图维度,严格按照指定的维度组计算最大值,在QlikView里有两种实现方式:
脚本层预处理(推荐,性能更好)
在数据加载脚本中,直接按指定维度分组计算最大值,生成一个新字段,前端直接调用即可:
LOAD -- 加载原表所有字段 *, -- 按指定维度组计算最大生效日期 Max(Effective_Date) as Max_Effective_Date_Fixed RESIDENT YourSourceTableName -- 替换成你的源表名 GROUP BY Provider_data, Provider_Key, Provider_Item, Provider_service, Class_key, Schedule_price_key, Conftype_key;
这样处理后,每个指定维度组合对应的最大生效日期会被预计算到Max_Effective_Date_Fixed字段里,前端拖入这个字段就能得到和Fixed LOD一致的结果。
前端表达式实现(灵活,适合临时计算)
用QlikView的Aggr函数,指定维度组来计算聚合值,和Fixed的逻辑完全匹配:
Aggr(Max(Effective_Date), Provider_data, Provider_Key, Provider_Item, Provider_service, Class_key, Schedule_price_key, Conftype_key)
Aggr会严格按照括号内的维度列表分组计算最大值,不管当前图表用了什么维度,和Tableau Fixed的行为完全一致。
Tableau的Include LOD是在当前图表已有的视图维度基础上,额外加上指定维度来计算最大值,这里需要结合视图的现有维度来处理:
核心逻辑
Include的本质是「视图维度 + 指定维度」的组合分组计算,所以在QlikView里依然用Aggr函数,但要把当前视图的所有维度和指定的Include维度一起放进Aggr的维度列表里。
举个例子:如果当前图表已经用了Provider_data作为视图维度,那么Include对应的表达式就是:
Aggr(Max(Effective_Date), Provider_data, Provider_Key, Provider_Item, Provider_service, Class_key, Schedule_price_key, Conftype_key)
如果视图维度是Provider_data + Class_key,那表达式就调整为:
Aggr(Max(Effective_Date), Provider_data, Class_key, Provider_Key, Provider_Item, Provider_service, Schedule_price_key, Conftype_key)
注意点
QlikView没有自动识别当前视图维度的内置函数,所以需要你根据实际视图的维度,手动把它们补充到Aggr的维度列表中。如果需要更通用的写法,也可以在脚本层预先计算所有可能的维度组合,但这种方式灵活性较差,一般推荐前端根据视图维度动态调整Aggr表达式。
内容的提问来源于stack exchange,提问作者vikas tomar

