Нестандартные объединения в QlikView? - PullRequest
1 голос
/ 12 февраля 2010

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

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

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

Ответы [ 2 ]

4 голосов
/ 16 ноября 2012

Маркус 'ответ правильный. Способ сделать это - использовать 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 (fillrowsintervalmatch.qvw) также помогла мне с этой проблемой.

1 голос
/ 13 февраля 2010

Конечно можно - я думаю, что вы хотите, чтобы это была функция IntervalMatch.

...