Страницы: 1
RSS
В PowerQuery в SQL-запрос передать значение
 
Привет всем.
В файле запрос работает, но фильтрация происходит после получения всей таблицы. А хотелось бы из сервера получить отфильтрованную таблицу. То есть фильтровать таким вариантом:       Как это сделать?
Код
 Select * From Таблица Where Фамилия = фильтр
Код
let
    фильтр = Excel.CurrentWorkbook(){[Name="фильтр"]}[Content][Column1]{0},
   baza=Sql.Database(".", "База", [Query="

            Select * From Таблица 

"] ) ,
   filtr_baza= Table.SelectRows(baza, each ([Фамилия] = фильтр))
in filtr_baza
 
Доброе время суток.
Цитата
Айван написал:
Как это сделать?
Изучить Passing Parameters To SQL Queries With Value.NativeQuery() In Power Query, если у вас есть некоторые проблемы со сбором строки SQL запроса из нескольких строк в Power Query.
Изменено: Андрей VG - 12.10.2020 15:00:46
 
Андрей VG, Спасибо вам и Крису.
Настроил. Надо просто знать)
А я с кавычками играл)
 
Айван, а выложить сюда корректный код ? )
 
Встречайте
Код
let
   baza = Sql.Database(".", "База"), 
   Test = Value.NativeQuery(
            baza, 
            "SELECT * FROM Таблица 
            WHERE Фамилия=@фильтр", 
            [фильтр=Excel.CurrentWorkbook(){[Name="фильтр"]}[Content][Column1]{0} ])
in
    Test

 
Цитата
Айван написал:
Excel.CurrentWorkbook(){[Name="фильтр"]}[Content][Column1]{0},
А передать уже таблицу или список уже никак наверное?
 
Айван, если список/таблица указаны в текстовом формате на языке SQL, можно конечно. Как структуру нет, ибо второй аргумент Value.NativeQuery должен быть текстом.
Вот горшок пустой, он предмет простой...
 
А если к примеру необходима выгрузка определённых дат(года), это так же можно сделать внутри? к примеру данные из куба выгружаются с 1990 года, а мне нужно только с 2018 ? такой фильтр поможет?
 
Цитата
Александр L написал:
такой фильтр поможет?
Дык, оно для этого и создано.
Вот горшок пустой, он предмет простой...
 
Благодарю, не знал.я на первом шаге сразу фильтровал, чтобы далее жизнь облегчить.Максим Зеленский вчера рекомендовал параметр сделать, а тут ещё лучше есть вещь.
 
Айван, если не сложно не могли бы вы провести тест, допустим в вашей таблице параметров 2 фамилии и выполнить код типа такого:
Код
let
   baza = Sql.Database(".", "База"), 
   Test0 = Value.NativeQuery(
            baza, 
            "SELECT * FROM Таблица 
            WHERE Фамилия=@фильтр", 
            [фильтр=Excel.CurrentWorkbook(){[Name="фильтр"]}[Content][Column1]{0} ]),
   Test1 = Value.NativeQuery(
            baza, 
            "SELECT * FROM Таблица 
            WHERE Фамилия=@фильтр", 
            [фильтр=Excel.CurrentWorkbook(){[Name="фильтр"]}[Content][Column1]{1} ])
in
    Test0 & Test1

Вопрос в чем, оно вообще отработает? Т.к. не редко встречаю вопросы что к одной БД в рамках одного запроса нельзя сделать 2 и более обращений, типа конфликт возникает и PQ рубит доступ при первом обращении в БД. Если отработает то это будет пример как можно натаскать небольших табличек из одной БД и женить их уже дальше как вздумается.
Заранее спасибо.
Вот горшок пустой, он предмет простой...
 
Ещё бы что за база данных и пример табличных данных для запроса не помешали бы. Уж больно разные диалекты и движков баз данных для хранимых процедур.
 
