Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Ноябрь 13, 2018, 03:40:49 am

Автор Тема: Проблема с Join  (Прочитано 2207 раз)

Оффлайн d.pimkin

  • Новичок
  • *
  • Сообщений: 28
  • Рейтинг: +3/-0
    • Просмотр профиля
Проблема с Join
« : Апрель 05, 2015, 10:26:27 am »
Всем доброго времени суток!

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


К ней, с помощью 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

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1215
  • Страна: ru
  • Рейтинг: +129/-0
    • Просмотр профиля
Re: Проблема с Join
« Ответ #1 : Апрель 05, 2015, 04:10:13 pm »
Не совсем уверен, что правильно понял проблему.
Вроде бы если в ТТ есть записи для 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

  • Новичок
  • *
  • Сообщений: 28
  • Рейтинг: +3/-0
    • Просмотр профиля
Re: Проблема с Join
« Ответ #2 : Апрель 06, 2015, 02:10:27 am »
Проблему решил.
Дело было в том, что я Date получал через функцию Date, думая, что она отрезает часы, минуты и секунды, что, как оказалось, не так.
Заменил на Floor и теперь все работает, как надо.

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

Re: Проблема с Join
« Ответ #2 : Апрель 06, 2015, 02:10:27 am »

Оффлайн d.pimkin

  • Новичок
  • *
  • Сообщений: 28
  • Рейтинг: +3/-0
    • Просмотр профиля
Re: Проблема с Join
« Ответ #3 : Апрель 06, 2015, 02:24:17 am »
А еще вот такой вопрос:
Можно ли как-нибудь в скрипте в Load обращаться к полям ранее загруженных таблиц через ассоциативную связь не используя Join?

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1215
  • Страна: ru
  • Рейтинг: +129/-0
    • Просмотр профиля
Re: Проблема с Join
« Ответ #4 : Апрель 06, 2015, 08:59:51 am »
Цитировать
Можно ли как-нибудь в скрипте в Load обращаться к полям ранее загруженных таблиц через ассоциативную связь не используя Join?
Насколько я понимаю логику работы - нет.
На этапе формирования модели данных ассоциативный механизм не работает.

Оффлайн bibis

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +31/-0
    • Просмотр профиля
Re: Проблема с Join
« Ответ #5 : Апрель 06, 2015, 09:21:34 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

  • Новичок
  • *
  • Сообщений: 28
  • Рейтинг: +3/-0
    • Просмотр профиля
Re: Проблема с Join
« Ответ #6 : Апрель 06, 2015, 11:26:50 am »
Точно. Про него и забыл. Надо будет попробовать. Спасибо!

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

Re: Проблема с Join
« Ответ #6 : Апрель 06, 2015, 11:26:50 am »

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1215
  • Страна: ru
  • Рейтинг: +129/-0
    • Просмотр профиля
Re: Проблема с Join
« Ответ #7 : Апрель 06, 2015, 12:27:36 pm »
А еще вот такой вопрос:
Можно ли как-нибудь в скрипте в Load обращаться к полям ранее загруженных таблиц через ассоциативную связь не используя Join?
Из руководства:
peek(fieldname [ , row [ , tablename ] ] )
Возвращает содержимое fieldname в записи, указанной с помощью row внутренней таблицы tablename.
Данные выбираются из ассоциативной базы данных QlikView.
Да, но как здесь работает механизм ассоциативных связей?
Если мы peek-нем определенную запись, это же не значит что мы установим указатели других таблиц в соответствующие связям позиции?

Оффлайн bibis

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +31/-0
    • Просмотр профиля
Re: Проблема с Join
« Ответ #8 : Апрель 06, 2015, 12:35:26 pm »
Ну тут можно конечно порассуждать о терминологии, я вот считаю, раз на каждом этапе данные представляют собой одну общую  большую таблицу, то модель ассоциативная.
Но не думаю,что подобный спор кому-то тут будет интересен :)

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1215
  • Страна: ru
  • Рейтинг: +129/-0
    • Просмотр профиля
Re: Проблема с Join
« Ответ #9 : Апрель 06, 2015, 12:43:52 pm »
 :) Ни о каком споре и речи быть не может.
Только продуктивное общение.

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

Re: Проблема с Join
« Ответ #9 : Апрель 06, 2015, 12:43:52 pm »