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

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: Дима от 17 сентября 2017, 09:59:18

Название: Вопрос, как связать таблицы.
Отправлено: Дима от 17 сентября 2017, 09:59:18
Здравствуйте, прошу помощи:

Делаю отчет где есть
Таблица 1 с платежами (контракт, дата, сумма платежа)
Таблица 2 с балансами (контракт, дата, баланс по телу и тд.)

Есть ряд параметров (например, продукт, dpd), которые завязаны на номере_контракта.

Подскажите как  правильно связать таблицы,
Что бы фильтр накладывать на дату (год, мес., день).
Пробовал делать составной ключу
(  через "&"
  и
   Hash160(contract_id, date(date,'YYYY.MM.DD')) as Key     )

Нелучилось (в загруженых таблицах есть записи с  ключем  и пустыми полями, при проверке на конкретную дату и для конкретного договора запись была и в таблице платежей и в таблице балансов).
Связал по номеру контракта (но поля дата обозвал в каждой таблице поразному) неполучается наложить фильтр на дату.

Подскажите как это правильней сделать?
Заранее спасибо.

Название: Re: Вопрос, как связать таблицы.
Отправлено: roman от 18 сентября 2017, 05:26:58
Добавить данные в 1 таблицу с параметром concatenate, добавить поле ТипДанных (платежи/баланс) и на уровне выражений через сет анализ разрулить какие именно данные попадают в итоговые выражения?
Название: Re: Вопрос, как связать таблицы.
Отправлено: millik от 19 сентября 2017, 10:37:29
Не совсем понял модель данный и какой фильтр вы хотите делать.

Для работы с датами лучше создавать отдельную таблицу, так называемый "Мастер календарь". А в остальных таблицам будет общее поле с календарём. Тогда при выборе любого периода в календаре, выборка затронет все данные приложения.

Простенький МастерКалендарь


Temp:
Load
Max(ДатаКод) as MaxDate
Resident РегистрДвижений;

Let vMaxDate = Floor(Peek('MaxDate'));

МастерКалендарь:
Load
Num(Дата) as ДатаКод,
Date(Дата,'DD.MM.YYYY') as Дата,
Year(Дата) as Год,
'Q' & Num(Ceil(Num(Month(Дата))/3)) as Квартал,
Month(Дата) as Месяц,
'W' & Num(Week(Дата),00) as Неделя,
WeekDay(Дата) as ДеньНедели,
'D' & Day(Дата) as День,
Left(Month(Дата),3) & '-' & Year(Дата) as ГодМесяц,
Year(Дата) & '-W' & Num(Week(Дата),00) & ' (' &  Left(WeekStart(Дата),5) & '-' & Left(WeekEnd(Дата),5) & ')' as ГодНеделя,
Year(Дата) & '-Q' & Num(Ceil(Num(Month(Дата))/3)) as ГодКвартал,
WeekStart(Дата) as НачалоНедели,
WeekEnd(Дата) as КонецНедели,
MonthStart(Дата) as НачалоМесяца, 
MonthEnd(Дата) as КонецМесяца,
QuarterStart(Дата) as НачалоКвартала,
QuarterEnd(Дата) as КонецКвартала;
Load
Date('01.01.2017','YYYYMMDD')+(Iterno()-1) as Дата
Autogenerate 1
//While Date('01.01.2017','YYYYMMDD')+(Iterno()-1) <= Date(Today());
While Date('01.01.2017','YYYYMMDD')+(Iterno()-1) <= Date($(vMaxDate));