Заполнение пробелов модельного года с помощью Power Query в Power BI

#powerbi #powerquery

#powerbi #powerquery

Вопрос:

У меня есть столбец для модельных лет автомобиля. Он включает данные с дефисами (например, 2016-2020). Я хотел бы изменить его на список, разделенный запятыми (2016, 2017, 2018, 2019, 2020). В конечном счете, я разделю его по разделителю и отключу все столбцы (или разделю его по строкам). Я не могу найти в Google ничего, что могло бы помочь в этом. Любая помощь приветствуется.

Комментарии:

1. Не могли бы вы поделиться своими попытками или хотя бы примерами данных? (ввод и желаемый результат в табличной форме)

Ответ №1:

Следующий код начинается с лет начала / окончания, написанных через дефис (не обращайте внимания на определение «источника»…просто таблица, введенная непосредственно в редактор PowerQuery).

Ключевыми шагами являются разделение лет в тире, а затем создание списка на основе начального и конечного годов, разделенных таким образом списком.Сгенерировать функцию (строка # «Список лет»). Волшебное утверждение:

каждый пусть start = [Начальный год], end = [Конечный год] в списке.Сгенерировать (() => начать, каждый _ <= конец, каждый _ 1)

‘Пусть start = [Начальный год], end = [Конечный год]’ используется для копирования значения поля для соответствующей рассматриваемой строки в переменные ‘start’ и ‘end’. Это потому, что .Функция генерации не способна напрямую включать ссылку на поле. The .Затем функция Generate выполняется очень похоже на цикл ‘for’ для создания списка значений: начальное значение — ‘start’, продолжайте итерацию, пока значение списка не станет меньше или равно ‘end’, увеличьте на 1.

 let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjIwNNM1MjAyUIqNBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    #"Renamed Columns" = Table.RenameColumns(Source,{{"Column1", "HumanData"}}),
    #"HumanData Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"HumanData", type text}}),
    #"Split Years" = Table.SplitColumn(#"HumanData Type", "HumanData", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"StartYear", "EndYear"}),
    #"Year Types" = Table.TransformColumnTypes(#"Split Years",{{"StartYear", Int64.Type}, {"EndYear", Int64.Type}}),
    #"List of Years" = Table.AddColumn(#"Year Types", "ListOfYears", each let start = [StartYear], end = [EndYear] in List.Generate(() => start, each _ <= end, each _   1))
in
    #"List of Years"
 

После того, как вы попали в форму списка, у вас есть гибкость в расширении в PowerQuery.

Надеюсь, это поможет :).

Комментарии:

1. Я думаю, это ответит на мой вопрос, но я не знаю, как его реализовать. Я просто возвращаю то, что вставил. Не уверен, что мне нужно изменить в формуле.

2. В редакторе PowerQuery PBI создайте новый пустой запрос, перейдите в «Расширенный редактор» и вставьте. Затем он должен показать этапы разбивки. Поскольку у вас уже есть столбец с годом <начало> -<конец>, я бы выполнил шаги от «Разделенных лет» до конца и скопировал их в конец списка шагов для этой таблицы, обновив конкретный шаг «Разделенные годы», чтобы ссылаться на столбец с началом / концомдаты. Результатом должен быть столбец «ListOfYears», содержащий список для каждой строки таблицы. Список можно разбить на строки (нажмите значок «развернуть» столбца) или преобразовать в запрошенный список, разделенный запятыми.

3. Превосходно! Это именно то, что мне было нужно, и я кое-что узнал о языке M. Я ценю помощь.