Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Система отчетов  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 56717
Система отчетов на экселе
Посоветуйте или отсоветуйте

На основании одних и тех же данных - около 50 отчетов и графиков

Планирую пока вот так:

1. Drop/Create Глобальная временная таблица - одна процедура

2. Заполнение Глобальной временной таблицы - одна процедура (ну или несколько; но пока одна)
Внутри будут:
2.1 пересоздание времянки - вызов п.1. Какие подводные камни? Вдруг кто-то ту же времянку еще не закрыл?
2.2 инсерты и несколько апдейтов. Нужны ли begin trans / commit?

3. На каждый запрос из времянки будет своя процедура с запросом
2 янв 17, 11:14    [20068939]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 56717
я - новичок в T-SQL
критикуйте
2 янв 17, 11:22    [20068941]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 56717
как группировать процедуры, формирующие отчеты?
В оракле были пакеты. Тут какие методы? Именовать процедуры каким-то единым методом? Каким?

get_sql_report_1
get_sql_report_5
get_sql_report_505

?
2 янв 17, 11:52    [20068961]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
andreymx
Drop/Create Глобальная временная таблица - одна процедура
https://msdn.microsoft.com/en-us/library/ms174979.aspx
Global temporary tables are automatically dropped when the session that created the table ends and all other tasks have stopped referencing them. The association between a task and a table is maintained only for the life of a single Transact-SQL statement. This means that a global temporary table is dropped at the completion of the last Transact-SQL statement that was actively referencing the table when the creating session ended.
2 янв 17, 12:36    [20068988]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4769
andreymx,


автор
задание : итоги в различных разрезах и сортировках цех-участок-изделие-профессия-оборудование-некие итоги
в Ассеss я делала рабочую таблицу, согласно строке задания
далее пользователь работал уже с этой таблицей , задавая требуемый разрез и получая отчет в НТМ (для автоподгонки ширины столбцов)
--цех-участок-изделие-итоги
--цех-изделие-итоги
--изделие-цех-профессия
.....
вариантов очень много, отчет делался программно в НТМ формате(применялись только стандартные теги, без наворотов), по первому полю --можно было реализовать переход на новый лист(например, чтобы каждый цех с нового листа)

рабочих таблиц было 6(с разными итогами и разрезами), формировали их ответственные за расчеты в плановом отделе и отделе труда, остальные только просматривали

пользователей вполне устроил такой подход
--автоподбор по ширине
--просмотр в броузере или печать в word, excel тоже откроет
--возможность добавить перед каждым цехом согласовано/утверждаю и подписи после

я не работала в MS SQL, но в любом случае в нем можно сделать таблицу,на которую настроить просмотр в аксесс или ексель
2 янв 17, 12:37    [20068989]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
andreymx
Планирую пока вот так:

1. Drop/Create Глобальная временная таблица - одна процедура

2. Заполнение Глобальной временной таблицы - одна процедура (ну или несколько; но пока одна)
Внутри будут:
2.1 пересоздание времянки - вызов п.1. Какие подводные камни? Вдруг кто-то ту же времянку еще не закрыл?
2.2 инсерты и несколько апдейтов. Нужны ли begin trans / commit?

3. На каждый запрос из времянки будет своя процедура с запросом
Какая глобальная времянка, какие запросы из времянки?
Просто для отчётов делаются процедуры, которые возвращают нужные для отчёта данные.
andreymx
как группировать процедуры, формирующие отчеты?
В оракле были пакеты.
Придумать систему именования, плюс ещё схемы.
Пакетов нету. Вообще пакеты в оракле - это не метод группировки процедур, они всё таки шире.
2 янв 17, 12:37    [20068990]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
o-o
Guest
зачем временная таблица и почему не сделать нормальную постоянную?
отчеты-то что формирует, процедуры или Эксель?
-----
постоянная таблица:
не исчезает при рестарте;
права на нее выдаются только тем, кто должен иметь доступ к данным,
как следствие, данные видят только те, кому они предназначены,
а не абсолютно все, попадающие на сервер;
обновяемый Эксель может смотреть на такую таблицу
-----
зачем "группировать" процедуры?
хотите их фильтровать в ОЕ?
именуйте консистентно, с общей частью в названии, по которой и будете в дальнейшем фильтровать.
хотите выдать кому-то права заранее на какие-то процедуры, даже разработанные потом?
создайте определенную схему под эти процедуры,
а кому надо, выдайте права на эту схему.
этот "кто надо" будет иметь доступ и к последующим процедурам, добавленным в эту схему
2 янв 17, 12:42    [20068995]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 56717
Для чего я планировал времянку:
Необходимо выполнить несколько вычислений, джойнов и расшифровок, которые лучше один раз сделать в одном месте и денормализировать во времянку, чем лепить во всех 50 запросах.

Почему времянка, а не постоянная таблица? Несколько десятков пользователей формируют отчёты за разные периоды.
Кому-то нужны оперативные данные за последний час, кому-то - за все полгода.

Зачем группировать процедуры? Ну когда их будет несколько тысяч, рыться в них будет непросто. Да и понять, какая для чего - тоже.


