Проблема с Join

Автор d.pimkin, апреля 05, 2015, 10:26:27 am

« предыдущая - следующая »

d.pimkin

Всем доброго времени суток!

Изначально имеется таблица событий: начало события, конец события ...(№ оборудования - ключ, дата (дд.мм.гггг) - ключ).


К ней, с помощью left join сначала прицепляю одну таблицу по одному ключу, потом прицепляю еще 2 таблицы по двум другим (один появился только после предыдущей операции): по № и по дате (дд.мм.гггг).
Проблема в том, что если в изначальной таблице было несколько событий за Date для данного номера, то прицепляет он только одну запись:


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

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

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);

admin

Не совсем уверен, что правильно понял проблему.
Вроде бы если в ТТ есть записи для ATM и Date , то TT_Created и TT_Closed должны быть заполнены значениями для одинаковых ATM и Date.
В качестве совета, попробуйте после каждого объединения выводить в промежуточный QVD, в целях отладки.
И дальнейшие связи делать уже с промежуточной таблицей,
т.е. примерно в такой последовательности.
1:
load
let join load
store into qvd
drop table 1;
load
left join
ну, и так далее.
Посмотрите результаты на каждом этапе, может что обнаружится неожиданное.

d.pimkin

Проблему решил.
Дело было в том, что я Date получал через функцию Date, думая, что она отрезает часы, минуты и секунды, что, как оказалось, не так.
Заменил на Floor и теперь все работает, как надо.

d.pimkin

А еще вот такой вопрос:
Можно ли как-нибудь в скрипте в Load обращаться к полям ранее загруженных таблиц через ассоциативную связь не используя Join?

admin

ЦитироватьМожно ли как-нибудь в скрипте в Load обращаться к полям ранее загруженных таблиц через ассоциативную связь не используя Join?

Насколько я понимаю логику работы - нет.
На этапе формирования модели данных ассоциативный механизм не работает.

bibis

Цитата: d.pimkin от апреля 06, 2015, 02:24:17 am
А еще вот такой вопрос:
Можно ли как-нибудь в скрипте в Load обращаться к полям ранее загруженных таблиц через ассоциативную связь не используя Join?

Из руководства:
peek(fieldname [ , row [ , tablename ] ] )
Возвращает содержимое fieldname в записи, указанной с помощью row внутренней таблицы tablename.
Данные выбираются из ассоциативной базы данных QlikView.
Fieldname необходимо задать в виде строки (например, литералы ссылочного типа).
Row должно быть целым числом. 0 обозначает первую запись, 1 обозначает вторую и т.д.
Отрицательные числа указывают порядок с конца таблицы. -1 обозначает последнюю прочитанную
запись.
Если row не указано, принимается -1.
Tablename является меткой таблицы, см. Метки Таблицы (стр. 312), без двоеточия на конце. Если
tablename не указано, принимается текущая таблица. При использовании вне оператора load или
относительно другой таблицы должно быть включено tablename.

d.pimkin

Точно. Про него и забыл. Надо будет попробовать. Спасибо!

admin

Цитата: bibis от апреля 06, 2015, 09:21:34 am
Цитата: d.pimkin от апреля 06, 2015, 02:24:17 am
А еще вот такой вопрос:
Можно ли как-нибудь в скрипте в Load обращаться к полям ранее загруженных таблиц через ассоциативную связь не используя Join?

Из руководства:
peek(fieldname [ , row [ , tablename ] ] )
Возвращает содержимое fieldname в записи, указанной с помощью row внутренней таблицы tablename.
Данные выбираются из ассоциативной базы данных QlikView.

Да, но как здесь работает механизм ассоциативных связей?
Если мы peek-нем определенную запись, это же не значит что мы установим указатели других таблиц в соответствующие связям позиции?

bibis

Ну тут можно конечно порассуждать о терминологии, я вот считаю, раз на каждом этапе данные представляют собой одну общую  большую таблицу, то модель ассоциативная.
Но не думаю,что подобный спор кому-то тут будет интересен :)

admin

 :) Ни о каком споре и речи быть не может.
Только продуктивное общение.

Рейтинг@Mail.ru Яндекс.Метрика