Excel Power Query из ODBC

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

КЛИЕНТЫ

ID  NAME
1   CLIENT A
2   CLIENT B
3   CLIENT C

КОНТАКТЫ

ID  CUSTOMER_ID NAME    PHONE
1   1           NAME 1  999
2   1           NAME 2  000
3   2           NAME 3  888
4   2           NAME 4  333
5   2           NAME 5  111
6   3           NAME 6  777
7   3           NAME 7  555
8   1           NAME 8  444

РЕЗУЛЬТАТ

CLIENT A
NAME 1  999
NAME 2  000
NAME 8  444

CLIENT B
NAME 3  888
NAME 4  333
NAME 5  111

CLIENT C
NAME 6  777
NAME 7  555

Я не очень хорошо разбираюсь в Excel, и мне нужно руководство, как это сделать.

Спасибо

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
89
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Откройте редактор PQ и создайте свои таблицы: вы можете ввести их вручную следующим образом: Главная страница --> Новая группа запросов --> Введите данные

Теперь вам нужно объединить ваши запросы, используя функцию Merge Queries:

Главная --> Объединить группу --> Объединить запросы (см. Рисунок)

Теперь вам нужно объединить запросы на основе столбцов ID <> CUSTOMER_ID:

Смотрите изображение:

Затем разверните столбцы, и вы увидите такую ​​​​таблицу:

Затем отфильтруйте столбец имени для клиента, для которого вы хотите увидеть результат:

Наконец, выберите того, кто загрузит его на ваш лист, и завершите задачу: в Excel вы увидите другой экран, подобный этому:

Нажмите ОК и вперед! Законченный!

Ответ принят как подходящий

Чтобы выполнить эту задачу с помощью Power Query, выполните следующие действия:


• Выберите ячейку в таблице данных,

• Вкладка «Данные» => «Получить и преобразовать» => «Из таблицы/диапазона»,

• Когда откроется PQ Editor: Home => Advanced Editor,

• Запишите все 2 названия таблиц,

• Вставьте приведенный ниже М-код вместо того, что вы видите.

• И обратитесь к примечаниям


let

    //Source Table CONTACTStbl
    SourceOne = Excel.CurrentWorkbook(){[Name = "CONTACTStbl"]}[Content],
    DataTypeOne = Table.TransformColumnTypes(SourceOne,{{"ID", Int64.Type}, {"CUSTOMER_ID", Int64.Type}, {"NAME", type text}, {"PHONE", Int64.Type}}),

    //Source Table CUSTOMERStbl
    SourceTwo = Excel.CurrentWorkbook(){[Name = "CUSTOMERStbl"]}[Content],
    DataTypeTwo = Table.TransformColumnTypes(SourceTwo,{{"ID", Int64.Type}, {"NAME", type text}}),

    //Merge both the tables
    Merge = Table.NestedJoin(DataTypeOne, {"CUSTOMER_ID"}, DataTypeTwo, {"ID"}, "CUSTOMERStbl", JoinKind.LeftOuter),
    #"Expanded CUSTOMERStbl" = Table.ExpandTableColumn(Merge, "CUSTOMERStbl", {"ID", "NAME"}, {"ID.1", "NAME.1"}),
    #"Removed Other Columns" = Table.SelectColumns(#"Expanded CUSTOMERStbl",{"NAME", "PHONE", "NAME.1"})
in
    #"Removed Other Columns"


• Измените имя таблицы на RESULTtbl, прежде чем импортировать ее обратно в Excel, обратите внимание, что вам нужно выбрать Только создание соединения.


• Затем откройте тот же запрос соединения RESULTtbl и щелкните правой кнопкой мыши, чтобы создать ссылку (выполните это трижды, начиная с 3 КЛИЕНТОВ), измените имя запроса на соответствующее ИМЯ КЛИЕНТА.

• Отфильтровать имя клиента и удалить столбец CLIENT.


КЛИЕНТУ А

let
    Source = RESULTtbl,
    #"Filtered Rows" = Table.SelectRows(Source, each ([NAME.1] = "CLIENT A")),
    #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"NAME.1"})
in
    #"Removed Columns"

Приведенный выше М-код предназначен для КЛИЕНТА А, как и для остальных. Просто скопируйте из Advance Editor и измените там ИМЯ КЛИЕНТА. И импортировать как таблицу в новый рабочий лист


КЛИЕНТУ Б

let
    Source = RESULTtbl,
    #"Filtered Rows" = Table.SelectRows(Source, each ([NAME.1] = "CLIENT B")),
    #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"NAME.1"})
in
    #"Removed Columns"


Для КЛИЕНТА С

let
    Source = RESULTtbl,
    #"Filtered Rows" = Table.SelectRows(Source, each ([NAME.1] = "CLIENT C")),
    #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"NAME.1"})
in
    #"Removed Columns"


РЕДАКТИРОВАТЬ

С существующим соединением Power Query (RESULTtbl) мы можем создать сводную таблицу и поместить поле CLIENT в область FILTERS сводной таблицы, а NAME & PHONE — в область ROWS.


• Щелкните вкладку «Данные» --> «Запросы и соединения» --> Щелкните правой кнопкой мыши RESULTtbl --> «Загрузить в» --> «Отчет сводной таблицы» --> выберите «Новый рабочий лист» или «Существующий лист со ссылкой на ячейку» --> нажмите «ОК».


• Затем на вкладке «Дизайн» в группе «Макет» отключите ПРОМЕЖУТОЧНЫЕ ИТОГОВ (нажмите «Не показывать промежуточные итоги»), а также ОБЩИЕ ИТОГОВ (нажмите «Выкл. для строк и столбцов»), скройте кнопки на вкладке «Анализ сводной таблицы», обязательно выберите Макет отчета на вкладке «Дизайн», чтобы выбрать «Показать в табличной форме».





• Наконец, запустите Показать страницы фильтров отчетов -- на вкладке «Анализ сводной таблицы» в меню «Параметры» вы получите желаемый результат в виде gif-изображения. показано ниже для вашего ознакомления.


Загрузите рабочую тетрадь отсюда: CLIENT_WISE_REPORT

Это правильно, но список клиентов намного шире и создать запрос для каждого клиента я не вижу, их может быть сотни. Я не очень разбираюсь в Excel, но я делаю это в PHP с помощью foreach, я не знаю, есть ли способ сделать это аналогичным образом.

user2426415 29.10.2022 23:26

@ user2426415, пожалуйста, обратитесь к редактированию, я добавил книгу, а также обновил gif, чтобы проверить

Mayukh Bhattacharya 30.10.2022 02:42

большое спасибо, это работает. Теперь у меня есть сомнения, если я добавлю третью таблицу, например таблицу адресов, и добавлю ее как последнюю строку, она будет повторять строки, даже если я не повторяю выбранные метки элементов.

user2426415 31.10.2022 00:19

Другие вопросы по теме

Похожие вопросы