Excel: создать несколько строк на основе столбца “amount”

Вопрос или проблема

У меня есть набор данных в Excel, который выглядит следующим образом:

Клиент Сумма Город
Джон 4 Город B
Патрик 3 Город A

И множество других столбцов.

Я ищу способ получить следующее:

Клиент Сумма Город
Джон 4 Город B
Джон 4 Город B
Джон 4 Город B
Джон 4 Город B
Патрик 3 Город A
Патрик 3 Город A
Патрик 3 Город A

Таким образом, по сути, получить запись для каждого значения Суммы. Это для одноразовой операции импорта, поэтому не нужно делать это динамически или что-то подобное.

Это можно сделать с помощью Power Query, доступного в Windows Excel 2010+ и Microsoft 365 (Windows или Mac)

Чтобы использовать Power Query

  • Выберите некоторую ячейку в вашей таблице данных
  • Данные => Получение и преобразование => из Таблицы/Диапазона
  • Когда откроется редактор PQ: Главная => Редактор Advanced Editor
  • Обратите внимание на Имя Таблицы на строке 2
  • Вставьте код M ниже вместо того, что вы видите
  • Измените имя таблицы во второй строке обратно на то, что было сгенерировано изначально.
  • Читайте комментарии и исследуйте Примененные шаги, чтобы понять алгоритм
let

//Измените следующие строки, чтобы отразить фактический источник данных и столбцы
    Source = Excel.CurrentWorkbook(){[Name="Table11"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Клиент", type text}, 
        {"Сумма", Int64.Type}, {"Город", type text}}),

    #"Repeat Rows" = 
        Table.FromRecords(
            List.Combine(
                List.Accumulate(
                    {0..Table.RowCount(#"Changed Type")-1},
                    {}, 
                    (state, current)=> 
                        state & 
                            {List.Repeat(
                                {#"Changed Type"{current}}, 
                                Record.Field(#"Changed Type"{current},"Сумма"))
                            })
                    ))
in
    #"Repeat Rows"

enter image description here

Скрипт Power Query выше работает идеально. Но возможно ли также получить сумму, разделенную и вставленную в каждую ячейку. Как в моем примере, например 1,2,3,4 и вставить 1 в первую ячейку, 2 в следующую и так далее. Смотрите мой пример ниже.

Пример

.

Ответ или решение

Теория

Microsoft Excel — это популярный инструмент для работы с электронными таблицами. Он широко используется для анализа данных, создания отчетов и решения различных бизнес-задач. Одной из функций, которую часто используют в Excel, является "Get & Transform", также известная как Power Query. Она позволяет импортировать, чистить и преобразовывать данные из разных источников и в разных форматах. Одной из полезных функций, которую можно реализовать с помощью Power Query, является создание множества строк для каждого значения в столбце "Amount" (Сумма). Эта задача может быть особенно полезной при подготовке данных для анализа или отчетности.

Пример

Рассмотрим пример, представленный в вопросе. У нас есть исходная таблица с тремя столбцами: "Customer" (Клиент), "Amount" (Сумма) и "City" (Город). Данные организованы следующим образом:

Customer Amount City
John 4 City B
Patrick 3 City A

Для каждого клиента необходимо создать столько строк, сколько указано в столбце "Amount". Таким образом, результат должен выглядеть следующим образом:

Customer Amount City
John 4 City B
John 4 City B
John 4 City B
John 4 City B
Patrick 3 City A
Patrick 3 City A
Patrick 3 City A

Применение

Чтобы достичь желаемого результата, можно использовать Power Query, который доступен в Excel 2010 и более поздних версиях, а также в Microsoft 365. Ниже описан пошаговый процесс реализации:

  1. Выбор ячейки в исходной таблице: Откройте Excel и выберите любую ячейку внутри вашей таблицы данных.

  2. Открытие Power Query: Перейдите в меню "Данные" и выберите "Из таблицы/диапазона" в разделе "Получить и преобразовать данные". Это откроет редактор Power Query.

  3. Редактирование кода в Power Query:

    • В редакторе Power Query выберите "Главная" -> "Дополнительный редактор".
    • Замените текущий M-код на предложенный, не забыв изменить имя таблицы во второй строке на ваше имя таблицы, сгенерированное Excel.
    • Код будет выглядеть следующим образом:
let
    // Измените следующую строку в соответствии с источником данных и названиями столбцов
    Source = Excel.CurrentWorkbook(){[Name="ВашеИмяТаблицы"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Customer", type text}, {"Amount", Int64.Type}, {"City", type text}}),

    #"Repeat Rows" = 
        Table.FromRecords(
            List.Combine(
                List.Accumulate(
                    {0..Table.RowCount(#"Changed Type")-1},
                    {}, 
                    (state, current) => 
                        state & 
                            {List.Repeat(
                                {#"Changed Type"{current}}, 
                                Record.Field(#"Changed Type"{current},"Amount"))
                            })
                    ))
in
    #"Repeat Rows"
  1. Понимание шагов:

    • Source: Задает источник данных из текущей рабочей книги Excel.
    • Changed Type: Преобразует типы данных столбцов в соответствующие типы (текст для клиентов и городов, целочисленный для суммы).
    • Repeat Rows: Задает создание дополнительной таблицы, где строки повторяются в соответствии с значением в столбце "Amount".
  2. Завершение работы: Закончите редактирование и загрузите результат обратно в Excel для дальнейшего использования.

Таким образом, Power Query позволяет автоматизировать процесс дублирования строк в зависимости от значения в определенном столбце. Это особенно полезно для пользователей, которым необходимо повторно обращаться к аналогичной задаче или которым требуется быстро подготовить данные в нужном формате для однократной задачи импорта.

Оцените материал
Добавить комментарий

Капча загружается...