Qlikview加载数据时如何实现列数据转换为行数据
QlikView加载Excel宽表转Person-Item长表实现方法
方法1:使用CrossTable内置函数(推荐)
CrossTable是QlikView专门用于宽表转长表的内置函数,代码最简洁,实现效率最高,操作步骤如下:
- 打开QlikView脚本编辑器(快捷键
Ctrl+E) - 配置Excel数据源连接后,修改LOAD语句为如下结构:
// CrossTable语法:CrossTable(属性列名, 值列名, 保留的维度列数量) FinalTable: LOAD Person, Item FROM [你的Excel文件全路径.xlsx] (ooxml, embedded labels, table是你的工作表名) CrossTable(ItemType, Item, 1); // 不需要保留原字段类型的话可以直接删除该字段 DROP FIELD ItemType;
说明:第三个参数填1代表保留Person这1列不动,剩下的Food、Drink、Snack三列会自动转为行,原来的1行数据会生成3行对应Item值。
方法2:手动拼接多LOAD(适合自定义场景)
如果需要对不同类型的Item做单独过滤或计算,可以用Concatenate拼接三次加载结果,逻辑更直观:
// 加载食品类数据 FinalTable: LOAD Person, Food as Item FROM [你的Excel文件全路径.xlsx] (ooxml, embedded labels, table是你的工作表名) WHERE Len(Trim(Food)) > 0; // 过滤空值 // 拼接饮品类数据 Concatenate(FinalTable) LOAD Person, Drink as Item FROM [你的Excel文件全路径.xlsx] (ooxml, embedded labels, table是你的工作表名) WHERE Len(Trim(Drink)) > 0; // 拼接零食类数据 Concatenate(FinalTable) LOAD Person, Snack as Item FROM [你的Excel文件全路径.xlsx] (ooxml, embedded labels, table是你的工作表名) WHERE Len(Trim(Snack)) > 0;
小提示:两种方法都可以加空值过滤逻辑,避免某类Item为空时生成无效行。
内容的提问来源于stack exchange,提问作者JonJon
相关产品推荐
相关产品推荐

