PowerQuery — заполнение недостающих данных в соответствии с определенным шаблоном

#powerbi #powerquery #powerbi-desktop #m

#powerbi #powerquery #powerbi-рабочий стол #m

Вопрос:

Я пытаюсь очистить данные, полученные из файла Excel, и преобразовать их с помощью PowerQuery (в PowerBI) в удобный формат. Ниже пример таблицы, и что я пытаюсь сделать:

 | Country   | Type of location  |
|---------  |------------------ |
| A         | 1                 |
|           | 2                 |
|           | 3                 |
| B         | 1                 |
|           | 2                 |
|           | 3                 |
| C         | 1                 |
|           | 2                 |
|           | 3                 |
  

Как вы можете видеть, у меня есть список типов местоположений для каждой страны (всегда постоянный, всегда одинаковый номер для каждой страны, т. Е. Каждая страна имеет 3 строки для 3 типов местоположений)

Что я пытаюсь сделать, так это посмотреть, есть ли способ заполнить пустые ячейки в столбце «Страна» соответствующим названием страны, что дало бы что-то вроде этого:

 | Country   | Type of location  |
|---------  |------------------ |
| A         | 1                 |
| A         | 2                 |
| A         | 3                 |
| B         | 1                 |
| B         | 2                 |
| B         | 3                 |
| C         | 1                 |
| C         | 2                 |
| C         | 3                 |
  

На данный момент я думал об использовании ряда условий if / else if, но, поскольку существует более 100 стран, это не кажется правильным решением.

Есть ли какой-либо способ сделать это более эффективно?

Ответ №1:

Как упоминает Мюррей, Table.FillDown функция отлично работает и встроена в графический интерфейс пользователя на вкладке Преобразование в редакторе запросов:

Лента запросов питания

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

Замена значений

или просто используйте код M, который он генерирует, вместо графического интерфейса:

 = Table.ReplaceValue(#"Previous Step","",null,Replacer.ReplaceValue,{"Country"})
  

Ответ №2:

Да, как вы можете сделать в Excel, вы можете заполнить.

Из docs — таблицы.Заполнение

Я полагаю, что сначала вам нужно будет правильно отсортировать данные.

 Table.FillDown(
    Table.FromRecords({
        [Place = 1, Name = "Bob"],
        [Place = null, Name = "John"],
        [Place = 2, Name = "Brad"],
        [Place = 3, Name = "Mark"],
        [Place = null, Name = "Tom"],
        [Place = null, Name = "Adam"]
    }),
    {"Place"}
)