Протестировано это в Power Query for Excel, но, надеюсь, должно работать и в Power BI.Если вы создаете такую функцию, как:
divisionToList = (numberToDivide as number, numberToDivideBy as number) as list =>
let
divisionResult = numberToDivide / numberToDivideBy,
isResultValid = (divisionResult >= 0) and (Number.Mod(divisionResult, 1) = 0),
errorIfInvalid = Error.Record("Cannot create a list with " & Text.From(divisionResult) & " items", Number.ToText(numberToDivide) & " / " & Number.ToText(numberToDivideBy) & " = " & Text.From(divisionResult), null),
listOrError = if isResultValid then List.Repeat({divisionResult}, divisionResult) else error errorIfInvalid
in listOrError,
Она должна делить два числа и возвращать list
длины d
, в которой каждый элемент равен d
(d
является результатом деления).Это list
может затем быть расширено в контексте таблицы в новые строки.
В этой функции есть некоторая базовая обработка ошибок для случаев, когда деление дает проблемное число (поскольку вы не можетеиметь список, например, с элементами 5.1 или -1).Вы можете изменить / удалить эту обработку, если это необходимо.
Я думаю, что приведенный ниже код перенесет меня с вашего первого изображения на второе, и, надеюсь, даст вам некоторое представление о том, как этого добиться.
let
mockData = Table.FromColumns({{200, 400}, {"A", "B"}}, type table [Amount = number, Description = text]),
defaultValue = 50, // Not sure what logic is required for arriving at this figure, so have simply assigned it.
divisionToList = (numberToDivide as number, numberToDivideBy as number) as list =>
let
divisionResult = numberToDivide / numberToDivideBy,
isResultValid = (divisionResult >= 0) and (Number.Mod(divisionResult, 1) = 0),
errorIfInvalid = Error.Record("Cannot create a list with " & Text.From(divisionResult) & " items", Number.ToText(numberToDivide) & " / " & Number.ToText(numberToDivideBy) & " = " & Text.From(divisionResult), null),
listOrError = if isResultValid then List.Repeat({divisionResult}, divisionResult) else error errorIfInvalid
in listOrError,
invokeFunction = Table.TransformColumns(mockData, {{"Amount", each divisionToList(_, defaultValue), type list}}),
expanded = Table.ExpandListColumn(invokeFunction, "Amount")
in
expanded
![Output table](https://i.stack.imgur.com/d3ls9.png)