Объединение двух пользовательских М-функций для разбора текста и классификации

В рамках загрузки данных PowerQuery я хотел бы добавить поле, которое классифицирует некоторые данные по широким группам. Данные, подлежащие классификации, в этом случае представляют собой текст, но начинаются с порядкового номера, например «01 Апельсины», «02 Груши», «06 Капусты», «08 Моркови». Функция должна сгруппировать индексы, скажем, 1-5 в «Фрукты» и 6+ в «Овощи». Хотя я мог бы сделать это с помощью отдельной таблицы поиска и слияния, функция обеспечивает большую гибкость.

Проблема состоит из двух частей; (1) извлечение индекса и (2) составление списка. Я могу создавать функции, чтобы делать это по отдельности, но не понял, как объединить их в одну. Две отдельные функции показаны ниже.

// (1) this function takes the index value of the input text (and has place holders for the second function
    let 
    class = (input) =>
    // find the index
    let 
        index = Number.FromText(Text.Start(input, 2))
    in 
        index
    // depending on the index, allocate the class

in class
// (2) this function allocates the index to a class

    (input) =>

    // depending on the index, allocate the class
    let band = 
        {
            {(x)=> x <= 5, "Fruit"},
            {(x)=> x > 5, "Vegetable"}
        },
        result = List.First(List.Select(band, each _{0}(input))){1}
    in 
        result

Когда я пытаюсь сложить их вместе, я получаю ошибки Eof и запятой.

// (1) this bit takes the index value of the input text
let 
    class = (input) =>
    // find the index
    let 
        index = Number.FromText(Text.Start(input, 2))
    in 
        index

    // depending on the index, allocate the class

// (2) this bit allocates it to a class

    class =>

    // depending on the index, allocate the class
    let band = 
        {
            {(x)=> x <= 5, "Fruit"},
            {(x)=> x > 5, "Vegetable"}
        },
        result = List.First(List.Select(band, each _{0}(input))){1}
    in 
        result
in class

Очень признательна за ваше понимание объединения функций, подобных этой.


person mer_curius    schedule 22.07.2019    source источник


Ответы (1)


Этот код должен работать:

(input) =>
let band = 
    {
        {Number.FromText(Text.Start(input, 2)) <= 5, "Fruit"},
        {Number.FromText(Text.Start(input, 2)) > 5, "Vegetable"}
    },
    result = List.Select(band, each _{0}){0}{1}
in 
    result
person Aleksei Zhigulin    schedule 22.07.2019
comment
Да спасибо. Я пробовал что-то подобное, но не смог заставить встроенную формулу работать в списке! - person mer_curius; 22.07.2019