2010-02-12 4 views
0

В последнее время мы тестировали QlikView в офисе. Первое впечатление хорошее: он имеет привлекательный интерфейс и работает очень быстро. Мы хотим использовать его в качестве интерфейса базы данных для наших клиентов. Мы также пытаемся определить, может ли он принимать части нашей структуры реляционной базы данных. Однако мы сомневаемся, что его функции базы данных достаточно продвинуты, чтобы быть более привлекательным интерфейсом.Нестандартные соединения в QlikView?

В частности, мы сталкиваемся со следующей проблемой. Эквивалент нормальных операций JOIN (equijoin) можно выполнить в QlikView, просто установив одинаковые имена полей в таблицах - эти поля будут связаны. Однако одна из наших традиционных операций SQL JOIN использует запрос «BETWEEN», чтобы узнать, соответствует ли дата определенному диапазону и присоединяется к данным.

Можно ли указать такое отношение «без равноценности» между таблицами в QlikView? Или это неотъемлемое ограничение структуры так называемой «ассоциативной базы данных»?

ответ

0

Уверенный может - Я думаю, что вы хотите, чтобы функция IntervalMatch.

+0

Функция IntervalMatch может использоваться только в сценарии загрузки. Это эквивалентно уже предварительному объединению данных на сервере базы данных и последующей загрузке. Я хочу, чтобы QlikView загружал две таблицы в том виде, в каком они есть, и затем определите связь между ними. Но я думаю, что это невозможно. – thomaspaulb

+0

Это невозможно, за исключением загрузочного. Во всяком случае, ваш ответ лучший QlikView может сделать, так что вот моменты! – thomaspaulb

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. Если в таблицах нет общего ключа, например, идентификатора категории или чего-то еще (т. Е. Только даты должны быть сопоставлены), вы можете просто проигнорировать commonkey в приведенном выше примере. Я просто хотел включить его в пример, потому что мне это нужно в моем собственном случае, и, надеюсь, это поможет кому-то с подобной проблемой.

Вы можете найти это в справке Qlikview с надписью «IntervalMatch (extended)». Qlikview cookbook (fillrowsintervalmatch.qvw) также помог мне с этой проблемой.

Смежные вопросы