У меня есть 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, и мне нужно руководство, как это сделать.
Спасибо


Откройте редактор 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
@ user2426415, пожалуйста, обратитесь к редактированию, я добавил книгу, а также обновил gif, чтобы проверить
большое спасибо, это работает. Теперь у меня есть сомнения, если я добавлю третью таблицу, например таблицу адресов, и добавлю ее как последнюю строку, она будет повторять строки, даже если я не повторяю выбранные метки элементов.
Это правильно, но список клиентов намного шире и создать запрос для каждого клиента я не вижу, их может быть сотни. Я не очень разбираюсь в Excel, но я делаю это в PHP с помощью foreach, я не знаю, есть ли способ сделать это аналогичным образом.