ЗЫ: спасибо за критику, кидайте бест практис
2 янв 17, 12:59    [20069012]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
andreymx
Необходимо выполнить несколько вычислений, джойнов и расшифровок, которые лучше один раз сделать в одном месте и денормализировать во времянку, чем лепить во всех 50 запросах.

Почему времянка, а не постоянная таблица? Несколько десятков пользователей формируют отчёты за разные периоды.
Кому-то нужны оперативные данные за последний час, кому-то - за все полгода.
Ну да, делаете времянку, потом туда сложными запросами набираете данные.

Только почему "глобальная"?
Глобальная будет работать так же, как постоянная, то есть будет видна всем пользователям и процедурам, будет одна для всех.

Другой вопрос, как в экселе удобнее работать с данными.
Вот люди выше делятся опытом - может, с ним лучше действительно использовать постоянные таблицы?
2 янв 17, 13:08    [20069017]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
o-o
Guest
andreymx
Почему времянка, а не постоянная таблица? Несколько десятков пользователей формируют отчёты за разные периоды.
Кому-то нужны оперативные данные за последний час, кому-то - за все полгода.

вас напугали, что в MS SQL Server читатели блокируют читателей?
враги врут
хоть учитайтесь все одновременно.
----
вы так и не ответили, что именно формирует отчет.
Эксель?
процедура?
в сторону Reporting Services не хотите посмотреть?
делаете свои отчеты с параметрами, публикуете их на портале.
вся организация запускает их, каждый со своими фильтрами.
эспортируют потом в тот же Эксель
2 янв 17, 13:10    [20069024]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
o-o
Guest
alexeyvg
andreymx
Необходимо выполнить несколько вычислений, джойнов и расшифровок, которые лучше один раз сделать в одном месте и денормализировать во времянку, чем лепить во всех 50 запросах.

Почему времянка, а не постоянная таблица? Несколько десятков пользователей формируют отчёты за разные периоды.
Кому-то нужны оперативные данные за последний час, кому-то - за все полгода.
Ну да, делаете времянку, потом туда сложными запросами набираете данные.

и пересчитывать это каждому пользователю?
он сейчас описал работу DWH,
зачем же на выходе формировать временные таблицы?
чтобы вот каждому из его десятков пользователей денормализовать все по-новой?
процедура(ы) денормализации запускается 1 раз (допустим, ночью, по расписанию)
формирует нужную широченную таблицу.
днем ее все читают и строят свои отчеты.
никто по 100 раз на дню ничего не денормализует
2 янв 17, 13:15    [20069037]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
o-o
зачем же на выходе формировать временные таблицы?
чтобы вот каждому из его десятков пользователей денормализовать все по-новой?
процедура(ы) денормализации запускается 1 раз (допустим, ночью, по расписанию)
формирует нужную широченную таблицу.
днем ее все читают и строят свои отчеты.
никто по 100 раз на дню ничего не денормализует
Я же пишу не про работу всей информационной системы, а только про этап "строят".
Обработка данных в ИС - это другая тема, и, вообще говоря, не для всех приемлемо денормализовать данные в постоянной таблице - есть же разные требования к точности, непротиворечивости отчётов.
2 янв 17, 13:26    [20069056]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 56717
Мне непонятен вопрос о том, кто формирует отчет - эксель или процедура
Отчет формирует Эксель, процедура формирует источник данных для него

Вопрос по глобальной времянке
Похоже, меня подвели знания Оракла.
В МС СКЛ данные глобальной времянки не уникальны для сессии/коннекта?
2 янв 17, 13:27    [20069057]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
o-o
Guest
а что тут непонятного?
допустим, у нас тоже есть отчетность.
есть ночные процедуры, производящие денормализацию,
на таблицы, производимые этими процедурами, смотрят обновляемые Эксели в том числе.
отчет строит Эксель: в нем забит запрос, обращающийся к таким-то *постоянным* таблицам.

но есть и отчеты, формируемые репортингом/ВО из процедур.
т.е. написана процедура, соединяющая все, что надо,
может и с использованием временных таблиц,
потом эта процедура вызывается в отчете или ВО.
тут уже отчет строит именно процедура, репортинг/ВО только лишь отображает результат,
формируемый процедурой.
в первом случае ЭКСЕЛь лезет в постоянные таблицы.
которые видны всем, кому надо.
во втором процедуры, строящие отчет, используют временные таблицы,
не глобальные, а локальные, #tmp.
такие времянки должны быть видны только внутри самой процедуры.
и если один и тот же отчет запускает одновременно куча пользователей,
каждый пользователь запускает одну и ту же процедуру, но со своими параметрами.
каждый запущенный экземпляр процедуры формирует *свои* времянки,
не видимые для той же процедуры, запущенной другим пользователем.
и тут, разумеется, временные результаты не надо в постоянную таблицу класть,
т.к. они относятся только к тому пользователю,
что процедуру запустил
2 янв 17, 13:51    [20069084]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
andreymx
В МС СКЛ данные глобальной времянки не уникальны для сессии/коннекта?
Нет, название глобальная говорит о том, что она общая для всего сервера.
А локальные времянки общие для коннекта.
Т.е., если такую таблицу создать прямо в коннекте, то она будет видна везде в коннекте.
Если такую таблицу создать в процедуре, то она будет видна в ней, и в тех процедурах, которые вызываются из неё (и тоже только для вызова в текущем коннекте, т.е. в нескольких экземплярах запущенных процедур будет своя временная таблица).
После закрытия коннекта, или после выхода из создавшей процедуры, такая локальная таблица будет автоматически удалена.

