在 Qlik 中创建自己的分组
Create own grouping in 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
组
在上面的例子中,它应该有一个 "hidden" 数据作为
+----+--------+-------+
| 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)
结果table:
+-------+--------+
| Group | Amount |
+-------+--------+
| B | 50 |
| C | 20 |
| D | 30 |
+-------+--------+
标的table:
+----+--------+-------+
| ID | Amount | Group |
+----+--------+-------+
| 1 | 20 | C |
| 2 | 30 | D |
| 3 | 50 | B |
+----+--------+-------+
我认为您需要使用聚合函数在图表中添加一个计算维度
这是我对你的问题的解决方案,
您的示例有点不正确,因为您的示例中 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)
将产生以下结果:
我有维度
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
在上面的例子中,它应该有一个 "hidden" 数据作为
+----+--------+-------+
| 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)
结果table:
+-------+--------+
| Group | Amount |
+-------+--------+
| B | 50 |
| C | 20 |
| D | 30 |
+-------+--------+
标的table:
+----+--------+-------+
| ID | Amount | Group |
+----+--------+-------+
| 1 | 20 | C |
| 2 | 30 | D |
| 3 | 50 | B |
+----+--------+-------+
我认为您需要使用聚合函数在图表中添加一个计算维度
这是我对你的问题的解决方案,
您的示例有点不正确,因为您的示例中 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)
将产生以下结果: