我在QLikView中有一个脚本来提取和检查我的数据。它必须执行12次单独的数据提取。我做了一个可以正常工作的函数,但是有些事情是经过硬编码的,我想用相同的参数调用同一函数12次。我的问题是代码生成取决于函数中的参数。
我的代码的一部分是:
SUB SplitsenOpMiddel(middel, eersteVraag, laatsteVraag)
Temp_Middel_$(middel):
LOAD
Veldzoeknaam AS ZoekNaam,
VeldP_id AS $(middel)_VeldP_id,
Middel AS $(middel)_Middel,
MATEnr AS $(middel)_MATE,
IF(Vraagnr=1, VeldWaarde) AS $(middel)_Vraag001,
IF(Vraagnr=2, VeldWaarde) AS $(middel)_Vraag002,
IF(Vraagnr=3, VeldWaarde) AS $(middel)_Vraag003,
IF(Vraagnr=4, VeldWaarde) AS $(middel)_Vraag004,
IF(Vraagnr=5, VeldWaarde) AS $(middel)_Vraag005,
IF(Vraagnr=6, VeldWaarde) AS $(middel)_Vraag006,
IF(Vraagnr=1, VeldTypeGrp) AS $(middel)_Vraag001Type,
IF(Vraagnr=2, VeldTypeGrp) AS $(middel)_Vraag002Type,
IF(Vraagnr=3, VeldTypeGrp) AS $(middel)_Vraag003Type,
IF(Vraagnr=4, VeldTypeGrp) AS $(middel)_Vraag004Type,
IF(Vraagnr=5, VeldTypeGrp) AS $(middel)_Vraag005Type,
IF(Vraagnr=6, VeldTypeGrp) AS $(middel)_Vraag006Type
RESIDENT Data2
WHERE Vraagsort = '$(middel)';
在这种情况下,函数调用为:
CALL SplitsenOpMiddel('A', 1, 6)
到目前为止,数字1到6已被硬编码,但是我想要的是生成依赖于第二个和第三个参数的代码。
我的第二个函数调用将是:
CALL SplitsenOpMiddel('B', 7, 10)
自动地,代码必须是:
Temp_Middel_$(middel):
LOAD
Veldzoeknaam AS ZoekNaam,
VeldP_id AS $(middel)_VeldP_id,
Middel AS $(middel)_Middel,
MATEnr AS $(middel)_MATE,
IF(Vraagnr=7, VeldWaarde) AS $(middel)_Vraag007,
IF(Vraagnr=8, VeldWaarde) AS $(middel)_Vraag008,
IF(Vraagnr=9, VeldWaarde) AS $(middel)_Vraag009,
IF(Vraagnr=10, VeldWaarde) AS $(middel)_Vraag010,
IF(Vraagnr=7, VeldTypeGrp) AS $(middel)_Vraag007Type,
IF(Vraagnr=8, VeldTypeGrp) AS $(middel)_Vraag008Type,
IF(Vraagnr=9, VeldTypeGrp) AS $(middel)_Vraag009Type,
IF(Vraagnr=10, VeldTypeGrp) AS $(middel)_Vraag0010Type
RESIDENT Data2
WHERE Vraagsort = '$(middel)';
QlikView中有一种方法可以执行此操作吗?
我需要相同类型代码生成的另一部分代码是:
Check_Middel_$(middel):
NOCONCATENATE LOAD
ZoekNaam,
$(middel)_VeldP_id,
$(middel)_Middel,
$(middel)_MATE,
IF(ISNULL($(middel)_Vraag001),
IF(ISNULL($(middel)_Vraag002) AND
ISNULL($(middel)_Vraag003) AND
ISNULL($(middel)_Vraag004) AND
ISNULL($(middel)_Vraag005) AND
ISNULL($(middel)_Vraag006), 'G', 'F'))
AS $(middel)_Leeg_Check,
IF($(middel)_Vraag001 = 0,
IF($(middel)_Vraag002 = 0 AND
$(middel)_Vraag003 = 0 AND
$(middel)_Vraag004 = 0 AND
$(middel)_Vraag005 = 0 AND
$(middel)_Vraag006 = 0, 'G', 'F'))
AS $(middel)_0_Check,
IF(($(middel)_Vraag001 <> 0 AND NOT ISNULL($(middel)_Vraag001)),
IF(ISNULL($(middel)_Vraag002) OR
ISNULL($(middel)_Vraag003) OR
ISNULL($(middel)_Vraag004) OR
ISNULL($(middel)_Vraag005) OR
ISNULL($(middel)_Vraag006), 'F',
IF(($(middel)_Vraag002 = 0) AND ($(middel)_Vraag003 = 0) AND ($(middel)_Vraag004 = 0) AND ($(middel)_Vraag005 = 0) AND ($(middel)_Vraag006 = 0), 'M', 'G')))
AS $(middel)_Vol_Check,
$(middel)_Vraag001,
$(middel)_Vraag002,
$(middel)_Vraag003,
$(middel)_Vraag004,
$(middel)_Vraag005,
$(middel)_Vraag006
RESIDENT Middel_$(middel);
DROP TABLE Middel_$(middel);
答案 0 :(得分:1)
您需要即时“构建”脚本。以下代码显示了如何通过第一个功能SplitsenOpMiddel
来实现此目的。像这样call SplitsenOpMiddel('A', 1, 6)
调用此函数将生成带有必填字段的表。
您可以查看示例qvw here。试图涵盖这两种情况,但可能无法按预期工作,但会给您一个想法。
sub SplitsenOpMiddel(middel, eersteVraag, laatsteVraag)
let Temp_Middel = 'Temp_Middel_' & '$(middel)' & ':' & chr(13) & 'Load' & chr(13);
for b = $(eersteVraag) to $(laatsteVraag)
let Temp_Middel = '$(Temp_Middel)' & 'IF(Vraagnr=' & $(b) & ', VeldWaarde) AS' & ' $(middel)' & '_Vraag00' & $(b) & ',' & chr(13) &
'IF(Vraagnr=' & $(b) & ', VeldTypeGrp) AS' & ' $(middel)' & '_Vraag00' & $(b) & 'Type,' & chr(13);
next
let Temp_Middel = '$(Temp_Middel)' & 'Veldzoeknaam AS ZoekNaam,' & chr(13) &
'VeldP_id AS ' & '$(middel)' & '_VeldP_id,' & chr(13) &
'Middel AS ' & '$(middel)'& '_Middel,' & chr(13) &
'MATEnr AS ' & '$(middel)' & '_MATE ' & chr(13) &
'Resident Data2' & chr(13) &
'WHERE Vraagsort =' & chr(39) & '$(middel)' & chr(39) & ';';
$(Temp_Middel);
end sub
答案 1 :(得分:0)
如果您的问题是是否可行,我会回答是。 QlikView中的变量被处理为在调用时要替换的文本,因此我想出理由为什么它不起作用。