SELECT 'кол-во сделок' AS Name, 1 AS id
UNION
SELECT 'средневзвешенная цена' AS Name, 2 AS id
UNION
SELECT 'минимальная цена' AS Name, 3 AS id
UNION
SELECT TOP (100) PERCENT 'максимальная цена' AS Name, 4 AS id
ORDER BY id
Сводный отчет
Необходимо построить сводный отчет, в котором:
область столбцов: дата каждой торговой сессии, номер месяца, номер года.
область строк: наименование товара, фабрика
область данных: кол-во сделок, средневзвешенная цена, минимальная и максимальная цена.
Клиент для отчета: MS Excel (на самом деле все равно кто клиент, поскольку идеология построения сводных отчетов в любой системе одинакова. все ниже описанное будет справедливо и для MS Reporting Services, проверял).
Я создал представление, которое выдает все необходимые данные. При отображении данных по кол-ву сделок и ценам системой отчетности (тут MS Excel) автоматически вычисляются подитоги и общие итоги. Но итог по кол-ву товара необходим, а итог по ценам (суммы по всем товарам и фабрикам) не имеет никакого смысла и эти итоги не нужны. Управлять подитогами пожно только из области строк (а это наименования товаров и фабрик, а не кол-во сделок и цены) и когда говоришь системе убрать подитоги, то таким образом подитоги убираются как не только с цен, но и с кол-ва сделок, а так не нужно.
Необходимо правильно настроить подитоги, в этом и заключается вся проблема.
Мой дальнейший ход мысли:
Выход напрашивается тогда такой: переместить цены и кол-во в область строк. Но для корректной работы отчета придется тогда координально перестраивать весь запрос. Раньше поля представления были:
год торговой сессии
месяц торговой сессии
дата торговой сессии
наименование фабрики
наименование товара
кол-во сделок
средневзвешенная цена товара (по всем сделкам)
минимальная цена
максимальная цена
Теперь необходимо новое представление:
год торговой сессии
месяц торговой сессии
дата торговой сессии
наименование фабрики
наименование товара
наименование атрибута
значение атрибута
где атрибут это:
Код:
Тогда и для каждого значения атрибута придется строить запросы, а это куча UNION-ов, например:
Код:
SELECT _Date, Factory, SECCODE, COUNT(id_Trader) AS Attr, 1 AS id
FROM dbo.Trades
GROUP BY _Date, Factory, SECCODE
UNION
SELECT _Date, Factory, SECCODE, MAX(Price) AS Attr, 3 AS id
FROM dbo.Trades
GROUP BY _Date, Factory, SECCODE
FROM dbo.Trades
GROUP BY _Date, Factory, SECCODE
UNION
SELECT _Date, Factory, SECCODE, MAX(Price) AS Attr, 3 AS id
FROM dbo.Trades
GROUP BY _Date, Factory, SECCODE
эти два подзапроса соединяются иннер-джойнами, ну и так далее...
В результате задача решается, но получается огромный и медленный запрос с кучей объединений.
Уверен что такой подход является плохой практикой построения отчета, задача имеет гораздо более лаконичное и красивое решение, но какое?
Друзья, неужели проектирование сводных отчетов это такая редкая задача?
Цитата: rSolanov
Друзья, неужели проектирование сводных отчетов это такая редкая задача?
Скорее скучная... я так и не смог прочитать ваш пост полностью :rolleyes: (простите).
Цитата: rSolanov
Друзья, неужели проектирование сводных отчетов это такая редкая задача?
Сформулируйте по-другому - попроще и используя ER-диаграммы. Попробуем помочь :)
Я тогда пока сам буду разбираться, хоть это и форум, но сильно напрягать Вас мне уж как-то неудобно... Просто возникли некоторые идеи, если сам разберусь, обязательно напишу подробное решение, ведь возможно кому-то еще тоже по этому вопросу нужна помощь