Здравствуйте! Помогите, пожалуйста, с задачей распределения дохода по будущим периодам В исходных данных Месяц оплаты комиссии, Сумма комиссии, Срок за который оплачена комиссия Нужно распределить суммы комиссий равномерно на весь срок, за который она оплачена Сейчас реализовал очень примитивным способом(при этом заложил ограничение на максимальный срок 12 мес.) По ощущениям, это должно решаться через генератор списков(здесь Андрей помогал в похожей задаче ссылка). но я не смог переложить этот пример под текущие условия
let
Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
СуммаВмесяц = Table.AddColumn(Источник, "Сумма_в_месяц", each List.Repeat({Text.From([Сумма]/[Срок])},[Срок])),
names= List.Transform({1..List.Max(СуммаВмесяц[Срок])}, each Text.From(_)),
Extract = Table.TransformColumns(СуммаВмесяц, {"Сумма_в_месяц", each Text.Combine(_, " ")}),
SplitColumn = Table.SplitColumn(Extract, "Сумма_в_месяц", Splitter.SplitTextByDelimiter(" "), names),
Type = Table.TransformColumnTypes(SplitColumn, List.Transform(names, each {_, type number}))
in
Type
Еще вариант
Код
let
Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
СуммаВмесяц = Table.AddColumn(Источник, "Сумма_в_месяц", each Record.FieldValues(_)&List.Repeat({[Сумма]/[Срок]},[Срок])),
Custom1 = Table.Transpose( Table.FromColumns( СуммаВмесяц[Сумма_в_месяц] ) ),
names= List.Zip({Table.ColumnNames(Custom1),Table.ColumnNames(Источник)&List.Transform({1..List.Max(СуммаВмесяц[Срок])}, each Text.From(_))}),
Rename = Table.RenameColumns(Custom1,names)
in
Rename
Изменено: Михаил Л - 28.02.2020 08:09:52(Добавил вариант)
Михаил Л, кстати, вместо each Text.From(_) можно написать просто Text.From, т.к. в этом аргументе вы должны просто указать функцию принимающую один аргумент и как-то его преобразовывающую. Поэтому эти выражения в данном случае равносильны.
Михаил Л, отлично! спасибо! Подскажите, пожалуйста, я правильно понимаю, что потом можно использовать мой кусок скрипта начиная с unpivot? Он не требует оптимизации?
Код
let
Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
СуммаВмесяц = Table.AddColumn(Источник, "Сумма_в_месяц", each Record.FieldValues(_)&List.Repeat({[Сумма]/[Срок]},[Срок])),
Custom1 = Table.Transpose( Table.FromColumns( СуммаВмесяц[Сумма_в_месяц] ) ),
names= List.Zip({Table.ColumnNames(Custom1),Table.ColumnNames(Источник)&List.Transform({1..List.Max(СуммаВмесяц[Срок])}, each Text.From(_))}),
Rename = Table.RenameColumns(Custom1,names),
Unpivot = Table.UnpivotOtherColumns(Rename, {"Дата списания", "Клиент", "Срок"}, "Атрибут", "Значение"),
формат = Table.TransformColumnTypes(Unpivot,{{"Срок", type number}, {"Атрибут", type number}, {"Значение", type number}, {"Дата списания", type date}}),
#"Дата отчета" = Table.AddColumn(формат, "Дата отчета", each Date.EndOfMonth(Date.AddMonths(Date.StartOfMonth([Дата списания]),[Атрибут])), type date),
#"Удаленные ошибки" = Table.RemoveRowsWithErrors(#"Дата отчета", {"Атрибут"})
in
#"Удаленные ошибки"