акладних витрат пам'яті і часу обробки. Поступимо трохи хитріше - заведемо одне дерево для зберігання всіх використовуваних в рядках комбінацій вимірювань, яке буде ідентично вищеописаному, але його елементами будуть не покажчики на рядки (яких немає як таких), а їх індекси, причому самі значення індексів нас не цікавлять, та використовуються тільки як унікальні ключі. Потім ці ключі будемо використовувати для пошуку потрібного елемента всередині стовпця. Самі ж стовпці найпростіше представити у вигляді звичайного двійкового дерева. Графічно отриману структуру можна представити таким чином:
В
Схема 9. Зображення зведеної таблиці у вигляді двійкового дерева
Для визначення відповідних номерів рядків можна використовувати таку ж процедуру, що й описана вище процедура визначення стовпців зведеної таблиці. При цьому номери рядків є унікальними в межах однієї зведеної таблиці та ідентифікують елементи у векторах, які є стовпцями зведеної таблиці. Найбільш простим варіантом генерації цих номерів буде ведення лічильника і інкремент його на одиницю при додаванні нового елементу в дерево заголовків рядків. Самі ці вектора стовпців простіше всього зберігати у вигляді двійкових дерев, де в якості ключа використовується значення номера рядка. Крім того, можливе також і використання хеш-таблиць. Так як процедури роботи з цими деревами детально розглянуті в інших джерелах, то зупинятися на цьому не будемо і розглянемо загальну схему додавання елемента в стовпець. p align="justify"> В узагальненому вигляді послідовність дій для додавання елемента в матрицю можна описати таким чином:
1.Определіть номери рядків, в які додаються елементи
. Визначити набір стовпців, у які додаються елементи
. Для всіх стовпців знайти елементи з потрібними номерами рядків і додати до них поточний елемент (додавання включає в себе під'єднання потрібної кількості значень фактів і обчислення агрегованих значень, які можна визначити інкрементальних).
Після виконання цього алгоритму отримаємо матрицю, що представляє собою зведену таблицю, яку нам було необхідно побудувати.
Тепер пара слів про фільтрацію при побудові зрізу. Найпростіше її здійснити якраз на етапі побудови матриці, так як на цьому етапі є доступ до всіх необхідним полям, і, крім того, здійснюється агрегація значень. При цьому, під час отримання записи з кешу, перевіряється її відповідність умовам фільтрації, і в разі його недотримання запис відкидається. p align="justify"> Так як описана вище структура повністю описує зведену таблицю, то завдання її візуалізації буде тривіальна. При цьому можна використовувати стандартні компоненти таблиці, які є практично у всіх засобах програмування під Windows. p> Першим продуктом, який виконує OLAP-запити, був Express (компанія IRI). Однак, сам термін OLAP був запропонований Едгаром...