Приветствую, друзья. Прошу помощи в оптимизации создания календаря. Коротко суть:
Требуется создать непрерывный календарь дат с первой и до последней даты из списка.
Сейчас делаю это так:
Но на больших объемах очень тормозит. Буду благодарен, если поможете оптимизировать код с целью повышения быстродействия
Требуется создать непрерывный календарь дат с первой и до последней даты из списка.
Сейчас делаю это так:
Код |
---|
let Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], Type = Table.TransformColumnTypes(Source,{{"дата", type date}}), // изменяем тип столбца с датами Form= List.Dates( List.Min(Type[дата]), Number.From(List.Max(Type[дата]))- Number.From(List.Min(Type[дата]))+1, #duration(1, 0, 0, 0)), //Формируем непрерывный список дат начиная с минимальной с количеством дней равным разнице между максимальной и минимальной даты с добавлением 1 дня чтобы учесть последнее число Table = Table.FromList(Form, Splitter.SplitByNothing(), null, null, ExtraValues.Error), Rename = Table.RenameColumns(Table,{{"Column1", "Дата"}}), TypeDate = Table.TransformColumnTypes(Rename,{{"Дата", type date}}), Год = Table.AddColumn(TypeDate, "Год", each Date.Year([Дата]), Int64.Type), НомерМесяца = Table.AddColumn(Год, "Месяц", each Date.Month([Дата]), Int64.Type), Месяц = Table.AddColumn(НомерМесяца, "Название месяца", each Date.MonthName([Дата]), type text), Квартал = Table.AddColumn(Месяц, "Квартал", each Date.QuarterOfYear([Дата]), Int64.Type), Неделя = Table.AddColumn(Квартал, "Неделя года", each Date.WeekOfYear([Дата]), Int64.Type), ДеньНедели = Table.AddColumn(Неделя, "Название дня", each Date.DayOfWeekName([Дата]), type text), #"Добавлен пользовательский объект" = Table.AddColumn(ДеньНедели, "Рабочий/Выходной", each if[Название дня]="суббота"or[Название дня]="воскресенье" then "Выходной" else "Рабочий") in #"Добавлен пользовательский объект" |
Но на больших объемах очень тормозит. Буду благодарен, если поможете оптимизировать код с целью повышения быстродействия
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!