Страницы: 1
RSS
Разность соседних дат
 
Как в Power Pivot реализовать механизм подсчета разности соседних дат времени: подсчитать на сколько мес отличается друг от друга две соседние даты?
Например, есть таблица дат
в 1 строке находим разность первой даты с самой собой
в 2 строке находим разность второй даты с первой датой
в 3 строке находим разность третьей даты с второй датой и так далее
В итоге, нужно построить сводную таблицу, файл прилагается
NДата заказаРазность соседних дат, днейРазность соседних дат, мес
108.02.20180
216.03.201836
330.03.201814
404.05.201835
511.05.20187
624.05.201813
725.07.201862
820.08.201826
923.08.20183
1029.08.20186
1121.12.2018114
1226.12.20185
1325.02.201961
1421.03.201924
1525.03.20194
1619.04.201925
1713.08.2019116
1816.08.20193
1928.10.201973
2028.02.2020123
 
Как в PowerQuery обратиться к предыдущей строке
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Игорь Симановский,
можно добавить дополнительный столбец с номером строки (индексом) и через фильтр посчитать
 
Игорь Симановский,
Можно меру для вычисляемого столбца прописать:
Код
DATEDIFF( IF(  LOOKUPVALUE([Дата заказа];[N]; [N]- 1 )= BLANK();[Дата заказа];LOOKUPVALUE([Дата заказа];[N]; [N]- 1 )); [Дата заказа] ;DAY)

Для месяцев заменить DAY на MONTH
 
Дмитрий(The_Prist) Щербаков, Спасибо, урок посмотрел. Пробовал применять к своим данным, файл завис на несколько часов и так и не выполнил данную операцию. Кол-во строк примерно 700 тыщ. Если ли возможность применить другой алгоритм для решения подобной задачи в Power Query?
 
Alex9000, Спасибо! Я слишком упростил модельную задачу. А если в качестве столбца N стоят не целые числа, а текстовые переменные. Как изменится формула в этом случае? Реальный пример такой:
Головной   контрагент IDДата заказа
AK000000108.02.2018
16.03.2018
30.03.2018
04.05.2018
11.05.2018
24.05.2018
25.07.2018
20.08.2018
23.08.2018
29.08.2018
21.12.2018
26.12.2018
25.02.2019
21.03.2019
25.03.2019
19.04.2019
13.08.2019
16.08.2019
28.10.2019
28.02.2020
13.06.2020
01.10.2020
AK000000211.01.2018
12.01.2018
22.02.2018
05.03.2018
 
Цитата
Игорь Симановский написал:
урок посмотрел
прочтите статью до конца - там приведен и другой алгоритм, который значительно быстрее. В уроке он не разбирается, т.к. был добавлен в статью позже.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Возможно так быстрее.
А, ну и не PP. Не понял ТС нужно именно PP или PQ тоже подходит.
upd. 650 тыс. строк с выгрузкой на лист секунд 15+-.
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Type = Table.TransformColumnTypes(Источник,{{"N", Int64.Type}, {"Дата заказа", type datetime}}),
    Add = Table.FromColumns(Table.ToColumns(Type)&{{Type[Дата заказа]{0}}&List.RemoveLastN(Type[Дата заказа],1)},Table.ColumnNames(Type)&{"ДатаСледующегоЗаказа"}),
    Days = Table.AddColumn(Add, "Разность, дней", each Duration.Days([Дата заказа]-[ДатаСледующегоЗаказа])),
    Months = Table.AddColumn(Days, "Разность, мес.", each Date.Year([Дата заказа])*12+Date.Month([Дата заказа])-Date.Year([ДатаСледующегоЗаказа])*12-Date.Month([ДатаСледующегоЗаказа])),
    TypeAgain = Table.TransformColumnTypes(Months,{{"ДатаСледующегоЗаказа", type datetime}, {"Разность, дней", Int64.Type}, {"Разность, мес.", Int64.Type}}),
    Remove = Table.RemoveColumns(TypeAgain,{"ДатаСледующегоЗаказа"})
in
    Remove
Изменено: whateverlover - 29.09.2022 16:44:32
 
Цитата
написал:
прочтите статью до конца
Прочитал, добавить столбец с предыдущими датами удалось, спасибо за информацию, буду думать, как это применить для реального примера, который прикрепил файлом  
 
Цитата
написал:
Возможно так быстрее
Спасибо! Решение классное и красивое. Но как его применить для реального примера, который я приложил файлом? Вместо столбца N c числами есть столбец с текстовыми уникальными переменными ID, для которых и надо рассчитать разность соседних дат
 
Игорь Симановский, вариант разность дат будет зависеть от сортировки же еще. Вам какая сортировка дат нужна, по возрастанию, по убыванию, изначальная?
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
    Type = Table.TransformColumnTypes(Источник,{{"Головной контрагент ID", type text}, {"Дата заказа", type datetime}}),
    Group = Table.Group(Type, "Головной контрагент ID", 
        {"gr", each 
            [a= Table.Sort(_, {"Дата заказа", Order.Ascending}),
             b = Table.FromColumns(Table.ToColumns(a)&{{a[Дата заказа]{0}}&List.RemoveLastN(a[Дата заказа],1)}, Table.ColumnNames(a)&{"Дата следующего заказа"}),
             c = Table.AddColumn(b, "Разность, дн.", each Duration.Days([Дата заказа]-[Дата следующего заказа])),
             d = Table.AddColumn(c, "Разность, мес.", each Date.Year([Дата заказа])*12+Date.Month([Дата заказа])-Date.Year([Дата следующего заказа])*12-Date.Month([Дата следующего заказа]))
            ][d]
        }                     
    ),
    Combine = Table.Combine(Group[gr]),
    TypeAgain = Table.TransformColumnTypes(Combine,{{"Разность, дн.", Int64.Type}, {"Разность, мес.", Int64.Type}, {"Дата следующего заказа", type datetime}})
in
    TypeAgain
Изменено: whateverlover - 29.09.2022 21:04:51
 
Цитата
написал:
по возрастанию,
Нужна по возрастанию Дат заказа
 
whateverlover, Спасибо за красивое решение! Это высший пилотаж в программировании М  
Страницы: 1
Наверх