Итак, продолжаем создавать куб.
Напомню, что в предыдущей статье, мы создавали Data Warehouse для хранения голосов хабра-пользователей за хабра-топики. Для тех, кто хочет начать сразу создавать куб, я выложил скрипт, который создает и наполняет хранилище (на моей машине скрипт занял 10 минут и нагенерил 1866268 хабра-голосов).
Для того, чтобы создать OLAP куб, нам понадобится:
- SQL Server, на котором хранится наш HabraDW (подойдет любой);
- Microsoft SQL Server, с запущенными Analysis Services (2005/2008);
- Business Intelligence Studio, которая входит в пакет клиентских приложений для Microsoft SQL Server-а, и интегрируется с Visual Studio, если она у вас установлена (2005/2008);
Начнем-с.
Запускаем Business Intelligence Studio, меню File->New->Project, выбираем Analysis Services Project в закладке Business Intelligence Projects:
Называем проект (я назвал HabraCube).
В созданном проекте, в Solution Explorer видим:
Что-то подсказывает, что надо просто «заполнять» папочки сверху вниз – и таки да, правый клик на папке Data Sources –> New Data Sources.
В окне Data Source Wizard создаем connection к базе данных HabraDW, как видим – хранилищем может выступать все что угодно, лишь бы был драйвер, через который можно достать данные.
Переходим на следующий уровень – правый клик на папочке Data Source Views –> New Data Source View.
В окне Data Source View Wizard выбираем нами созданный connection к HabraDW (по умолчанию он у вас будет называться Habra DW), и на следующей странице видим таблички нашего хранилища.
Замечу, удобство кнопочки Add Related Tables — в случае, если ваше хранилище содержит очень много таблиц, иногда сложно выбрать именно те, которые будут нужны для куба. Кнопка Add Related Tables добавляет все таблицы, от которых зависит выбранная в данный момент, то есть, выбрав, например, таблицу фактов, можно за один клик перенести таблицы измерений, которые нужны для данных фактов.
Итак, завершаем визард, видим знакомую схему таблиц и переходим на следующий уровень.
Правый клик на папочке Cube -> New Cube (знаю-знаю, пока что все очень просто, но никто же и не говорил, что будет сложно ;-)).
В окне Cube Wizard оставляем, выбранный по умолчанию, режим создания куба из Data Source-а, и Auto build, Create attributes and hierarchies. Далее, выбираем наш Habra DW data source view, созданный на предыдущем шаге, и после коротенького анализа студией метаданных хранилища, переходим к идентификации фактов и измерений.
Как видим, за нас уже выбрали таблицу FactHabravote как таблицу фактов и все Dim* таблицы как таблицы измерений. Все что нам нужно указать самому – это измерение времени вверху. Помните, я как-то говорил, что времени в OLAP уделено особое значение, вот тут мы его и должны аккуратно определить. Заходим на следующую страницу визарда и маппим колонки из таблицы DimTime с логическими определениями времени (год, месяц, день, день недели и т.п.).
Мой маппинг следующий:
- Year -> CalendarYear
- Month -> MonthName
- Date -> FullDate
- Day of Week -> DayNameOfWeek
- Day of Month -> DayNumberOfMonth
Следующая страница показывает нам те числовые данные (Measures), которые мы сможем анализировать в кубе – в нашем случае, оставляем выбранным меру Vote – это фактическое значение голоса, и Fact Habravote Count – это количество записей в таблице (эту меру можно сразу переименовать, например, в Votes Count).
Далее, переходим на страницу Review New Dimensions, убеждаемся, что измерения выглядят так, как мы хотим, и удивляемся, что в измерении DimTime студия сама определила иерархию Calendar Year — Month Name — Full Date, состоящую из года, месяцев и дней.
Замечу, что факт определения иерархии никак не связан с тем, что перед этим мы указали таблицу DimTime как измерение времени, то есть если бы у нас в данных, например, в таблице DimPost, была логическая иерархия, скажем Category->Blog->Post Title, то студия ее бы тоже определила и построила с большой вероятностью, проанализировав все или часть самих данных.
Ну что же, на последнем странице, даем красивое название нашему кубу (например, HabraCube) и нажимаем кнопку Finish.
Куб готов, и наш Solution Explorer теперь принимает следующий вид:
Не вдаваясь пока в подробности того, что у нас в итоге сгенерилось (об этом в следующей статье), давайте запаблишим наш куб на сервер и подготовим его к работе.
Правый клик на проекте HabraCube (да-да, тут почти все делается правым кликом) – выбираем Properties и на закладке Deployment, указываем Server, на котором запущены Analysis Services и имя базы данных куба (по умолчанию HabraCube – нам подходит).
Итак, еще один правый клик на проекте HabraCube, выбираем Process..., и через несколько секунд – кнопочку Run…
Если вы все сделали правильно, на сервере запущены сервисы и у вашего Windows — аккаунта есть туда доступ и права на создание многомерной базы данных, то вы получите радостное окошко и надпись Process succeeded.
Мои поздравления!
А что теперь? Ну… я бы оставил сам анализ куба для следующих постов, но кому очень нетерпится – после закрытия окон Process, перейдите на сааамую дальнюю закладку Browser в открытом окне редактирования куба (если вы ничего не трогали, то оно как раз должно быть открыто перед вами):
Ну а дальше – полностью на вашу фантазию. Вот что, например, получилось у меня:
Заключение.
И все же — насколько эффективно пользоваться визардами? Скажу так — для средней продакшин системы, после визардов еще достаточно много нужно «подпилить». Сами визарды созданы больше в презентационных целях, и очень помогают, если вы до этого о кубах знали только из курса школьной геометрии.
Но, как и в любой другой сфере, только «вручную» можно в полной мере передать все тонкости и построить наиболее эффективную систему, поэтому, пользуясь визардом нужно обязательно знать, что именно он вам сгенерить, и где нужно будет подправить, то, что он сгенерит.
Анонсы следующих серий:
- Совсем немного XMLA (ой!), а также, разбираем и правим то, что нам нагенерили визарды;
- Анализируем куб!
- MDX
(продолжение следует...)