Протягивание данных Qlik Sense

Автор Xande, 30 сентября 2021, 03:31:41

« назад - далее »

Xande

Добрый день! Направьте мысли новичка в нужное русло плз)
Есть задача:
1) Подготовить тестовые данные.
Выполнил следующим образом:
[TestData]:
LOAD
       Date(Дата) as Дата,       
       Status,     
;
LOAD * INLINE [
    Дата,           Status
    23.09.2021,    trainee         
    23.10.2021,    trainee 
    23.11.2021,    trainee   
    23.12.2021,    junior   
    23.01.2022,      junior   
    23.02.2022,    junior   
    23.03.2022,    middle   
    23.04.2022,    middle 
    23.05.2022,    middle 
];

2) Создать календарь, сгенерировать с минимальной даты по сегодняшнее число.
Выполнил следующим образом:
[TempMinMaxDates]:
LOAD   
       Min(Дата)       as MinDate,
       Today()          as MaxDate
Resident [TestData];

Let varCalendarStart = Num(Peek('MinDate', 0, 'TempMinMaxDates'));
Let varCalendarEnd = Num(Peek('MaxDate', 0, 'TempMinMaxDates'));
Drop Table TempMinMaxDates;

[TempCalendar]: 
LOAD
    $(varCalendarStart) + IterNo() - 1       as Num,
     Date($(varCalendarStart) + IterNo() - 1)    as TempDate
AutoGenerate 1
While $(varCalendarStart) + IterNo() - 1 <= $(varCalendarEnd); 

[MasterCalendar]:
LOAD         
     Date([TempDate])                           as Дата,
     Date([TempDate],'DD MMMM YYYY')            as [Дата длинный месяц]
Resident TempCalendar;
DROP Table TempCalendar;

3)Сделать в скрипте (протянуть), чтобы при нажатии на дату - высвечивался статус.
Вот здесь поплыл. Подскажите в какую сторону соображать?))

admin

в смысле "протянуть" ?
у вас простейшая модель сформируется, связи статус-дата будут.
Все рабочее, на первый взгляд.

Xande

Календарь разбивает дату из таблицы TestData на дни.  Необходимо, чтобы при выборе определенного дня - выделялся статус. Например, 28.09.2021 должен выделиться статус treinee. Но treinee у меня высвечивается только по трем датам 23.09.2021, 23.10.2021 и 23.11.2021. А на счет "протянуть" сам не понимаю, что это значит. Так наставник сказал       
     

admin

понятно, поищите на help.qlik.com информацию про работу с интервалами.
На этом форуме тоже было обсуждение по intervalmatch()

Maks248

#4
Соображать в сторону:
Приджойнить к мастеркалендарю поле статус с условием что, мол, если статус изнулл, то подставить пик(статус), иначе просто статус.

[MasterCalendar]:
LOAD
   RowNo() as RowNo,
     Date([TempDate])                           as Дата,
     Date([TempDate],'DD MMMM YYYY')            as [Дата длинный месяц]
Resident TempCalendar;
DROP Table TempCalendar;

Left Join(MasterCalendar)
LOAD   
        Дата,
       Status
Resident [TestData];
DROP Table TestData;

NoConcatenate
[tmp_MasterCalendar]:
LOAD
   RowNo,
    Дата,
    Status,
    If(IsNull(Status),peek(Status2),Status) as Status2
Resident MasterCalendar
Order By RowNo;

DROP Table MasterCalendar;

Xande

Благодарю, Макс! Всё отлично отработало! Теперь буду додумывать, что там в скрипте происходит)

Maks248

#6
А чего додумывать?
peek(Status2) ссылается на поле Status2 в предыдущей строке в текущей таблицы, при этом, обязательное условие для правильного срабатывания peek(Status2) - это сортировка - Order By RowNo, см. https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/InterRecordFunctions/Peek.htm
тут надо понимать, что синтаксис peek(Status2) = peek(Status2,0,tmp_MasterCalendar), просто ноль и tmp_MasterCalendar  - при их отсутствии, берутся по умолчанию.
Аналог функция Previous, но она работает для уже созданных таблиц, а peek, для той что только в памяти.

Яндекс.Метрика