Тема, оказывается, живет, а я и не вижу)
Цитата
PooHkrd написал:
оно вообще отработает?
У меня дома отработало
И дома и на работе ms sql 2014.
Цитата
Андрей VG написал:
щё бы что за база данных и пример табличных данных для запроса не помешали бы
Сейчас придумаю файл. Вообще таблица скажем четыре столбца и строк 500. Задумка: отдать эту таблицу в запрос, в котором приджойнить к одному из столбцов этой таблицы данные таблицы sql-базы
 
Цитата
Айван написал:
sql-базы
Какой базы? Их в мире вагон и маленькая тележка :)
 
Андрей VG, Transact Sql, по моему. Или Вы про название базы? На Ваше усмотрение, потом правлю
Вот и пример. name к name2
 
Цитата
Айван написал:
Или
Цитата
Андрей VG написал:
Ещё бы что за база данных и пример табличных данных для запроса не помешали бы. Уж больно разные диалекты и движков баз данных для хранимых процедур.
Тогда по простому. Конструируете такую строку запроса в Power Query и делаете запрос к базе данных
Код
let
    Source = Sql.Database("(LocalDb)\MSSQLLocalDB", "localDemo", [Query=
"
Declare @joinTable As Table (id Int);
Insert Into @joinTable (id) Values 
   (103),
   (106);
Select * From dbo.dimProducts tp
   Inner Join @joinTable tj On (tp.IdProduct = id);
"])
in
    Source

Естественно числа используете свои из своей таблицы.
 
Цитата
Андрей VG написал:
Declare @joinTable As Table (id Int);Insert Into @joinTable (id) Values    (103),   (106);Select * From dbo.dimProducts tp   Inner Join @joinTable tj On (tp.IdProduct = id);"])
Андрей, подскажите правильно понял если. Все условия по отбору какие хотим сделать на первом шаге мы можем заложить изначально в этом шаге отбора?  
 
Цитата
Андрей VG написал:
Тогда по простому
Спасибо, но я совсем не въехал.
Я думал в запросе будут фигурировать названия столбцов name и name2
Я наверное ввел в заблуждение. Добавил в файл ожидаемый результат выгрузки
Изменено: Айван - 14.10.2020 18:28:03
 
Цитата
PooHkrd написал:
Если отработает то это будет пример как можно натаскать небольших табличек из одной БД и женить их уже дальше как вздумается
Тогда, наверное можно этот пример использовать как функцию, прикрутив функцию List.Generал)
 
Цитата
Айван написал:
name и name2
А где у вас #15 name2? Если вы любитель Agile - то это не ко мне. Мне его на работе по самое горло хватает.
Код
"Values" & Text.Combine(List.Transform(Excel.CurrentWorkbook(){[Name="фильтр_1"]}[Content][[name]][name], each "(N'" & _ & "')"), ",")
Таким кодом получите подстроку, нужную для сбора запроса к таблице SQL Server. А потом результат уже по полям name, name2 через Table.Join соедините.
 
Цитата
Андрей VG написал:
Если вы любитель Agile
А кто это? Chris-а Webb-а знаю. Еще знаю Mynda-у Treacy. А Agile не знаю
Цитата
Андрей VG написал:
у вас #15 name2
Это имя поля таблицы базы сервера. Эта таблица содержит более 50000 строк. Чтобы эту таблицу со всеми строками не тянуть в запрос, хотел sql запросом при- Left Join-ить к таблице из Excel таблицу из базы sql-сервера.
 
Цитата
Айван написал:
А Agile не знаю
Вот он. Написано красиво, а по сути выглядит так: заказчик не знает чего хочет и не может нормально сформулировать, в результате вместо нормального ТЗ заказчика сажают в одну комнату с разрабами и вместе они ваяют "мегапродукт" итерациями. Причем делают то, что заказчик вот щас вспомнил. В результате такой деятельности обычно получается крайне сырая шляпа, которую потом приходится выпрямлять годами.
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх