Qlik Sense循环创建字段别名失败问题求助
Qlik Sense循环创建字段别名失败的解决方案
问题分析
你在循环生成CELLPHONE_FIELDA1这类字段别名时,两个版本的代码都存在语法问题:
- 版本1:
$(phoneType)展开后是带单引号的字符串(如'CELLPHONE'),导致别名变成'CELLPHONE'_FIELDA1,这不是合法的字段名,Qlik无法识别。 - 版本2:Qlik的LOAD语句字段别名不支持直接用
&做字符串拼接,这种语法仅在脚本的变量赋值等场景有效。
正确实现方式
方式1:用$(=...)动态计算别名
通过宏展开计算拼接后的字段名,同时去掉phoneType的单引号:
// 定义手机号类型数组 SET phoneTypes = 'CELLPHONE', 'WORKPHONE'; // 循环处理每种手机号类型 FOR each phoneType IN phoneTypes FOR i = 0 TO 2 LET j = i + 1; LEFT JOIN (table1) LOAD DISTINCT // 去掉单引号后拼接成合法字段名 FIELDA as $(=Replace('$(phoneType)', '''', '') & '_FIELDA' & $(j)), Date(Date(CREATEDDATE)-$(i)) as CREATEDDATE, $(phoneType) as PHONENUMBER Resident table2; NEXT NEXT
方式2:提前生成别名变量(更易读)
先清理phoneType的单引号,再生成完整的别名变量,最后在LOAD中引用:
// 定义手机号类型数组 SET phoneTypes = 'CELLPHONE', 'WORKPHONE'; // 循环处理每种手机号类型 FOR each phoneType IN phoneTypes // 移除phoneType的单引号 LET cleanPhoneType = Replace('$(phoneType)', '''', ''); FOR i = 0 TO 2 LET j = i + 1; // 生成完整的字段别名 LET aliasName = '$(cleanPhoneType)_FIELDA$(j)'; LEFT JOIN (table1) LOAD DISTINCT FIELDA as $(aliasName), Date(Date(CREATEDDATE)-$(i)) as CREATEDDATE, $(phoneType) as PHONENUMBER Resident table2; NEXT NEXT
内容的提问来源于stack exchange,提问作者MLS
相关产品推荐
相关产品推荐