Вообще, нужно учитывать некую разницу в подходах оракла и сиквела.
Оракл более "программируемый", T-SQL хуже приспособлен для построение сложного кода, для структурирования программного кода, при этом второй более заточен на операции над множествами, а в оракле построчная обработка приветствуется. Вот это всё надо иметь в виду.
2 янв 17, 13:52    [20069085]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 56717
Коллеги, вернёмся к моему барану

Необходимо сформировать отчет - 50 страниц таблиц + графиков
Данные должны быть актуальны и согласованы на время формирования отчета

детали:
- Исходных отбираемых строк для отчета - 1-100 тысяч
- куча сложных вычислений и расшифровок, которую не хотелось бы плодить в каждом запросе


+
Как делал в Оракле: закачивал эти 1-100 тысяч во времянку, расшифровывал и вычислял, из времянки строил запросы
В оракле времянка - всегда видима только в текущей сессии-сеансе
2 янв 17, 14:12    [20069110]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
o-o
Guest
если вам хочется узнать, какие таблицы в живут и видны только в пределах сессии,
то так бы и спросили, и вам уже это написали в этом топике --
это локальные временные таблицы.

зачем вся эта пердыстория с Экселями -- непонятно,
Эксель не может использовать временную таблицу, сформированную какой-то там процедурой,
если только не он сам создал эту самую времянку еще ДО запуска процедуры,
и процедуру сам же и запустил
2 янв 17, 14:26    [20069119]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
andreymx
В оракле времянка - всегда видима только в текущей сессии-сеансе
В сиквеле это называется локальной временной таблицей.

o-o
Эксель не может использовать временную таблицу, сформированную какой-то там процедурой,
если только не он сам создал эту самую времянку еще ДО запуска процедуры,
и процедуру сам же и запустил
А получить результат из процедуры (в которой он выбирается из локальной временной таблицы) он может?
2 янв 17, 14:32    [20069128]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 56717
Если я все верно понял, локальные времянки не видны за пределами создаваемой процедуры
Т.е. если я хочу их видеть во всех процедурах сессии, я должен создавать их вне процедуры? Например, в Экселе перед вызовом всех процедур формирования?
2 янв 17, 14:32    [20069129]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 56717
формировать времянку в экселе не хочется
Завтра какой-то другой репортс придётся натравить, и придётся в разных местах один и тот же скрипт городить
2 янв 17, 14:45    [20069147]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 56717
andreymx
формировать времянку в экселе не хочется
имеется в виду - create table #tmp
2 янв 17, 14:50    [20069150]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
o-o
Guest
alexeyvg
А получить результат из процедуры (в которой он выбирается из локальной временной таблицы) он может?

так именно что не может.
если процедура ничего внутри себя не создает,
только соединяет, то пожалуйста,
из такой процедуры спокойно делается обновляемый Эксель.
как только внутри процедуры создаются какие-то времянки, все, привет, Эксель выдает ошибку.
или если перед вызовом процедуры попытаться создать времянку,
то тоже вывалит ошибку.
поэтому мне и непонятно, как это Эксель ТС "создает отчеты из времянок, созданных процедурой".
репортинг да, создаст отчет и из процедуры со времянками тоже.
т.е. или Эксель пролетает, или таблицы должны быть постоянными.
2 янв 17, 14:57    [20069159]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
o-o
Guest
andreymx
Если я все верно понял, локальные времянки не видны за пределами создаваемой процедуры
Т.е. если я хочу их видеть во всех процедурах сессии, я должен создавать их вне процедуры? Например, в Экселе перед вызовом всех процедур формирования?

а вы уже создавали таблицы Экселем?
не в vba, а из query?
или вы именно про vba?
2 янв 17, 15:02    [20069162]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 56717
o-o
т.е. или Эксель пролетает, или таблицы должны быть постоянными.
не хотелось потом вручную данные чистить
можно, конечно, повесить в конце формирования отчетов delete
но это ж будут ресурсы жраться на всякие журналы?
2 янв 17, 15:05    [20069164]     Ответить | Цитировать Сообщить модератору
 Re: Система отчетов  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 56717
o-o
andreymx
Если я все верно понял, локальные времянки не видны за пределами создаваемой процедуры
Т.е. если я хочу их видеть во всех процедурах сессии, я должен создавать их вне процедуры? Например, в Экселе перед вызовом всех процедур формирования?

а вы уже создавали таблицы Экселем?
не в vba, а из query?
или вы именно про vba?
еще нет, но мне кажется, смогу
Из query, который в vba
2 янв 17, 15:06    [20069166]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить