【问题标题】:How to minimize duplicate queries如何最小化重复查询
【发布时间】:2017-05-26 13:37:07
【问题描述】:

假设我有两个数据集。

在 QlikView 中,如果我尝试使用如下查询将这些包含在负载中:

sql select marriage_id, primary_person_id, seconary_person_id, marriage_start_date, marriage_end_date from marriage_table;

sql select person_id as primary_person_id, person_id as seconary_person_id, first_name, middle_name, last_name, date_of_birth from person_table;

我会收到一条错误消息,说明我可能会导致自己拥有不准确的数据,因为 QlikView 有两条可能的路径可以访问 PERSON_TABLE。这是有道理的,但我真的很讨厌像下面这样复制选择和表格的想法。

sql select marriage_id, primary_person_id, seconary_person_id, marriage_start_date, marriage_end_date from marriage_table;

sql select person_id as primary_person_id, first_name, middle_name, last_name, date_of_birth from person_table;

sql select person_id as seconary_person_id, first_name, middle_name, last_name, date_of_birth from person_table;

有没有更好的方法来处理我错过的这个问题?

【问题讨论】:

  • 我不熟悉QlikView,但是寻找“sql join”。对 person 表的查询不知道现在是哪个人,因为它只是一个查询。光看人表,连他们有没有结婚都不知道,也无从得知。
  • @KennyOstrom,就是这样——Qlikview 是根据列名处理连接的。如果我只处理 SQL,那就容易多了!

标签: data-analysis qlikview


【解决方案1】:

您在该图中显示的内容称为“循环引用”(我认为 Qlikview 将其称为“合成密钥”),这是您真正应该尽量避免的事情,因为它可能会使您的应用程序崩溃,而不是崩溃,而是显示结果不正确(更糟)。 在我看来,您有两种选择:

Op1 - 复制您的 PERSON_TABLE,以便 PRIMARY_PERSON_ID 将链接到 PERSON_TABLE_1,而 SECONDARY_PERSON_ID 将链接到 PERSON_TABLE_2。

PERSON_TABLE_1:
SQL SELECT person_id as primary_person_id,
first_name as first_name_1,
middle_name as middle_name_1,
last_name as last_name_1, 
date_of_birth as date_of_birth_1 
FROM person_table

PERSON_TABLE_2:
SQL SELECT person_id as secondary_person_id,
first_name as first_name_2,
middle_name as middle_name_2,
last_name as last_name_2, 
date_of_birth as date_of_birth_2 
FROM person_table

此选项的问题是您必须为每个字段选择不同的别名,这通常不是很方便,具体取决于您在应用中执行的分析类型。

Op2:创建一个已经包含两人数据的唯一 MARRIAGE_TABLE。为此,您可以创建一个带有两个 JOINS 的 SQL 查询(为简单起见,我只使用名字和中间名,但您可以添加所有其他字段)

SELECT T1.*, T2.first_name as first_name_1, T2.middle_name as middle_name_1, 
T3.first_name as first_name_2, T3.middle_name as middle_name_2
FROM MARRIAGE_TABLE AS T1
LEFT JOIN PERSON_TABLE AS T2 ON Q1.primary_person_id = T2.person_id 
LEFT JOIN PERSON_TABLE AS T3 ON Q1.secondary_person_id = T3.person_id 

这将产生一个包含以下列的唯一表:

MARRIAGE_ID PRIMARY_PERSON_ID SECONDARY_PERSON_ID MARRIAGE_START_DATE MARRIAGE_END_DATE FIRST_NAME_1 MIDDLE_NAME_1 FIRST_NAME_2 MIDDLE_NAME_2

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    相关资源
    最近更新 更多