ні стовпців - тобто як визначити необхідну рядок. Для цього можна використовувати кілька підходів. Найпростішим було б уявити кожен стовпець у вигляді вектора, але так як він буде сильно розрідженим, то пам'ять буде витрачатися вкрай неефективно. Щоб уникнути цього, застосуємо структури даних, які забезпечать більшу ефективність подання розріджених одновимірних масивів (векторів). Найпростішою з них буде звичайний список, одно-або двусвязний, однак він неекономічний з точки зору доступу до елементів. Тому будемо використовувати дерево, яке забезпечить більш швидкий доступ до елементів. Наприклад, можна використовувати точно таке ж дерево, як і для стовпців, але тоді довелося б для кожного стовпця заводити своє власне дерево, що призведе до значних накладних витрат пам'яті і часу обробки. Поступимо трохи хитріше - заведемо одне дерево для зберігання всіх використовуваних в рядках комбінацій вимірювань, яке буде ідентично вищеописаному, але його елементами будуть не покажчики на рядки (яких немає як таких), а їх індекси, причому самі значення індексів нас не цікавлять і використовуються тільки як унікальні ключі. Потім ці ключі будемо використовувати для пошуку потрібного елемента всередині стовпця. Самі ж стовпці найпростіше представити у вигляді звичайного двійкового дерева. Графічно отриману структуру можна представити таким чином:
Для визначення відповідних номерів рядків можна використовувати таку ж процедуру, що й описана вище процедура визначення стовпців зведеної таблиці. При цьому номери рядків є унікальними в межах однієї зведеної таблиці та ідентифікують елементи у векторах, які є стовпцями зведеної таблиці. Найбільш простим варіантом генерації цих номерів буде ведення лічильника і інкремент його на одиницю при додаванні нового елемента в дерево заголовків рядків. Самі ці вектора стовпців простіше всього зберігати у вигляді двійкових дерев, де в якості ключа використовується значення номера рядка. Крім того, можливе також і використання хеш-таблиць. Так як процедури роботи з цими деревами детально розглянуті в інших джерелах, то зупинятися на цьому не будемо і розглянемо загальну схему додавання елемента в стовпець.
В узагальненому вигляді послідовність дій для додавання елемента в матрицю можна описати таким чином:
1. Визначити номери рядків, в які додаються елементи
2. Визначити набір стовпців, у які додаються елементи
. Для всіх стовпців знайти елементи з потрібними номерами рядків і додати до них поточний елемент (додавання включає в себе під'єднання потрібної кількості значень фактів і обчислення агрегованих значень, які можна визначити інкрементальних).
Після виконання цього алгоритму отримаємо матрицю, що представляє собою зведену таблицю, яку нам було необхідно побудувати.
Тепер пара слів про фільтрацію при побудові зрізу. Найпростіше її здійснити якраз на етапі побудови матриці, так як на цьому етапі є доступ до всіх необхідним полях, і, крім того, здійснюється агрегація значень. При цьому, під час отримання записи з кешу, перевіряється її відповідність умовам фільтрації, і в разі його недотримання запис відкидається.
Так як описана вище структура повністю описує зведену таблицю, то завдання її візуалізації буде тривіальна. При цьому можна використовувати стандартні компоненти таблиці, які є пр...