如何循环遍历 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 .
我想写一个函数来清理数字。 同时将它们保留为文本。
因此,在我的查询中我想使用例如:
= 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