Мощный запрос для фильтрации представления SQL на основе списка столбцов Excel

#sql-server #excel #powerbi #powerquery #m

#sql-сервер #excel #powerbi #powerquery #m

Вопрос:

Есть ли способ фильтровать представление SQL на основе списка значений в столбце таблицы Excel с помощью Power Query?

У меня есть представление SQL, которое возвращает большой набор данных (миллионы записей или свойств). Пользователи хотят фильтровать его на основе столбца таблицы Excel с идентификаторами свойств. Я знаю, что могу просто выполнить объединение слиянием на основе идентификатора свойства между представлением и столбцом Excel в power query. Но похоже, что слияние сначала приводит к миллионам записей, а затем фильтрует их при объединении. Что занимает много времени. Пользователи хотят ежедневно изменять список идентификаторов свойств «на лету» и запускать запрос.

По сути, я хотел создать в Excel power query то, что есть в SQL

 SELECT * FROM SQLViewName 
WHERE PropertyID IN (Select Column from ExcelTable) 
  

Ответ №1:

Вы должны быть в состоянии сделать это с помощью List.Contains функции.

Если мой ExcelTable является

 ID
---
436
437
438
439
  

затем добавление подобного фильтра должно сработать:

 Table.SelectRows(SQLViewName, each List.Contains(ExcelTable[ID], [PropertyID]))
  

Когда я попробовал это и на последнем примененном шаге просмотрел собственный запрос, он свернул таблицу Excel в WHERE предложение со ExcelTable значениями в виде литералов, подобных этому:

 select [_].[PropertyID],
    [_].[OtherColumns]
from [dbo].[SQLViewName] as [_]
where [_].[PropertyID] in (436, 437, 438, 439)
  

Это позволило мне загрузить таблицу с несколькими миллионами строк всего за пару секунд.

Комментарии:

1. Необходимо выбрать из текущего столбца Excel в SQL, как OP Я написал VBA для внедрения списка, но хотел бы, чтобы это было сделано M, если это возможно.