Связь «Многие Ко Многим», Olap И Службы Анализа Ms Sql Server.



Связь «многие ко многим» и службы анализа MS SQL Server Этот пост я хочу посвятить такой, как оказалось, простой проблеме, как обработка связей «многие ко многим» с OLAP-кубом с помощью MS SQL Server Analysis Services. Сначала немного о том, как я к этому подошел.

Начальство сказало, что было бы неплохо развернуть какую-то аналитику по существующей базе.

После небольшого поиска в Google выяснилось, что технология OLAP подойдет идеально.

А поскольку на сервере компании развернут MS SQL Server, то компонент Analysis Services там подходит еще больше.

Счастливо потирая руки, я схватил учебник Microsoft, прилагаемый к SQL Server. И уже через два дня я был уверен, что со всем справлюсь.

Но не тут-то было.

В существующей базе данных большая часть связей между таблицами оказалась связью «многие-ко-многим», что поначалу не предвещало никаких осложнений.

Но на практике оказывается, что без дополнительных весьма осмысленных взмахов руками не обойтись, потому что в противном случае куб просто выдает неверную информацию.

Найти информацию по этой теме в Рунете оказалось непростой задачей.

Либо это все воспринимают как должное, либо лыжи не работают. Тем не менее, я нашел очень классное большое руководство на английском языке по этой теме.

Собственно, тем, кто прекрасно понимает английский или хочет очень хорошо разобраться в теме, предлагается не читать дальше, а перейти по ссылке: http://www.sqlbi.com/articles/many2many/ Те, у кого, как и я ранее, нет времени читать учебники английского языка, читайте дальше.

Пост не представляет собой перевод данного руководства: скорее некое обобщение его первых примеров + некоторые основы из упомянутого учебника Microsoft. На самом деле это проблема.

Если читатель прочитал этот пост: http://habrahabr.ru/post/67272/ , то он знает, что стандартными схемами для Олапа являются схемы «Звезда» и «Снежинка».

Что, если мы окружены связями «многие ко многим»? Самый простой вариант: уйти от связей «многие ко многим» с помощью представлений — это положительно скажется на скорости обработки запросов.

Не можешь уйти? Давайте разберемся.

Постановка задачи.

Интернет-магазин.

MS SQL Server, он содержит базу данных с пресловутыми M2M-соединениями, которая выглядит так: К ней привязаны таблица идентификаторов покупок, таблица категорий (еда, спорт, прочее) и таблица аккаунтов.

Усложним задачу: пусть теперь одним аккаунтом могут пользоваться сразу несколько человек (например, муж и жена совершают покупку на дом), соответственно, через М2М подключена таблица персон.

А чтобы совсем не сладко: пусть таблица категорий персон будет привязана к таблице персон через М2М.

И нас интересует: какие категории людей какие покупки совершают чаще и когда они это делают.

Связь «многие ко многим», OLAP и службы анализа MS SQL Server.

Пример надуманный, но проблема все же видна: как связать будущее измерение с таблицей фактов через целых два M2M-соединения? Все просто: мы сообщим SSAS, где искать.

Выполнив предварительные действия по созданию измерений (Виды, Даты, Категории, Персоны, Счета) (см.

http://habrahabr.ru/post/67272/ ), мы пытаемся создать куб, используя показатель «Продажи» (количество строк).

По умолчанию Visual Studio предложит нам только три меры (Типы, Счета, Даты) — потому что только они напрямую связаны с нашей мерой.

Создав куб, складываем руками оставшиеся две меры.

Плюс создадим внутри куба еще две вспомогательные меры, которые будут отвечать за обработку M2M-соединения: Bridge Accounts Persons и Bridge Persons Category (обе — количество строк, в которых таблицы чисты).

Таким образом, у нас будет следующая картина:

Связь «многие ко многим», OLAP и службы анализа MS SQL Server.



Связь «многие ко многим», OLAP и службы анализа MS SQL Server.

Мы видим множество серых прямоугольников и тот факт, что Visual Studio уже обработала одно отношение M2M: между вспомогательной мерой «Категории мостовых лиц» и измерением «Счета».

И это хорошо, но недостаточно.

Если мы прямо сейчас попросим наш куб что-нибудь выплюнуть, мы не получим ничего хорошего.

Нет, измерения «Даты» и «Счета» будут работать правильно, но, к сожалению, с «Лицами» и «Категориями».

Чтобы исправить это недоразумение, мы сообщим SSAS, где искать информацию для обработки наших запросов.

Для этого заполните эти серые поля на вкладке «Использование измерений» следующим образом: нажмите на серые поля -> эллипсы -> тип связи, выберите «Многие ко многим» -> выберите промежуточную группу мер, как написано на картинке:

Связь «многие ко многим», OLAP и службы анализа MS SQL Server.

Вуаля! Все работает. Вы можете увидеть это на следующей картинке:

Связь «многие ко многим», OLAP и службы анализа MS SQL Server.

В чем волшебство? Мы рассказали SSAS, где и как искать информацию о взаимоотношениях.

Обратите внимание: невозможно, например, правильно заполнить пересечение измерения «Категории» и показателя «Продажи» до тех пор, пока вы правильно не заполните измерение «Категории» и показатель «Лица промежуточного счета».

В опциях отображаются только категории Bridge Persons, потому что.

Visual Studio просто не знает другого способа.

Но вспомогательные меры – это тоже меры.

И пути для них должны быть указаны так же, как и для обычных (целевых) мер.

По мере заполнения таблицы Visual Studio получает больше знаний и предлагает больше возможностей.

Теперь сформулируем мнемоническое правило заполнения таблицы связей: «Между целевой мерой и целевым измерением выберите таблицу мер, наиболее близкую к целевой мере».

Таким образом, получилось, что для измерений «Тип» и «Дата» во втором столбце будет полноценный интересный показатель «Продажи», а в третьем — вспомогательный показатель «Bridge Accounts Persons».

То же самое справедливо и для измерения «Категории».

Должен ли я всегда полностью заполнять таблицу ссылок? Нет. Не нужно обрабатывать неинтересную информацию.

M2M-подключения отрицательно влияют на производительность куба, поэтому по возможности лучше от них избавиться.

Вот и все для этого.

Надеюсь, у меня был полезный пост. Как минимум могу сказать, что в свое время я искал именно что-то подобное, но так и не нашел.

Могу выслать вам исходный код базы данных и куба из примера.

Теги: #olap #olap Cubes #ms sql-сервер #ssas #many-to-many #sql #Microsoft SQL Server
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.