如何循环遍历 power bi 函数中列中的元素?

How can I loop trough elements in columns in a powerbi function?

我想写一个函数来清理数字。 同时将它们保留为文本。

因此,在我的查询中我想使用例如:

= CleanRN(PrevQueryTable, {"NumericTextColumn"})

该函数应该删除非数字文本中的所有非数字字符和前导零。 (不过函数不是本题的重点)

所以在查询本身我可以去

= Table.ReplaceValue(Benutzerdefiniert2,"_","",Replacer.ReplaceText,{"ONKZ/RufNr"})

= Table.ReplaceValue(#"Ersetzter Wert1", each try Number.From([RUFNUMMER]) otherwise true, each Text.TrimStart(Text.Select([ZMM_onkz], {"0".."9"}),"0")) ,Replacer.ReplaceValue,{"RUFNUMMER"})

或类似的东西。

但我想包装一个函数以实现可重用性和更好的阅读性。 (并且更好地理解M)


我第一次去:

(Tbl_InputTable as table, Txt_Column as text) as table => let
    Result = Table.ReplaceValue(
        Tbl_InputTable, 
        each try Number.From(Table.Column(Tbl_InputTable, Txt_Column)) otherwise true, 
        each Text.TrimStart(Text.Select(Table.Column(Tbl_InputTable, Txt_Column), {"0".."9"}),"0"), 
        Replacer.ReplaceValue, 
        {Txt_Column}
    )
in
Result

由于

现在已知的原因,这没有用

所以我又去了:

= (Tbl_InputTable as table, Lst_Column as list) as table => let
    Result = Table.TransformColumns(
        Tbl_InputTable,
        List.Transform(
            Lst_Column,
            each {_, Text.TrimStart(Text.Select(_, {"0".."9"}), "0")}
        )
    )
in
Result

失败并显示

Fehler in der Abfrage ''. Expression.Error: Der Wert """" kann nicht in den Typ "Function" konvertiert werden.

这还不错,并不完全令人惊讶 - 我想 - 因为 _ 指的是 Lst_Column 的元素。


更新: 第三次尝试

(Tbl_InputTable as table, Lst_Column as list) as table => let
    Result = Table.TransformColumns(
        Tbl_InputTable,
        List.Transform(
            Lst_Column,
            each {
                _, 
                Table.TransformColumns(
                    Tbl_InputTable, 
                    {
                        _, 
                        each Text.TrimStart(Text.Select(_, {"0".."9"}),"0")
                    }
                )
            }
        )
    )
in
Result

所以,我希望通过在一秒钟内包装它 Table.TransformColumns 来更深一层,以便 _ 引用列的元素。但是没有。

非描述性错误:

Fehler in der Abfrage ''. Expression.Error: Ein Wert vom Typ "Table" kann nicht in den Typ "Function" konvertiert werden.

所以.. 我如何在函数中使用函数?如果我只有 "column"?

,如何将列称为 [column]

其实你们很亲近。您唯一缺少的一点是,在您的 List.Transform 中,您希望第二个元素是一个函数,而不是列名中提取的数字。要解决此问题,只需添加一个 each,这样它就会告诉您如何转换每个值,而不是该值是什么。

(Tbl_InputTable as table, Lst_Column as list) as table => let
    Result = Table.TransformColumns(
        Tbl_InputTable,
        List.Transform(
            Lst_Column,
            each {_, each Text.TrimStart(Text.Select(_, {"0".."9"}), "0")}
        )
    )
in
Result

定义了这个函数,你应该可以这样调用它:

CleanRN(PrevQueryTable, {"NumericTextColumn"})

编辑:

each ... is a function that transforms _ into whatever you specify (equivalent to syntax (_) => ..., a function with parameter _). In this case, we have a function within a function. The outer one is transforming each _ into a list {_, function} and the inner one is specifying what that function is. The reason we want this list is more clear from the .