2010-02-12 122 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)也幫助我解決了這個問題。