Qlikview - 多个如果在脚本中
Qlikview - multiple if in script
我有 table:
我想在脚本中这样加载数据:
(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 是空的。
有什么想法吗?
您需要嵌套 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
上面的脚本将产生以下结果:
但我不确定这是不是你想要的结果。正如您从上图中看到的那样,只有 yellow
值会使用这种方法分配 GROUP B
。
评论是这样吗
我认为最简单的解决方案是
If(mixmatch(id,'blue','green','red') and place='A','Group A',
If(mixmatch(id,'blue','green','yellow') and place='B','Group B')) as allPl
您也可以使用此解决方案。
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
];
您可以尝试使用 match() 或 wildmatch() 或 mixmatch() 来减少您的表达。
试试,
if(匹配(颜色,'blue','green','red') and place='A','Group A',
如果(匹配(颜色,'yellow','red','blue')和放置='B','Group B')
) 作为 appPl
此致,
我有 table:
我想在脚本中这样加载数据:
(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 是空的。
有什么想法吗?
您需要嵌套 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
上面的脚本将产生以下结果:
但我不确定这是不是你想要的结果。正如您从上图中看到的那样,只有 yellow
值会使用这种方法分配 GROUP B
。
评论是这样吗
我认为最简单的解决方案是
If(mixmatch(id,'blue','green','red') and place='A','Group A',
If(mixmatch(id,'blue','green','yellow') and place='B','Group B')) as allPl
您也可以使用此解决方案。
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
];
您可以尝试使用 match() 或 wildmatch() 或 mixmatch() 来减少您的表达。
试试,
if(匹配(颜色,'blue','green','red') and place='A','Group A', 如果(匹配(颜色,'yellow','red','blue')和放置='B','Group B') ) 作为 appPl
此致,