OLAP.ru OLAP, data mining, analysis, данные, СУБД, генераторы отчетов, проектирование, принятие решений, оптимизация, хранилише, извлечение, поиск, Crystal, Business Objects, Cognos, SAS...
Полный список »
Business intelligence - effective data mining & analysis
Вход Регистрация Новости сайта Карта сайта/поиск RSS
 
OLAP и Business Intelligence
SUBSCRIBE.RU
 
 

Конференция Общие вопросы

Обсуждение тем, сопутствующих OLAP, системам поддержки принятия решений (СППР, DSS), добыч данных (data mining), хранилищ данных (DW).

 
Добавить сообщение »

Тема "Запрос с функциями агрегирования"

Автор:  Сергей Волконский Дата: 05.02.2010 03:20
Здесь показана часть таблицы фактов (STAFF), на которой построен куб:

------------------------------------------------------------------------------------------------
ФИО(ключ)........Должность............Шт.расписание........Ставка
------------------------------------------------------------------------------------------------
1......................ген.директор.........основной................1
1......................гл.бухгалтер.........совместитель...........0,25
2......................гл.инженер...........основной.................1
2......................нач-к цеха...........совместитель............0,5
3......................инженер...............основной.................1
3......................конструктор.........совместитель............0,5
3......................программист.........совместитель............0,25
4......................инженер...............основной.................1
------------------------------------------------------------------------------------------------

Задача такая - нужно вывести список людей (FIO_Id), которые имеют СУММАРНУЮ ставку 1.0, 1.25, 1.5 и 1.75.
Это делает SQL-запрос:

SELECT sum(Stavka) as sumSTAVKA, FIO_Id FROM STAFF
WHERE (SELECT sum(Stavka) FROM STAFF as S WHERE STAFF.FIO_Id = S.FIO_Id) = 1.0
GROUP BY FIO_Id
UNION
SELECT sum(Stavka) as sumSTAVKA, FIO_Id FROM STAFF
WHERE (SELECT sum(Stavka) FROM STAFF as S WHERE STAFF.FIO_Id = S.FIO_Id) = 1.25
GROUP BY FIO_Id
UNION
SELECT sum(Stavka) as sumSTAVKA, FIO_Id FROM STAFF
WHERE (SELECT sum(Stavka) FROM STAFF as S WHERE STAFF.FIO_Id = S.FIO_Id) = 1.5
GROUP BY FIO_Id
UNION
SELECT sum(Stavka) as sumSTAVKA, FIO_Id FROM STAFF
WHERE (SELECT sum(Stavka) FROM STAFF as S WHERE STAFF.FIO_Id = S.FIO_Id) = 1.75
GROUP BY FIO_Id

Результат запроса:
------------------------------------------
sumSTAVKA..........FIO_Id
------------------------------------------
........1....................4
........1,25...............1
........1,5.................2
........1,75...............3
------------------------------------------
Наверное, запрос написан неоптимально, но не в нем дело.

Требуется получить этот же результат не селектом из таблицы фактов, а из куба.
Как это сделать? Можно ли здесь использовать MDX-запрос? Как он должен выглядеть?

Если не MDX, то как еще можно получить этот результат?
Ответить на сообщение »

 

Добавить сообщение »

Рекомендовать Распечатать    
Хостинг: SiliconTaiga    Поддержка: Interface Ltd. Обратиться по техническим вопросам     
Rambler's Top100 TopList