2016-07-01 1 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

가 아니, 그룹 B로 ID를 4, 5, 6 원 왜냐하면 중첩 된 if 루프를 사용할 수 없기 때문입니다. – pape

+0

'장소'열을 ID로 사용할 수 있습니까? 예를 들어'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', 경우 (일치 (컬러, '노란색 경우 ',' ','청 ') 및 장소 ='appPl

감사로 B ','그룹 B ') )를

+0

그건 정확히 내 대답이었습니다 ... 모든 aswers를 읽은 후에 회신 해주십시오. – EldadT