#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, если это возможно.