Страницы: 1
RSS
Отчет из SQL Server при каждом открытии задавать новый диапазон дат
 
Здесь была уже такая тема. И много других, но SQL Server слишком сложен .
Подскажите, есть SQL Server и запрос в него. Необходимо параметр m.DocDate прикрутить к ячейкам экселя, что бы он в запросе самом менялся и потом выгружал данные за определенные периоды. При этом ввиду специфики работы, часто нужно задавать временные промежутки через параметр Between. Прикладываю файл с запросом внутри.  
 
bereteli, В файле текст запроса, но не сам запрос. Как вы его формируете, от этого зависит решение.
По вопросам из тем форума, личку не читаю.
 
bereteli, и версию Экселя не забудьте указать.
Вот горшок пустой, он предмет простой...
 
2016 Эксель.
Запрос и есть то что написано в экселе. Табличка является выгрузкой из этого запроса. Не могу залить сюда сам запрос из-за размера.
 
Раз уж вы лезете в БД через PQ, то вообще никаких проблем нету забрать с листа значения и использовать их в запросе. Ознакомьтесь с данным приемом от хозяина сайта, и примените для своего случая.
Цитата
PooHkrd написал:
Не могу залить сюда сам запрос из-за размера.
Размера чего? Данных? Они не нужны.
Скопируйте запрос Power Query со строкой подключения к БД на SQL из расширенного редактора и вставьте в сообщение.
Изменено: PooHkrd - 06.09.2019 14:51:04
Вот горшок пустой, он предмет простой...
 
а для MSQuery ваще все просто, параметры прописал и радуемся автообновлению
По вопросам из тем форума, личку не читаю.
 
Вот выгрузка эта же из расширенного редактора.
Код
let
    Источник = Sql.Database("DB-GMS-SRV", "GMSData38", [Query="Select#(tab)#(lf)#(tab)m.DocDate [дата чека], m.StockID [код склада], d.Qty [кол-во проданного] #(lf)from t_CRRet m With(NoLock)#(tab)#(lf)#(tab)Inner Join t_CRRetD d With(NoLock) On d.ChID = m.ChID#(lf)#(tab)Inner Join r_Prods p With(NoLock) On p.ProdID = d.ProdID#(lf)#(tab)Inner Join r_ProdC c With(NoLock) On c.PCatID = p.PCatID#(lf)#(tab)Inner Join r_ProdG g With(NoLock) On g.PgrID  = p.PgrID#(lf)#(tab)Inner Join r_ProdG1 g1 With(NoLock) On g1.PgrID1  = p.PgrID1#(lf)#(tab)Inner Join r_ProdG2 g2 With(NoLock) On g2.PgrID2  = p.PgrID2#(lf)#(tab)Inner Join r_ProdG3 g3 With(NoLock) On g3.PgrID3  = p.PgrID3#(lf)#(tab)Inner Join ir_ProdG7 g7 With(NoLock) On g7.PgrID7  = p.PgrID7#(lf)#(tab)Inner Join ir_ProdG8 g8 With(NoLock) On g8.PgrID8  = p.PgrID8#(lf)#(tab)Inner Join t_PInP pp With(NoLock) On pp.ProdID  = d.ProdID and pp.PPID  = d.PPID#(lf)#(tab)Inner Join r_Comps cc With(NoLock) On cc.CompID  = pp.CompID#(lf)where m.DocDate Between '2019-09-01' and '2019-09-01' #(tab)#(lf)and m.StockID in (160,168)#(tab)#(lf)Order By m.DocDate --Desc#(tab)#(lf)"])
in
    Источник

Скрытый текст

Два варианта скинул, кому как удобнее читать. Ребята спасибо за помощь.  
 
Пробуйте запрос из файла:
Скрытый текст
Изменено: PooHkrd - 06.09.2019 16:23:14
Вот горшок пустой, он предмет простой...
 
Работает, осталось только разобраться как это на другие отчеты кинуть) Спасибо большое!!!!!
Изменено: bereteli - 06.09.2019 17:41:55
 
Вроде бы ругается на слишком длинный нативный запрос, который передаете серверу, типа максимум можно 128 символов. Странно конечно, чего там можно напихать в 128 символов непонятно.
Надо гуглить ошибку, может есть какие-то объезды.
Вот горшок пустой, он предмет простой...
 
У меня все получилось, если работать именно с вашим запросом. Где в запросе первыми функциями стоят параметры клеточек на даты. Теперь буду в этом разбираться. Спасибо Вам огромное!!!! Это решает нереально количество моих задач на работе!!!! Всех Вам благ!
 
Не могли бы вы мне ещё помочь, как сделать тоже самое, но если в ячейке будет текст или число
 
Покажите в примере варианты текста и числа.
Вот горшок пустой, он предмет простой...
 
