Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Компоненты для OLAP+Delphi / 9 сообщений из 9, страница 1 из 1
30.07.2004, 14:42
    #32629551
IgorMan2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компоненты для OLAP+Delphi
DecisionCube - это конечно круто, но может есть что-то более крутое? Кто чего пользует? Я пока не привязан к базе, это важно (название базы для OLAP)?
...
Рейтинг: 0 / 0
30.07.2004, 17:37
    #32630021
nightsoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компоненты для OLAP+Delphi
hiercube v4.02
...
Рейтинг: 0 / 0
30.07.2004, 17:39
    #32630024
nightsoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компоненты для OLAP+Delphi
ссылка на hiercube v4.02 www.rbwsoft.com
...
Рейтинг: 0 / 0
02.08.2004, 11:53
    #32631100
Анастасия М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компоненты для OLAP+Delphi
У меня есть самописный компонент заточенный под ORACLE.
Cube + Grid + Navigator.
Грид по внешнему виду и функционалу напоминает ORACLE EXPRESS'овский.
Работает одновременно с несколькими столбцами.
Отдельная закачка справочников (значений измерений).
Поддерживает экспорт в EXCEL.
Предназначен для малых и средних кубов.
Работает быстро (на несколько порядков быстрее чем DecisionCube),
много памяти не ест (на сколько это возможно).
Требует постоянной связи с сервером, т.к. при смене порядка измерений выполняется новые запросы.

Нормально работает в 2-х проектах.
Хотела сделать еще под MSSQL заточку, но пока руки не дошли.
...
Рейтинг: 0 / 0
02.08.2004, 22:11
    #32632227
Simply Guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компоненты для OLAP+Delphi
2Анастасия М.
Ваш куб использует Оракловый OLAP? Или просто генерит многомерный куб на клиенте?
...
Рейтинг: 0 / 0
04.08.2004, 11:32
    #32634638
Анастасия М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компоненты для OLAP+Delphi
Simply Guest2Анастасия М.
Ваш куб использует Оракловый OLAP? Или просто генерит многомерный куб на клиенте?
Данный куб может работать в нескольких режимах:
1. Генерация неполного куба на сервере (два пересекающихся дерева измерений и наполнение плоской матрицы значений по всем точкам пересечений значений измерений). Конкретно:
для 9i:
1.1SELECT sum(c1) c1, max(c2) c2, a1, a2, a3, a4
FROM source
GROUP BY ROLLUP(a1, a2), ROLLUP(a3, a4)для 8i (двойной ROLLUP в одном запросе не поддерживается):
1.2SELECT sum(c1) c1, max(c2) c2, a1, a2, a3, a4
FROM (
SELECT sum(c1) c1, max(c2) c2, a1, a2, a3, a4
FROM source
GROUP BY ROLLUP(a3, a4), a1, a2
)
GROUP BY ROLLUP(a1, a2), a3, a4
Результаты запросов 1.1 и 1.2 получаются абсолютно аналогичными, за исключением порядка записей
В запросе 1.2 сложно делать аналитические агрегации.
Так например чтобы сделать COUNT(c3) с3 в 1.2, придется во внутреннем запросе делать COUNT(c3) c3, а во внешнем Sum(c3) c3, иначе получим неверные значения.

2.Для избежания сложностей аналитических запросов под 8i
пришлось реализовать формирование полного куба на сервере.
А для сокращения памяти клиента и сетевого трафика - генерацию соответствующего HAVING, который отбирает только то, что возвращают запросы 1.1 и 1.2.
2.1SELECT sum(c1), max(c2), count(1) c3
FROM Base_source
GROUP BY CUBE(a1, a2, a3, a4)
HAVING (не помню по памяти, но все логично вычисляется)
Но тогда придется все равно считать куб каждый раз.
Для избежания этого компонент может работать с таблицей(витриной), содержащей полный куб аля
CREATE TABLE source AS
SELECT sum(c1), max(c2), count(1) c3
FROM Base_source
GROUP BY CUBE(a1, a2, a3, a4);
только таблицу лучше делать index based
И отбирать из нее записи необходимы для отображения:
2.2SELECT c1, c2, c3
FROM source
WHERE (аналогично HAVING'у из 2.1)

Как показывает практика наиболее жизнеспособный вариант это 1.1.


Далее компонент разбирает ДатаСет (довольно шустро - алгоритмы проработаны оч. хорошо), строит по нему два массива (дереда) индексов (вертикальный и горизонтальный) и выводит в специальный грид аля ORACLE EXPRESS (по виду и функционалу).
В гриде можно сворачивать и разворачивать деревья (вертикальное и горизонтальное) измерений. Реализован поиск по значениям измерений. Ну и всякий другой вункционал, в т.ч. генерация SQL для отображения всех записей из source на конкретную агригацию (по значениям измерений).
Еще есть Navigator (как в DecisionCube? только более навернутый и редакотором фильтров).

ЗЫ. Весь SQL генерится автоматом надо только в дизайнтайме настроить измерения и агрегации. Можно и в рантайме, считывая из метаданных.

Вот такие пироги.

А с оракловыми кубами компонент не работает
Все начиналось еще под 8i, в котором кубов не было.
...
Рейтинг: 0 / 0
04.08.2004, 11:35
    #32634645
Анастасия М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компоненты для OLAP+Delphi
Забыла написать:
в приведенных примерах
c1, c2, c3 - агрегации;
a1, a2 - измерения отображающиеся по горизонтали;
а3, а4 - измерения отображающиеся по вертикали.
...
Рейтинг: 0 / 0
04.08.2004, 11:38
    #32634662
Анастасия М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компоненты для OLAP+Delphi
Анастасия М.
2.2SELECT c1, c2, c3
FROM source
WHERE (аналогично HAVING'у из 2.1)

Читать как 2.2SELECT c1, c2, c3, a1, a2, a3, a4
FROM source
WHERE (аналогично HAVING'у из 2.1)
...
Рейтинг: 0 / 0
04.08.2004, 17:06
    #32635516
SImply Guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компоненты для OLAP+Delphi
2Анастасия М.
Ясно, спасибо :))
Я задал вопрос из любопытства - в свое время делал классы (в компоненты не оборачивал) для MS AS, интересовала реализуемость того же для Оракловых кубов.
Думаю, это вполне реализуемо, но браться за это не хочется, пока нет необходимости.
Еще раз, спасибо :))
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Компоненты для OLAP+Delphi / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]