2010-02-12 48 views
0

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

具体而言,我们遇到以下问题。只需通过在表中设置相同的字段名称即可在QlikView中完成正常JOIN(equijoin)操作的等价物,然后这些字段将被链接。但是,我们的传统SQL JOIN操作之一使用“BETWEEN”查询来确定某个日期是否处于某个范围内,并在该范围内加入数据。

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

回答

0

当然可以 - 我想你想要它的IntervalMatch功能。

+0

IntervalMatch函数只能在加载脚本中使用。这相当于已经预先将数据加入数据库服务器并在之后加载。我想要的是让QlikView按原样加载两个表,然后在它们之间定义一个“BETWEEN”关系。但我认为这是不可能的。 – thomaspaulb 2010-05-13 15:25:09

+0

这是不可能的,除了在脚本。无论如何,你的答案是最好的QlikView可以做的,所以这里是要点! – thomaspaulb 2010-11-09 14:49:14

3

马库斯的答案是正确的。做到这一点的方法是使用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 cookbook(fillrowsintervalmatch.qvw)也帮助我解决了这个问题。