Qlikview更新,每周列表

时间:2017-11-14 10:35:54

标签: qlikview

我有表List1(9000 +/-记录)和List2(9500记录+/-)的字段;

episodenum(PrimaryKey) ArchiveDate(每个列表都是唯一的) 数据(多个字段)

我希望每周加入表格,保留

  • List1中存在的记录但不存在于List2中,分类为状态'OffList',数据按List1,
  • List1和List2中的记录分类为状态'OnList',数据按List2,
  • List2中存在的记录不存在于List1中,分类为状态'NewToList',数据按List2(参见附图)List1 and List2 and desired result

这在Sql中很简单,但是在Qlikview加载中发生的自动连接让我感到难过。

我希望减少加载的记录数量,因为当“OffList”记录被保留时,表将随着时间的推移而构建,并且为了能够使用简单的计数表达式而不是完整集所需的选择和集合分析记录的加载和组合。

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:0)

由于你非常善良地提供一个例子,我会给你一个使用相同数据的脚本:

Data:
LOAD * INLINE [
    X, Y
    1, A1
    2, A2
    3, A3
];

Left Join (Data)
LOAD
    X, 
    Y as NewY;
LOAD * INLINE [
    X, Y
    1, B1
    2, B2
    4, B4
];

Left Join (Data)
LOAD
    X,
    if(IsNull(NewY), 'OffList', 'OnList') as Status
Resident Data;

DROP FIELD NewY;

LOAD
    *,
    'NewToList' as Status
WHERE Not Exists(X);
LOAD * INLINE [
    X, Y
    2, B2
    3, B3
    4, B3
];

现在逐步解释:

  • 加载原始表格
  • 使用左连接加载表的第二个版本,这将在现有表的右侧添加新列。 X将是两个表上的相同列,因此它将链接第一个中的相同记录和第二个上的相同记录。您需要重命名Y,否则它也将用作连接表的键。
  • 取表Key,进行新的Left Join,这次评估你在NewY列上的内容。如果它为null,则表示这是一条新记录。如果它已经填满,已经存在。第一阶段的分类已经完成。
  • 你可以放弃NewY,你不再需要了它。
  • 再次加载表格的第二个版本,确保仅加载不存在的条目(存在(X))。如果你只加载新的那个,你可以说这个的状态肯定是NewToList。

希望这会有所帮助,这可以被视为一种“简单”的解决方案。