Разделить строку на несколько других строк в Power Bi на основе деления числа - PullRequest
0 голосов
/ 08 июня 2019

В Power BI Desktop у меня есть таблица из файла Excel, и я хочу разбить строку на основе разделения между значением определенного столбца и номером по умолчанию.

Более подробно, давайте предположим, чтоу нас есть такая таблица:

enter image description here

если по умолчанию мы хотим разделить столбец Amount на 50, тогда желаемый результат будет примерно таким:

enter image description here

У вас есть идеи, как мне реализовать это в редакторе запросов Power или с помощью dax?

Спасибо

1 Ответ

1 голос
/ 08 июня 2019

Протестировано это в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...