Qlikview - 加入两张桌子

时间:2017-05-02 11:16:24

标签: join qlikview

我需要在Qlikview中加入两个表来获得结果。

表: enter image description here

我需要加入这两个表来获得像这样的结果表

enter image description here

有什么想法吗?我可以使用交叉表吗?

2 个答案:

答案 0 :(得分:1)

对于Table1,您可以使用CrossTable功能来"旋转"表但保留第一列。

例如:

CrossTable(Location, Quantity)
Load 
  Reason, 
  LocA, 
  LocB
From 
  [Data.xlsx] (ooxml, embedded labels, table is Table1)
;

此后的结果表将是:

Location    Reason  Quantity
LocA        R1      5
LocA        R2      4
LocA        R3      5
LocA        R4      3
LocB        R1      2
LocB        R2      2
LocB        R3      3
LocB        R4      5

(您可以在Qlik的帮助网站了解CrossTable的更多信息 - CrossTable

以这种格式Table1后,您可以创建composite key(如x3ja建议的那样)。 Composite key基本上是连接的两个(或更多)字段。在您的情况下,表格之间的联接应位于两个字段 - LocationReason

// CrossTable the data to get it in correct format
Table1_Temp:
CrossTable(Location, Quantity)
Load 
  Reason, 
  LocA, 
  LocB
From 
  [Data.xlsx] (ooxml, embedded labels, table is Table1)
;

// Resident load to form the composite key
// based on Location and Reason fields
Table1:
Load
  Location & '|' & Reason as Key,
  Quantity
Resident
  Table1_Temp
;

// We dont need Table1_Temp table anymore
Drop Table Table1_Temp;

//Load the second table and create the same composite key
Table2:
Load 
  Location & '|' & Reason as Key,
  Location, 
  Reason, 
  Answer
From 
  [Data.xlsx] (ooxml, embedded labels, table is Table2)
;

重新加载后,您的数据模型将如下所示:

enter image description here

数据:

enter image description here

请注意,最后两行中AnswerLocationReason的值为null。这是因为Table2(基于您的屏幕截图)中的数据不包含LocB and R2LocA and R4Table1的组合。

如果您只想保留两个表中存在的组合,那么方法类似但有两点不同:

    应首先加载
  • Table2
  • 使用keep函数排除在Table1
  • 中加载的非常见记录

keep在Qlik的帮助网站 - keep

如果您想查看正在运行的脚本,只需对第一个标签进行评论,并取消注释example qvw

中的第二个标签

答案 1 :(得分:0)

有几种方法可以做到这一点。

  1. 使用关联。将表1加载两次并连接,创建一个复合键。因此,您最终会得到ReasonLocation和Quantity字段。然后加载表2,创建相同的复合键,为您提供ReasonLocation,Location,Reason&回答。然后表格将关联该复合键。
  2. 使用联接。加载Table1,表1中的左连接基于Reason,带有if [Location] = 'LocA' then [LocA] else [LocB]之类的if语句。这可能需要先将它加载到临时表中,然后在常驻负载中执行if语句。
  3. 您还可以将两者结合起来,并根据ReasonLocation字段连接#1中的表。

    希望有所帮助 - 对不起,它没有完全通过......