1

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

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

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

4

2 回答 2

4

马库斯的回答是正确的。这样做的方法是使用 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 帮助中找到它。Qlikview 食谱( fillrowsintervalmatch.qvw ) 也帮助我解决了这个问题。

于 2012-11-16T14:29:04.280 回答
1

当然可以 - 我认为您想要的是 IntervalMatch 功能。

于 2010-02-13T04:44:51.743 回答