Qlikview - 多个 if 在脚本中

Qlikview - multiple if in script

提问人:pape 提问时间:7/1/2016 最后编辑:pape 更新时间:7/6/2016 访问量:2617

问:

我有表:

enter image description here

我想在脚本中加载数据:

 (if((color = 'blue' or color = 'green' or color = 'red') and place = 'A','GROUP A') or 
 if((color = 'yellow' or color = 'red' or color = 'blue') and place = 'B','GROUP B')) as allPl

但是当创建列表时,我的allPl是空的。

有什么想法吗?

循环 QlikView

评论


答:

0赞 Stefan Stoichev 7/1/2016 #1

您需要嵌套语句才能获得结果。if

if( condition1 = true, result1,
  if(condition2 = true <at this point condition1 = false>, result2 ...

对于您的情况:

 if(    color = 'blue' 
     or color = 'green' 
     or color = 'red','GROUP A',  
   if(   color = 'yellow' 
      or color = 'red' 
      or color = 'blue','GROUP B')
  ) as allPl    

上面的脚本将产生以下结果:

enter image description here

但我不确定这是你想要的结果。从上图中可以看出,只有值将使用这种方法分配。yellowGROUP B

发表评论就是这样

评论

0赞 pape 7/1/2016
不,我希望 id 4、5、6 是 B 组,以防万一我不能使用嵌套的 if 循环
0赞 Stefan Stoichev 7/1/2016
您可以使用列作为标识吗?例如,只是将值与字符串连接起来?像这样:placeplaceGROUP'GROUP ' & place as appPl
1赞 EldadT 7/2/2016 #2

我认为,最简单的解决方案将是

If(mixmatch(id,'blue','green','red') and place='A','Group A',
   If(mixmatch(id,'blue','green','yellow') and place='B','Group B')) as allPl
0赞 Ely Malki 7/5/2016 #3

您也可以使用此解决方案。

map_allPl:
mapping
load
    color & '@@separator@@' &  place    AS IN
    ,allPl                              AS  OUT
inline
[color,place,allPl
blue,A,GROUP A
green,A,GROUP A
red,A,GROUP A
yellow,B,GROUP B
red,B,GROUP B
blue,B,GROUP B];

table:
load
    *
    ,applyMap('map_allPl',color & '@@separator@@' &  place,'nd')    AS  allPl
inline
[id,color,place
1,blue,A
2,green,A
3,red,A
4,yellow,B
5,red,B
6,blue,B
];
0赞 dreamer 7/6/2016 #4

您可以尝试使用 match() 或 wildmatch() 或 mixmatch() 来减少表达式。

试着说,

if(match(color,'blue','green','red') and place='A','Group A', if(match(color,'yellow','red','blue') and place='B','Group B') ) 作为 appPl

问候

评论

0赞 EldadT 7/7/2016
这正是我的答案......请在阅读完所有 Aswers 后回复