Как я могу l oop корыто элементы в столбцах в функции powerbi? - PullRequest
0 голосов
/ 27 марта 2020

Я хочу написать функцию для очистки номеров. Оставляя их как текст.

Итак, в своих запросах я хочу использовать, например:

= CleanRN(PrevQueryTable, {"NumericTextColumn"})

Функция должна удалить все нечисловые c символы и начальные нули в не уже цифры 1047 * текстов. (Но функция не в этом вопросе.)

Так что в самих запросах я могу go с

= 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)


Мой первый go:

(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

Это не сработало по известной теперь причине, что [col] и Table.Column () не равны.


Итак, я go снова:

= (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.


ОБНОВЛЕНИЕ: 3-я попытка

(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 в go на один уровень глубже, чтобы _ ссылался на элементы столбца. Но нет.

Неописательная ошибка:

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

Итак. Как использовать функции внутри функций? Как я могу ссылаться на столбец как [column], если у меня есть только «column»?

1 Ответ

0 голосов
/ 27 марта 2020

Ты на самом деле очень близко. Единственный бит, который вам не хватает, это то, что в вашем 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 ... - это функция , которая преобразует _ во все, что вы укажете (эквивалентно синтаксису) (_) => ..., функция с параметром _). В этом случае у нас есть функция внутри функции. Внешний преобразует каждый _ в список {_, function}, а внутренний задает, что это за функция. Причина, по которой нам нужен этот список, более понятна из вопроса , который вы связали, на который я отвечал ранее .

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