Страницы: 1
RSS
Power Query. Распределение сумм на будущие периоды
 
Здравствуйте!
Помогите, пожалуйста, с задачей распределения дохода по будущим периодам
В исходных данных Месяц  оплаты комиссии, Сумма комиссии, Срок за который оплачена комиссия
Нужно распределить суммы комиссий равномерно на весь срок, за который она оплачена
Сейчас реализовал очень примитивным способом(при этом заложил ограничение на максимальный срок 12 мес.)
По ощущениям, это должно решаться через генератор списков(здесь Андрей помогал в похожей задаче ссылка). но я не смог переложить этот пример под текущие условия
 
Цитата
Student64 написал:
через генератор списков
По моему, немного проще
Код
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
    #"Удаленные ошибки"
Изменено: Student64 - 28.02.2020 09:39:37
 
Student64, так надо? Да?
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    СуммаВмесяц = Table.AddColumn(Источник, "Сумма_в_месяц", each List.Repeat({[Сумма]/[Срок]},[Срок])),
    Expand = Table.ExpandListColumn(СуммаВмесяц, "Сумма_в_месяц"),
    Group = Table.Group(Expand, {"Дата списания", "Клиент", "Срок", "Сумма"}, {{"Количество", each Table.AddIndexColumn(_, "Атрибут",1)}}),
    Expand2 = Table.ExpandTableColumn(Group, "Количество", { "Атрибут","Сумма_в_месяц"}),
    Custom1 = Table.AddColumn(Expand2, "Дата отчета", each Date.EndOfMonth(Date.AddMonths(Date.StartOfMonth([Дата списания]),[Атрибут])), type date)
in
    Custom1
PooHkrd, спасибо, не знал об этом
each Text.From(_)     =     (_)=> Text.From(_)    =    Text.From
 
Михаил Л, красота! Большое спасибо!
 
Цитата
Михаил Л написал:
each Text.From(_)     =     (_)=> Text.From(_)    =    Text.From
В этот же ряд (x)=> Text.From(x), чтоб уж до кучи.
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх