Неофициальный форум пользователей Qlik Sense & Qlikview

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: d.pimkin от 05 апреля 2015, 10:26:27

Название: Проблема с Join
Отправлено: d.pimkin от 05 апреля 2015, 10:26:27
Всем доброго времени суток!

Изначально имеется таблица событий: начало события, конец события ...(№ оборудования - ключ, дата (дд.мм.гггг) - ключ).
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Fi024.radikal.ru%2F1504%2F64%2F40d2eddca2be.png&hash=ab6c85fabecafb3658aefad51656cdd0d4adf851)

К ней, с помощью left join сначала прицепляю одну таблицу по одному ключу, потом прицепляю еще 2 таблицы по двум другим (один появился только после предыдущей операции): по № и по дате (дд.мм.гггг).
Проблема в том, что если в изначальной таблице было несколько событий за Date для данного номера, то прицепляет он только одну запись:
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Fs017.radikal.ru%2Fi437%2F1504%2F35%2Fbb715dc4b652.png&hash=921936bea27ba1ddceb9aff1a5311ea4de9a44f4)

Так то оно понятно, что так и должно быть. Но как можно эту проблему обойти?

На всякий случай код приложил.

Events:
LOAD hostid,
     <...>,
     Date(curtime) as Date
FROM [D:\QlickView\Data\Event.qvd] (qvd);

Left Join
LOAD hostid,
     ATM,
     <...>
FROM [D:\QlickView\Data\ATM_info.qvd] (qvd);

Left Join
LOAD
ATM,
Date,
TT_Created,
TT_Closed
Resident TT;
DROP Table TT;

Left Join
LOAD ATM,
     Timestamp(NotEnabledFrom) as NotEnabledFrom,
     Timestamp(NotEnabledTo) as NotEnabledTo,
     Date(NotEnabledFrom) as Date
FROM [D:\QlickView\Data\NotEnabled.qvd] (qvd);
Название: Re: Проблема с Join
Отправлено: admin от 05 апреля 2015, 04:10:13
Не совсем уверен, что правильно понял проблему.
Вроде бы если в ТТ есть записи для ATM и Date , то TT_Created и TT_Closed должны быть заполнены значениями для одинаковых ATM и Date.
В качестве совета, попробуйте после каждого объединения выводить в промежуточный QVD, в целях отладки.
И дальнейшие связи делать уже с промежуточной таблицей,
т.е. примерно в такой последовательности.
1:
load
let join load
store into qvd
drop table 1;
load
left join
ну, и так далее.
Посмотрите результаты на каждом этапе, может что обнаружится неожиданное.
Название: Re: Проблема с Join
Отправлено: d.pimkin от 06 апреля 2015, 02:10:27
Проблему решил.
Дело было в том, что я Date получал через функцию Date, думая, что она отрезает часы, минуты и секунды, что, как оказалось, не так.
Заменил на Floor и теперь все работает, как надо.
Название: Re: Проблема с Join
Отправлено: d.pimkin от 06 апреля 2015, 02:24:17
А еще вот такой вопрос:
Можно ли как-нибудь в скрипте в Load обращаться к полям ранее загруженных таблиц через ассоциативную связь не используя Join?
Название: Re: Проблема с Join
Отправлено: admin от 06 апреля 2015, 08:59:51
ЦитироватьМожно ли как-нибудь в скрипте в Load обращаться к полям ранее загруженных таблиц через ассоциативную связь не используя Join?
Насколько я понимаю логику работы - нет.
На этапе формирования модели данных ассоциативный механизм не работает.
Название: Re: Проблема с Join
Отправлено: bibis от 06 апреля 2015, 09:21:34
Цитата: d.pimkin от 06 апреля  2015, 02:24:17  
А еще вот такой вопрос:
Можно ли как-нибудь в скрипте в Load обращаться к полям ранее загруженных таблиц через ассоциативную связь не используя Join?
Из руководства:
peek(fieldname [ , row [ , tablename ] ] )
Возвращает содержимое fieldname в записи, указанной с помощью row внутренней таблицы tablename.
Данные выбираются из ассоциативной базы данных QlikView.
Fieldname необходимо задать в виде строки (например, литералы ссылочного типа).
Row должно быть целым числом. 0 обозначает первую запись, 1 обозначает вторую и т.д.
Отрицательные числа указывают порядок с конца таблицы. -1 обозначает последнюю прочитанную
запись.
Если row не указано, принимается -1.
Tablename является меткой таблицы, см. Метки Таблицы (стр. 312), без двоеточия на конце. Если
tablename не указано, принимается текущая таблица. При использовании вне оператора load или
относительно другой таблицы должно быть включено tablename.
Название: Re: Проблема с Join
Отправлено: d.pimkin от 06 апреля 2015, 11:26:50
Точно. Про него и забыл. Надо будет попробовать. Спасибо!
Название: Re: Проблема с Join
Отправлено: admin от 06 апреля 2015, 12:27:36
Цитата: bibis от 06 апреля  2015, 09:21:34  
Цитата: d.pimkin от 06 апреля  2015, 02:24:17  
А еще вот такой вопрос:
Можно ли как-нибудь в скрипте в Load обращаться к полям ранее загруженных таблиц через ассоциативную связь не используя Join?
Из руководства:
peek(fieldname [ , row [ , tablename ] ] )
Возвращает содержимое fieldname в записи, указанной с помощью row внутренней таблицы tablename.
Данные выбираются из ассоциативной базы данных QlikView.
Да, но как здесь работает механизм ассоциативных связей?
Если мы peek-нем определенную запись, это же не значит что мы установим указатели других таблиц в соответствующие связям позиции?
Название: Re: Проблема с Join
Отправлено: bibis от 06 апреля 2015, 12:35:26
Ну тут можно конечно порассуждать о терминологии, я вот считаю, раз на каждом этапе данные представляют собой одну общую  большую таблицу, то модель ассоциативная.
Но не думаю,что подобный спор кому-то тут будет интересен :)
Название: Re: Проблема с Join
Отправлено: admin от 06 апреля 2015, 12:43:52
 :) Ни о каком споре и речи быть не может.
Только продуктивное общение.