Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
shlang03
Contributor II
Contributor II

Создание строк с полным перечнем дат из интервала дат

Здравствуйте! Подскажите, пожалуйста, решение следующей задачи.

Есть статьи расходов, расчет которых нужно начинать с Даты1 и заканчивать Датой2.

    

СтатьяДата начала включения в расчетДата окончания включения в отчетСумма ежедневная
Конференция01.05.201803.05.201850667
расход01.05.201807.05.201857

Как сделать таблицу, чтобы было видна детализация на каждый день:

   

СтатьяДатаСумма ежедневная
Конференция01.05.201850667
Конференция02.05.201850667
Конференция03.05.201850667
расход01.05.201857
расход02.05.201857
расход03.05.201857
расход04.05.201857
расход05.05.201857
расход06.05.201857
расход07.05.201857

Спасибо за помощь!

1 Solution

Accepted Solutions
shlang03
Contributor II
Contributor II
Author

Спасибо! Проблема решена!

Код:

[Интервалы]:

LOAD

[Дата начала включения в расчет],

[Дата окончания включения в отчет],

Статья, 

[Сумма ежедневная]

FROM

(ooxml, embedded labels, table is исходные);

INNER JOIN

LOAD DISTINCT [Дата начала включения в расчет],

[Дата окончания включения в отчет],

AutoNumberHash128([Дата начала включения в расчет],[Дата окончания включения в отчет]) as [Интервал времени]

Resident [Интервалы];

[Даты]:

LOAD

Дата

FROM

(ooxml, embedded labels, table is периоды);

[Таблица соединения]:

Intervalmatch ([Дата]) LOAD [Дата начала включения в расчет] as [Начало интервала],[Дата окончания включения в отчет] as [Окончание интервала] Resident [Интервалы];

INNER JOIN

LOAD DISTINCT [Начало интервала],

[Окончание интервала],

AutoNumberHash128([Начало интервала],[Окончание интервала]) as [Интервал времени]

Resident [Таблица соединения];

Результат:

QIP Shot - Screen 005.png

View solution in original post

6 Replies
Eugeny_Ilyin
Creator II
Creator II

Привет, очень похожая тема здесь

shlang03
Contributor II
Contributor II
Author

А наоборот как сделать? с сокращением строк Group by понятно, а как увеличить количество строк, из одной сделать несколько? я крутил с циклами, но что-то не получается с переменными. Они выставляются только для первой строки. Как придумать переменные для каждой строки отдельно не знаю.

Вот код:

Customer:

LOAD

    [Период 1] as P1,

    [Период 2] as P2

FROM

(ooxml, embedded labels, table is исходные);

LET variable1=PEEK('P1',0,'Customer');

LET variable2=PEEK('P2',0,'Customer');

for a=$(variable1) to $(variable2)

TempGeoCode:

LOAD

$(a) as [Период],

Статья,

[Дата оплаты],

    [Дата начала включения в расчет],

    [Дата окончания включения в отчет],

    [Сумма статьи],

    [Период 1],

    [Период 2],

    [Кол-во периодов],

    [Сумма ежедневная]

FROM

(ooxml, embedded labels, table is исходные);

NEXT

[map1]:

mapping LOAD

    Период,

    Дата

FROM

(ooxml, embedded labels, table is периоды);

TempGeoCode2:

LOAD

applymap ('map1',[Период]) as [Дата],

[Период],

Статья,

[Дата оплаты],

    [Дата начала включения в расчет],

    [Дата окончания включения в отчет],

    [Сумма статьи],

    [Период 1],

    [Период 2],

    [Кол-во периодов],

    [Сумма ежедневная]

Resident TempGeoCode;

drop table TempGeoCode;

Файлы также прикладываю. !

Eugeny_Ilyin
Creator II
Creator II

А если просто ряд запросов с Concatenate.?

В каждом запросе переименовываем поля дат в Дата и делаем отдельные запросы на начальную, конечную даты.
В итоге все объединится в одну таблицу.

ovcharenko
Partner - Contributor II
Partner - Contributor II

Для этого существует функция IntervalMatch()

Создайте таблицу со всеми датами от минимальной до максимальной. И при помощи функции IntervalMatch() присоедините их к таблице транзакций.

shlang03
Contributor II
Contributor II
Author

Спасибо! Проблема решена!

Код:

[Интервалы]:

LOAD

[Дата начала включения в расчет],

[Дата окончания включения в отчет],

Статья, 

[Сумма ежедневная]

FROM

(ooxml, embedded labels, table is исходные);

INNER JOIN

LOAD DISTINCT [Дата начала включения в расчет],

[Дата окончания включения в отчет],

AutoNumberHash128([Дата начала включения в расчет],[Дата окончания включения в отчет]) as [Интервал времени]

Resident [Интервалы];

[Даты]:

LOAD

Дата

FROM

(ooxml, embedded labels, table is периоды);

[Таблица соединения]:

Intervalmatch ([Дата]) LOAD [Дата начала включения в расчет] as [Начало интервала],[Дата окончания включения в отчет] as [Окончание интервала] Resident [Интервалы];

INNER JOIN

LOAD DISTINCT [Начало интервала],

[Окончание интервала],

AutoNumberHash128([Начало интервала],[Окончание интервала]) as [Интервал времени]

Resident [Таблица соединения];

Результат:

QIP Shot - Screen 005.png

Vasiliy_Beshentsev
Creator III
Creator III

Коллеги, всем добрый день!

IntervalMatch также очень хорошо подходит для решения задачи по вычислению численности сотрудников компании в раскладке на каждый день, +можно посмотреть приращение, если имеется. Это работает в случае, когда у каждого сотрудника указаны даты приема и увольнения.