Skip to main content
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 также очень хорошо подходит для решения задачи по вычислению численности сотрудников компании в раскладке на каждый день, +можно посмотреть приращение, если имеется. Это работает в случае, когда у каждого сотрудника указаны даты приема и увольнения.