SSAS и агрегаты

добавлено: 02 мар 11
понравилось:0
просмотров: 3477
комментов: 0

теги:

Автор: Критик

Как известно, агрегаты в SSAS делятся на гибкие и жесткие. Соответственно гибкие строятся на гибких связях, жесткие - на жестких.

А если более понятно и на примерах:

Рассмотрим измерение "Календарь", которое имеет иерархию "Год->Месяц->День".
Его элемент "21 января" (уровень "День") связан с элементом более высокого уровня "январь". И связан жестко, так как не может переместится по воле судьбы или пользователей в "февраль" или "март".

При гибких же связях допускается возможность такого перемещения. Например, любой знает, что товар ценовой группы "100-200 рублей" очень легко может переместится в ценовую группу "200-300 рублей". Более того, мы сами в этом можем убедится, посетив любой магазин!

SSAS же обрабатывает агрегаты, построенные на таких связях, по разному: при процессинге измерений (Process Update) жесткие агрегаты не затрагиваются, а вот гибкие удаляются.

Самое простое решение - сделать все связи жесткими - не подходит, так как вызовет ошибку при обработке измерения (если все же элемент поменял свое месторасположение в иерархии). И далее потребуется полная обработка всего проблемного измерения (Full Process), а затем и всех кубов, связанных с этим измерением. На больших системах это чревато недоступность данных в течении достаточно длительного времени, что недопустимо. Поэтому, как правило, жесткие связи между элементами назначают только для измерения "Календарь".

Что же делать с гибкими агрегатами, если они удаляются в каждое окно расчета?

Существует несколько вариантов решения проблемы:

1) В дополнении к Process Full актуальных секций куба, можно делать Process Index старых секций.
Например, так:
секция 2010.12->(проверка: еще есть время для обработки?)->
секция 2012.11->(проверка: еще есть время для обработки?)->
...
секция 2001.01
Для актуальных секций этого делать не нужно, так как Process Full = Process Data + Process Index

2) Или при процессинге измерений можно ставить флаг "Process Affected Object", это вызовет пересчет поменявшихся агрегатов всех секций. Однако это рекомендуется делать только в том случае, если измерения обрабатываются параллельно. Если же они обрабатываются последовательно, то можем получить такую последовательность действий:
обработка измерения 1 -> пересчет агрегата A-> обработка измерения 2 ->пересчет агрегата А (еще раз!)
Это достаточно существенно затянет шаг обработки измерений.
Кроме того, с каждой новой секцией время обработки измерений будет всегда расти, а не оставаться постоянной величиной. Этот путь требует минимальных трудозатрат, но с точки зрения стабильности временени обработки кубов это малопривлекательно.

Для секций со старыми данными можно создать свой набор агрегатов. Принято включать в этот набор несколько меньше агрегатов, чем в актуальные секции, ведь к достаточно старым данным и их агрегатным значениям обращаются не часто. Для очень больших кубов (при наличии малого окна обработки) этот набор может содержать только жесткие агрегаты.


Все)

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии