Powerbi 在幂Bi中,根据数字的除法将行拆分为多个其他行

Powerbi 在幂Bi中,根据数字的除法将行拆分为多个其他行,powerbi,dax,powerquery,Powerbi,Dax,Powerquery,在Power BI Desktop中,我有一个excel文件中的表格,我想根据特定列的值和默认数字之间的除法拆分一行 更详细地说,假设我们有这样一个表: 如果我们希望偏差列金额的默认值为50,那么理想的结果如下: 您知道如何在Power query editor或dax中实现这一点吗 感谢您在Power Query for Excel中测试了此功能,但希望您在Power BI中也能使用此功能。如果创建一个函数,如: divisionToList = (numberToDivide as nu

在Power BI Desktop中,我有一个excel文件中的表格,我想根据特定列的值和默认数字之间的除法拆分一行

更详细地说,假设我们有这样一个表:

如果我们希望偏差列金额的默认值为50,那么理想的结果如下:

您知道如何在Power query editor或dax中实现这一点吗


感谢您在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,
它应该将两个数字分开,并返回一个长度为
d
列表,其中每个元素都是
d
d
是分割的结果)。然后,可以在表的上下文中将该
列表
扩展为新行

对于除法产生有问题的数字的情况,函数中有一些基本的错误处理(因为您不能有一个包含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

当您将文本模板与语句等变量一起使用时,
ErrorIfInvalid
使用使模板更易于阅读。它还为您调用
*.ToText
。还可以使用逗号或其他分隔符将
列表
转换为
字符串