#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. Я ценю помощь.