Database QlikView中的非标准联接?

Database QlikView中的非标准联接?,database,join,associative,qlikview,Database,Join,Associative,Qlikview,最近,我们一直在办公室测试QlikView。第一印象很好:它有一个吸引人的界面,执行速度非常快。我们希望将其用作客户的数据库前端。我们还试图确定它是否可以接管部分关系数据库结构。然而,我们怀疑它的数据库功能是否先进到足以成为一个更具吸引力的前端 具体来说,我们遇到了以下问题。在QlikView中,只需在表之间设置相等的字段名,就可以完成与普通联接(equijoin)操作等效的操作,然后这些字段将被链接。然而,我们传统的SQL连接操作之一使用“BETWEEN”查询来确定日期是否在某个范围内,并连接

最近,我们一直在办公室测试QlikView。第一印象很好:它有一个吸引人的界面,执行速度非常快。我们希望将其用作客户的数据库前端。我们还试图确定它是否可以接管部分关系数据库结构。然而,我们怀疑它的数据库功能是否先进到足以成为一个更具吸引力的前端

具体来说,我们遇到了以下问题。在QlikView中,只需在表之间设置相等的字段名,就可以完成与普通联接(equijoin)操作等效的操作,然后这些字段将被链接。然而,我们传统的SQL连接操作之一使用“BETWEEN”查询来确定日期是否在某个范围内,并连接该范围内的数据


是否可以在QlikView中指定表之间的这种“非对等连接”关系?或者这是所谓“关联数据库”结构的固有限制

当然可以-我想你想要的是IntervalMatch函数。

当然可以-我想你想要的是IntervalMatch函数。

马库斯的答案是正确的。方法是使用IntervalMatch。您可以让这两个表保持原样,并使用IntervalMatch在它们之间添加“中间”关系。加载脚本运行后,无法添加关系

首先,必须加载具有日期范围的表(省略sql查询)。比如说:

Ranges:
LOAD
    rangeID,
    validfrom, // date
    validto,   // date
    commonkey, // common key for the two tables
    price;     // the data that's needed as a result of the linking
其次,加载另一个带有日期的表

Data:
LOAD
    column1,
    column2,
    date,
    commonkey;
接下来,您必须使用IntervalMatch。这是一种方法:

Left Join (Data)
IntervalMatch(date, commonkey)
LOAD
    validfrom,
    validto,
    commonkey
Resident Ranges;
现在您有了两个表之间的链接。您可以通过添加以下内容删除生成的合成密钥:

Left Join (Data)
LOAD
    validfrom,
    validto,
    commonkey,
    rangeID
Resident Ranges;

DROP Fields validfrom, validto FROM Data;
现在使用
rangeID
键链接这些表。如果这些表没有共同的键,比如类别id或其他东西(即只需要匹配日期),您可以忽略上面示例中的
commonkey
。我只是想把它包括在这个例子中,因为我需要它在我自己的案例中,希望它能帮助有类似问题的人


您可以在标签为“IntervalMatch(extended)”的Qlikview帮助中找到这一点。(fillrowsintervalmatch.qvw)也帮助我解决了这个问题。

马库斯的回答是正确的。方法是使用IntervalMatch。您可以让这两个表保持原样,并使用IntervalMatch在它们之间添加“中间”关系。加载脚本运行后,无法添加关系

首先,必须加载具有日期范围的表(省略sql查询)。比如说:

Ranges:
LOAD
    rangeID,
    validfrom, // date
    validto,   // date
    commonkey, // common key for the two tables
    price;     // the data that's needed as a result of the linking
其次,加载另一个带有日期的表

Data:
LOAD
    column1,
    column2,
    date,
    commonkey;
接下来,您必须使用IntervalMatch。这是一种方法:

Left Join (Data)
IntervalMatch(date, commonkey)
LOAD
    validfrom,
    validto,
    commonkey
Resident Ranges;
现在您有了两个表之间的链接。您可以通过添加以下内容删除生成的合成密钥:

Left Join (Data)
LOAD
    validfrom,
    validto,
    commonkey,
    rangeID
Resident Ranges;

DROP Fields validfrom, validto FROM Data;
现在使用
rangeID
键链接这些表。如果这些表没有共同的键,比如类别id或其他东西(即只需要匹配日期),您可以忽略上面示例中的
commonkey
。我只是想把它包括在这个例子中,因为我需要它在我自己的案例中,希望它能帮助有类似问题的人


您可以在标签为“IntervalMatch(extended)”的Qlikview帮助中找到这一点。(fillrowsintervalmatch.qvw)也帮助我解决了这个问题。

IntervalMatch函数只能在加载脚本中使用。这相当于已经在数据库服务器中预先加入数据,然后再加载数据。我想让QlikView按原样加载两个表,然后定义它们之间的“中间”关系。但我认为这是不可能的。这是不可能的,除了在加载脚本中。无论如何,您的答案是QlikView所能做的最好的,所以这里是要点!IntervalMatch函数只能在加载脚本中使用。这相当于已经在数据库服务器中预先加入数据,然后再加载数据。我想让QlikView按原样加载两个表,然后定义它们之间的“中间”关系。但我认为这是不可能的。这是不可能的,除了在加载脚本中。无论如何,您的答案是QlikView所能做的最好的,所以这里是要点!