Уважаемые слушатели! Обращаем ваше внимание, что 01.05.2024 и 09.05.2024 у нас выходные дни. Вы можете оставить сообщение в чате, мы обязательно ответим!
Уважаемые слушатели! Теперь для вас работает номер технической поддержки 8 (800) 444-28-35 с 9:00 до 21:00

Частным лицам +7 (495) 232-32-16

Слушателям
от организации
+7 (495) 780-48-44

+7 (495) 780-48-49

Отключайте неработающие связи между размерностями и мерами

Самородов Федор Анатольевич: Отключайте неработающие связи между размерностями и мерами

СФА

Работая с многомерными базами данных, вы наверняка наблюдали такой эффект, когда мера не делится по некоторым измерениям.

Вот я пытаюсь разложить показатели розничных продаж по реселлерам:

Отключайте неработающие связи между размерностями и мерами

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

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

Отключайте неработающие связи между размерностями и мерами

В этом нет ничего странного, потому что я пытаюсь проделать некорректную операцию. Если заглянуть в структуру куба, то мы увидим, что размерность реселлеров вообще никак не связана с розничными продажами. Срезы по реселлерам и их атрибутам имеют смысл при анализе оптовых продаж. А прикладывать их к рознице нет никакого смысла. Поэтому сервер и не может разложить розничные меры по значениям чисто оптового атрибута Reseller.[Business Type].

Отключайте неработающие связи между размерностями и мерами

В таких ситуациях сервер принудительно схлопывает не связанные с мерами иерархии до вамого верхнего уровня. Из-за этого в результате запроса итоговое значение просто дублируется.

Хорошо, что мы помним, как устроены наши кубы и не будем пытаться в запросах резать меры по несуществующим связям. Однако, отсутствие сообщения об ошибке или какого-то предупреждения означает, что пользователи время от времени будут пытаться строить некорректные отчёты и тратить время на поиск ошибок.

В конструкторе куба есть возможность устранить такую возможность. Это флаг IgnoreUnrelatedDimensions в настройках группы мер:

Отключайте неработающие связи между размерностями и мерами

По умолчанию он разрешает пользователю связывать в MDX-запросе что угодно с чем угодно.

Полезно сбросить этот флаг для устранения возможности случайно или в результате ошибки получить некорректные данные в отчётах:

Отключайте неработающие связи между размерностями и мерами

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

Отключайте неработающие связи между размерностями и мерами

Ещё удобнее стало в Экселе. Я пытаюсь некорректно разложить меры по строкам, но даже сами значения атрибутов в сводной таблице не показываются:

Отключайте неработающие связи между размерностями и мерами

Однако, если вдруг потребуется вернуться к поведению по умолчанию, взводить флаг IgnoreUnrelatedDimensions и пересчитывать куб не потребуется. Имеется функцияValidMeasure, которая имитирует эту настройку и схлопывает несвязанные меры по верхнему уровню иерархии:

Отключайте неработающие связи между размерностями и мерами

Подробнее об этом Вы сможете узнать на курсе: М50578A: Язык запросов MDX для аналитических служб SQL Server (OLAP)

Ближайшие группы

envelope

Спасибо! Вам на e-mail отправлено письмо со ссылкой для подтверждения

Если письмо не пришло, поищите его в папке со спамом или повторите подписку

email-checked.png

Вы подписались на рассылку

Как будет оформлено обучение?

Оплачивать будет:

Спасибо за обращение! Ваш менеджер свяжется с Вами в течение нескольких минут.