Ячейка общего формата, при записи туда одного числа все работает, но если написать 165,175,177 то уже не будет. Не могу правильно подобрать код
Код
(Shop = Number.ToText (Excel.CurrentWorkbook(){[Name="Shop"]}[Content]{0}[Column1])



and  m.StockID in ('" & Shop & "')   
Изменено: bereteli - 16.09.2019 13:53:58
 
Конечно не работает, Number.ToText преобразовывает числовой тип данных в текстовый. если вы пишите в ячейке 165, 177 то это ни разу ни число, это уже текст. Вместо этой функции рекомендую использовать Text.From, он ругаться не будет.
А вообще-то лучше задать для данной ячейки формат данных вместо общего - текст, и этот тип будет корректно подтягиваться в PQ без преобразования типов. Также данное действие застрахует вас от преобразования типов Экселем "на лету", это когда он по своему интерпертирует данные, которые вы вводите в ячейку.
Вот горшок пустой, он предмет простой...
 
А как данный тип записывается внизу, мне постоянно выдает ошибку type int. Не пойму как правильно записать в скобках параметр текса
Код
and  m.StockID in ('Shop1')    

Код
Ошибка:DataSource.Error: Microsoft SQL: Conversion failed when converting the varchar value 'Shop1' to data type int.Сведения:    DataSourceKind=SQL    DataSourcePath=db-gms-srv;GMSData38    Message=Conversion failed when converting the varchar value 'Shop1' to data type int.    Number=245    Class=16

Изменено: bereteli - 16.09.2019 15:03:24
 
Ну, это ж вроде движок SQL ругается что не понимает как ваш текст преобразовать в integer. Я по СКуЛю не очень шарю, это уже междисциплинарный вопрос.
Вот горшок пустой, он предмет простой...
 
Там ранее стояли
Код
where m.StockID in (165)
Я использовал Ваш совет, и у меня текст пошел в запрос.
Но квери теперь говорит, что он не может найти эту ячейку.

DataSource.Error: Microsoft SQL: Invalid column name 'Shop'.
Код
where m.StockID in (Shop)

Не хватает мне моих познаний просто этот текст туда загнать(
 
Ничего не понимаю, у вас в примере один код, а в постах вы показываете куски, которых нет в примере.
Объясните четко проблему. Вот таким кодом я делаю вот то-то и то-то. А вот что мне ругается Эксель.
Цитата
bereteli написал:
Не хватает мне моих познаний просто этот текст туда загнать(
Вы по ссылке из моего поста за нумером 5 ходили? Что там непонятного?
Вот горшок пустой, он предмет простой...
 
Я Вас уже достал, я понимаю. Пол дня перебираю этот код и все время разные ошибки.
Постараюсь объяснить нормально.
Ранее вы написали избавиться от функции ToText, т.к. текст уже есть. Я это выполнил
Код
Shop = Excel.CurrentWorkbook(){[Name="Shop"]}[Content]{0}[Column1]
После чего, второй параметр перестал отвечать и начал выдавать ошибку.
Код
Where m.StockID in ('" & Shop & "')  
Не удается применить оператор & к типам Text и Number. Я понимаю, что '" & Shop &"' используется для дат.
После я попытался  
Код
Where m.StockID in ("Shop")  
Выдает ошибку "Comma" или же "Cant find column Shop".

В самой базе данных параметр m.StockID идет по типу "Number" после удачной выгрузки.
 
Цитата
bereteli написал:
Я Вас уже достал, я понимаю.
Нет, я индифферентен к людям, которые затрудняют помощь самим себе.
Цитата
bereteli написал:
Ранее вы написали избавиться от функции ToText
Приведите цитату где я такое писал, только без выдергивания из контекста.
Цитата
bereteli написал:
т.к. текст уже есть. ... Не удается применить оператор & к типам Text и Number
Текста в ячейке нет, есть число, поэтому и ругается. Т.е. что-то вы сделали не то.
Цитата
bereteli написал:
Я понимаю, что '" & Shop &"' используется для дат.
С чего вы это взяли? Даже из кода видно что оно используется для склеивания текста, и даты тут ни при чем. А как уже ваш СКуЛ запрос воспринимает этот текст - как дату или как что-то еще, это уже PQ не касается.
Цитата
bereteli написал:
Выдает ошибку "Comma" или же "Cant find column Shop".
Где-то вы напортачили в синтаксисе запроса.

Прошу обратить внимание, что ранее как только вы четко пояснили в примере что вам нужно решение было предоставлено довольно быстро. Это все потому что было понятно что есть и что надо. Сейчас ничего не понятно. Поэтому помочь затрудняюсь. Если же и дальше будете изъясняться непонятно, то вообще сюда заходить будет скучно. И "достало" тут не при чем.
Вот горшок пустой, он предмет простой...
 
Тогда моя последняя попытка, надеюсь сможете помочь.
Как записать ячейку "Shop" в SQL Server, что бы в нее можно было вписывать больше 1-го магазина через запятую.
В SQL Server: m.StockID является номером магазина, которые входят в таблицу типом "Number".
 
Сравните текст SQL запроса, который вы привели на листе и тот, который формирует шаг ConnectionString в PQ запросе. Вроде бы они одинаковые. Исходя из этого предполагаю, что так будет работать. Т.е. лишними были апострофы и Number.ToText.
Так работает?
Изменено: PooHkrd - 16.09.2019 17:56:45
Вот горшок пустой, он предмет простой...
 
Это все-таки была функция TextFrom. Все перепробовал, и не знал как как вводить. Спасибо большое Вам за помощь, наконец-то всё получилось.
Страницы: 1
Наверх