2016-07-01 22 views
1

我有表:的QlikView - 多重如果腳本

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是空的。

有什麼想法?

回答

1

最簡單的解決方案,我認爲,將是

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

您需要嵌套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

但我不知道這是你想要的結果。正如你從上面的圖片中可以看到的那樣,只有yellow值將使用這種方法分配GROUP B

發表評論是這樣的話

+0

否,我想ID 4,5,6是B組因爲我不能使用嵌套的循環 – pape

+0

你可以使用'place'列作爲標識嗎?例如,只需將'place'值連接到'GROUP'字符串?就像:''GROUP'&place as appPl' –

0

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

map_allPl: 
mapping 
load 
    color & '@@[email protected]@' & 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 & '@@[email protected]@' & 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

您可以嘗試使用match()或wildmatch()或mixmatch()來減少表達式。

嘗試像,

如果(匹配(顏色, '藍色', '綠色', '紅')和地方= 'A', 'A組', 如果(匹配(顏色,「黃」, '紅', '藍')和地點= 'B', 'B組') )作爲appPl

問候,

+0

這就是我的答案...請在閱讀完所有唱片後回覆 – EldadT