Delphi та розширення ADO - все про IT та програмування
Written on 16 Вересня 2006 . Posted in Delphi
ЗМІСТ
Використання ADO MultiDimensional
Подробиці про OLAP можна знайти на сайті www.olap.ru, який супроводжує компанія «Інтерфейс», постачальник багатьох OLAP-продуктів на українському ринку.
У нашій статті ми можемо собі дозволити лише коротке введення в OLAP та створення сховищ даних, бо це знадобиться для розуміння того, що є об'єктами ADO MD. Більш детально тему OLAP буде розкрито в одній із статей циклу «Вступ до СУБД».
OLAP та створення сховищ даних: коротке введення
Розглянемо, із чого зазвичай складається багатовимірне сховище даних. Уявімо торгову компанію, яка зберігає всі відомості про торгові операції в будь-якій базі даних, що містить серед інших уявлення Invoices з детальними відомостями про замовлення клієнтів. Припустимо, що звернення до цього подання приводить до появи набору даних, показаного в табл. 3.
| 01.01.99 | Vegetables | Canned Vegetables | Canned Tomatos | Німеччина | Berlin | Nicolas Wilson | $1280 |
| 01.01.99 | Vegetables | Fresh Vegetables | Dried Mushrooms | UK | London | Daniel Adams | $514 |
| 01.02.99 | Dairy | Cheese | Cheddar Cheese | Німеччина | Frankfurt | Nicolas Wilson | $723 |
| 01.02.99 | Dairy | Cheese | Gorilla Cheese Spread | Austria | Vienna | Nicolas Wilson | $330 |
| 01.03.99 | Vegetables | Canned Vegetables | Canned Tomatos | UK | London | Daniel Adams | $439 |
| . . . | . . . | . . . | . . . | . . . | . . . | . . . | . . . |
Допустимо, нам потрібно дізнатися сумарну вартість усіх замовлень, зроблених клієнтами з Німеччини. Очевидно, що для отримання такого сумарного значення (summary) потрібно виконати наступний запит:
У цьому запиті можна замінити 'Germany' на 'Austria', або 'UK', або назву іншої країни. В результаті ми отримаємо одновимірний масив значень — по одному числу кожної країни, як показано в табл. 4:
| $2003 | $330 | $953 | $5321 |
Тепер трохи ускладнимо завдання. Наприклад, запитаємо, якою є сумарна вартість замовлень овочів, зроблених клієнтами з Німеччини:
| Німеччина | $1280 | $723 | $239 | … |
| UK | $514 | $0 | $732 | … |
| Austria | $0 | $330 | $0 | … |
| … | … | … | … | … |
Подібна таблиця найчастіше називається перехресною таблицею, крос-таблицею, і навіть зведеною таблицею (Cross table, Pivot table). Першим виміром (dimension) у ній є вимір Country, другим - ProductCategory.
Знову модифікуємо наш запит. Припустимо, тепер нам потрібно дізнатися, якою є сумарна вартість замовлень овочів, зроблених клієнтами з Німеччини та оброблених співробітником на ім'я NicolasВілсон.
Слід зазначити, що наборів таких сумарних значень може бути кілька (зокрема це можуть бути суми платежів, середня вартість, кількість замовлень тощо). Подібні сумарні значення в українській термінології називаються агрегатними даними, а в англомовній найбільш застосовні терміни summaries та measures.
У нашій статті для ілюстрації застосування об'єктів ADO MultiDimensional як OLAP-сервера ми будемо використовувати Microsoft SQL Server 7.0 OLAP Extensions (або Microsoft SQL Server 2000 Analysis Services). На даний момент OLE DB Provider for OLAP Services, що входить до складу Microsoft SQL Server OLAP Extensions (Microsoft SQL Server 2000 Analysis Services) та до складу Microsoft Office, є єдиним провайдером OLE DB, що дозволяє звертатися до багатовимірних даних. З його допомогою можна звертатися до даних, що зберігаються у багатовимірних базах даних Microsoft SQL Server 7.0/2000 або локальних файлах *.cub, які можна створити за допомогою Microsoft Excel 2000 . Однак ми вважаємо, що найближчим часом слід очікувати на випуск інших OLE DB-провайдерів для інших OLAP-серверів.
Для ілюстрації роботи ADO MD ми використовуємо багатовимірну базу даних FoodMart, що входить до комплекту Microsoft SQL Server 7.0 OLAP Extensions. Однак за необхідності можна використовувати будь-який локальний файл *.cub, створений за допомогою Microsoft Excel 2000, - у цьому випадку на комп'ютері, де будуть створюватися приклади, має бути встановлений Microsoft Excel 2000.
Почнемо вивчення ADO MD з об'єктної моделі, доступної у програмах Delphi.