2017-05-04 50 views
0

创建自己的分组我有一个尺寸在Qlik

Group: 
A 
B 
C 
D 

和数据:

+----+--------+-------+ 
| ID | Amount | Group | 
+----+--------+-------+ 
| 1 |  10 | A  | 
| 1 |  20 | C  | 
| 2 |  30 | A  | 
| 3 |  40 | A  | 
| 3 |  50 | B  | 
+----+--------+-------+ 

在我的数据,它不会有组D存在,逻辑将是是否存在组A ,但在组B or C中不存在,那么它将归类为组D

在上面的例子中,它应该有一个“隐藏”的数据为

+----+--------+-------+ 
| ID | Amount | Group | 
+----+--------+-------+ 
| 2 |  10 | D  | 
+----+--------+-------+ 

我知道我可以创建在Load脚本,但我的数据被保存一个月一个月的,这意味着它可以创造三倍以上的虚拟数据。

问题
那么有可能使用表达式来创建分组吗?

以我条形图,我有一个尺寸:

=IF(Group = 'A', null(), Group) 

对于测量,我的主意它可以是

Group D: 
sum({$<Group = 'A'>} Amount) - sum({$<Group = - 'A', ID = P({$<Group = 'A'>} ID)>} Amount) 
Other Group: 
sum({$<Group = - 'A', $<ID = P({$<Group = 'A'>} ID)>} Amount) 

结果表:

+-------+--------+ 
| Group | Amount | 
+-------+--------+ 
| B  |  50 | 
| C  |  20 | 
| D  |  30 | 
+-------+--------+ 

基础表:

+----+--------+-------+ 
| ID | Amount | Group | 
+----+--------+-------+ 
| 1 |  20 | C  | 
| 2 |  30 | D  | 
| 3 |  50 | B  | 
+----+--------+-------+ 
+0

如何EXA你想显示这个吗?你的例子中的ID = 2应该不是组A,而是组D?既然它不存在于B和D? – Shaun

+0

谢谢,我已经更新了这个例子,'ID = 2'应该在'D组'中,但不是'ID = 1'。 – Prisoner

+0

我真的不明白你怎么能够在表达中做到这一点,同时保持低响应时间。这最好在脚本中完成。 – Shaun

回答

1

这里是我的问题的解决方案,

你的例子是有点不正确,因为ID 2具有的含量为30而不是在你的例子10:

我会做的是在这些行中的东西。

脚本:

DATA: 
LOAD * INLINE [ 
    ID, Amount, Group 
    1, 10, A  
    1, 20, C  
    2, 30, A  
    3, 40, A  
    3, 50, B  
]; 
Left Join 
LOAD ID, Concat(Group,',') as GroupLink Resident DATA Group By ID; 
在维度

然后:

=If(WildMatch(GroupLink,'A') AND NOT (WildMatch(GroupLink,'B') OR WildMatch(GroupLink,'C')), 
'D', Group) 

然后在您的表达:

=Sum(Amount) 

将产生如下: enter image description here

-1

我认为你需要在图表中添加计算的尺寸与汇聚功能

+0

任何示例?还是更详细? – Prisoner

+0

你不能在维度中使用聚合,即使你可能这是不好的做法。 – Shaun