Объединение секций в службах Analysis Services (SSAS — многомерные данные)
Можно объединить секции в существующей базе данных служб Analysis Services для консолидации данных фактов из нескольких секций одной группы мер.
Обновление источника секции после слияния секций
Особые замечания для секций, сегментированных по таблице фактов или именованному запросу
Как объединять секции с помощью среды SSMS
Как объединить секции с помощью XMLA
Распространенные сценарии
Самая обычная конфигурация сценария использует разделение данных во временном измерении. Гранулярность времени, связанная с каждой секцией, зависит от бизнес-требований конкретного проекта. Например, сегментация может выполняться по годам, последний год — разделяться по месяцам с выделением отдельной секции для активного месяца. Секция активного месяца регулярно принимает новые данные.
После завершения текущего месяца выполняется слияние секции с месяцами в секции прошедших в этом году месяцев и т. д. В конце года формируется секция для всего года.
Как показывает данный сценарий, слияние секций может стать обычной задачей, выполняемой на регулярной основе, при наличии прогрессивного подхода по организации и консолидации исторических данных.
Требования
Можно выполнять слияние секций только в том случае, если они удовлетворяют всем условиям, перечисленным ниже:
Они имеют одинаковую группу мер.
Обладают одной и той же структурой.
Они должны находиться в обработанном состоянии.
Обладают одними и теми же режимами хранения.
Содержат одинаковые статистические схемы.
Они совместно используют уровень совместимости одного и того же хранилища строк (применяется только к секционированным группам мер числа различных объектов).
Если целевая секция пуста (есть агрегатная схема, но нет агрегатов), операция слияния пропустит агрегаты для исходных секций. Для построения агрегатов нужно выполнить для секции команду Process Index, Process Full или Process Default.
Удаленные секции можно объединять только с другими удаленными секциями, определенными с тем же удаленным экземпляром служб Analysis Services.
Примечание
Если используется сочетание локальных и удаленных секций, альтернативой будет создание новых секций, в которых содержатся объединенные данные и удалены более неиспользуемые секции.
Чтобы создать секцию, которая может использоваться в последующем слиянии, во время создания секции в мастере секционирования можно скопировать статистическую схему из другой секции куба. Это гарантирует, что у всех таких секций будет одна и та же статистическая схема. Во время слияния статистические схемы исходной секции объединяются со статистическими схемами целевой секции.
Обновление источника секции после слияния секций
Секции сегментируются по запросу, например по предложению WHERE SQL-запроса, используемого для обработки данных, или по таблице или именованному запросу, которые предоставляют данные для секции. Свойство Source
секции указывает, привязана секция к запросу или таблице.
При слиянии секций их содержимое объединяется, но свойство Source
не обновляется. Это означает, что при повторной обработке секции, сохраняющей исходный Source
, будут получены неверные данные. Секция ошибочно агрегирует данные на уровне родительского объекта. Следующий пример демонстрирует эту ситуацию.
Проблема
Предположим, что имеется куб, содержащий сведения о трех безалкогольных напитках. Он имеет три секции, использующие одну и ту же таблицу фактов. Эти секции разделены по продуктам. Секция 1 содержит данные о [ColaFull], секция 2 содержит данные о [ColaDecaf], а секция 3 содержит данные о [ColaDiet]. При слиянии секции 3 в секцию 2 данные в получающейся в результате секции (секции 2) правильны, а данные куба являются точными. Однако при обработке содержимое секции 2 может определяться «родителем» элементов на уровне продуктов. Этот "родительский" элемент [SoftDrinks] также включает [ColaFull], продукт в секции 1. При обработке секции 2 будет загружена секция с данными для всех безалкогольных напитков, включая [ColaFull]. После этого куб будет содержать дублирующиеся данные для [ColaFull] и возвращать неправильные данные конечным пользователям.
Решение
Нужно обновить свойство Source
, изменив предложение WHERE или именованный запрос, или же вручную объединить данные из нижележащих таблиц фактов, чтобы последующая обработка была правильной.
В этом примере после слияния секции 3 в секцию 2 можно ввести фильтр, например ("Product" = 'ColaDecaf' OR "Product" = 'ColaDiet'), в получающуюся в результате секцию 2, чтобы указать, что из таблицы фактов будут извлекаться только данные о [ColaDecaf] и [ColaDiet], а данные, относящиеся к [ColaFull], будут исключены. Или можно указать фильтры для секции 2 и секции 3 при их создании, и эти фильтры будут скомбинированы во время процесса слияния. В любом случае, после обработки секции куб не будет содержать дублирующихся данных.
Заключение
После слияния секций всегда проверяйте фильтр в Source
для определения его правильности по отношению к объединенным данным. Если вы начали с секцией, включавшей исторические данные для кварталов Q1, Q2 и Q3, и теперь они объединяются c Q4, нужно исправить фильтр, чтобы он включал Q4. В противном случае последующая обработка секции даст ошибочные результаты. Они не будут правильными для Q4.
Особые замечания для секций, сегментированных по таблице фактов или именованному запросу
В дополнении к запросам секции также могут быть сегментированы по таблице или именованному запросу. Если исходная секция и целевая секция используют одну и ту же таблицу фактов в источнике данных или представлении источника данных, то после слияния секций свойство Source
будет действительным. Оно определяет данные таблицы фактов, подходящие для результирующей секции. Поскольку факты, необходимые для получающейся в результате секции, присутствуют в таблице фактов, изменения в свойстве Source
не требуются.
Секции, использующие данные из нескольких таблиц фактов или именованных запросов, требуют дополнительной работы. Необходимо вручную осуществить слияние фактов из таблицы фактов исходной секции в таблицу фактов целевой секции.
Можно также изменить источник для секции, получившейся в результате слияния, на именованный запрос, возвращающий содержимое двух отдельных таблиц фактов. Если этот этап не выполнен вручную, то таблица фактов не содержит полные данные.
По той же причине требуется обновление секций, получающих сегментированные данные из именованных запросов. Объединенная секция должна иметь именованный запрос, который возвращает совместный результирующий набор, полученный ранее из разных именованных запросов.
Замечания о хранилищах для секций: MOLAP
При слиянии секций многомерного OLAP (MOLAP) также осуществляется слияние фактов, хранимых в многомерных структурах секций. В результате получается внутренне полная и последовательная секция. Однако факты, хранимые в секциях MOLAP, представляют собой копии фактов из таблицы фактов. При последующей обработке секции факты в многомерной структуре удаляются (только в случае полной обработки и обновления) и данные копируются из таблицы фактов, как указано в источнике данных и фильтре для секции. Если исходная секция использует не ту таблицу фактов, которую использует целевая секция, то необходимо вручную осуществить слияние таблицы фактов исходной секции с таблицей фактов целевой секции для гарантии того, что полный набор данных доступен при обработке получившейся в результате секции. Это также имеет место, когда две секции были основаны на различных именованных запросах.
Важно!
Получившаяся в результате секция MOLAP с неполной таблицей фактов содержит таблицу фактов, получившуюся в результате внутреннего слияния, и функционирует корректно до ее обработки.
Замечания о хранилищах для секций: секции HOLAP и ROLAP
При слиянии секций гибридного OLAP (HOLAP) или реляционного OLAP (ROLAP), имеющих разные таблицы фактов, слияние этих таблиц фактов не осуществляется автоматически. Если слияние этих таблиц фактов не осуществлено вручную, то для получившейся в результате секции доступна только таблица фактов, связанная с целевой секцией. Факты, связанные с исходной секцией, недоступны для углубленной детализации в получившейся в результате секции, и при обработке этой секции статистические вычисления не суммируют данные из недоступной таблицы.
Важно!
Получившаяся в результате слияния секция HOLAP или ROLAP с неполной таблицей фактов содержит правильные статистические вычисления, но неполные факты. Запросы, относящиеся к отсутствующим фактам, возвращают неправильные данные. При обработке секции статистические схемы вычисляются только на основе доступных фактов.
Отсутствие недоступных фактов может не быть замечено, если только пользователь не попытается осуществить углубленную детализацию факта в недоступной таблице или не выполнит запрос, для которого необходим факт из недоступной таблицы. Поскольку агрегаты комбинируются во время процесса слияния, запросы, результаты которых основаны только на статистических вычислениях, возвращают правильные данные, в то время как другие запросы могут возвращать неправильные данные. Даже после обработки получившейся в результате секции отсутствие данных из недоступной таблицы фактов может не быть замечено, особенно если они представляют собой лишь малую часть скомбинированных данных.
Слияние таблиц фактов может быть осуществлено до или после слияния секций. Однако агрегаты не будут точно представлять базовые факты до завершения выполнения обеих операций. Рекомендуется осуществлять слияние секций HOLAP или ROLAP, обращающихся к различным таблицам фактов, когда пользователи не подключены к кубу, содержащему эти секции.
Как объединять секции с помощью среды SSMS
Важно!
Перед слиянием секций сначала копируйте сведения о фильтре данных (например, предложение WHERE для фильтров на основе SQL-запросов). После завершения слияния нужно обновить свойство Partition Source секции, которая содержит накопленные фактические данные.
В обозревателе объектов разверните узел Группы мер куба, содержащего секции, слияние которых необходимо осуществить, разверните узел Секциии щелкните правой кнопкой мыши секцию, которая является целью операции слияния. Например, если перемещаются квартальные фактические данные в секцию, которая хранит данные за год, выберите секцию, которая содержит годовые фактические данные.
Щелкните Объединить секции, чтобы открыть диалоговое окно Имя> секции слиянием<.
В разделе Исходные секцииустановите флажок рядом с каждой исходной секцией, для которой необходимо слияние осуществить с целевой секцией, затем нажмите кнопку ОК.
Примечание
Исходные секции удаляются сразу же после слияния источника в целевой секции. Обновите папку с секциями, чтобы видеть обновленное содержимое.
Щелкните правой кнопкой мыши секцию с объединенными данными и выберите Свойства.
Source
Откройте свойство и измените предложение WHERE, чтобы оно было включено только что объединенные данные секции. Помните, чтоSource
свойство не обновляется автоматически. При повторной обработке без предварительногоSource
обновления , возможно, вы не получите все ожидаемые данные.
Как объединять секции с помощью XMLA
Дополнительные сведения см. в статье Слияние секций (XMLA).
См. также:
Обработка объектов служб Analysis Services
Секции (службы Analysis Services — многомерные данные)
Создание локальной секции и управление ей (Analysis Services)
Создание удаленной секции и управление ей (Analysis Services)
Настройка обратной записи секции
Секции с поддержкой записи
Настройка хранилища строк для измерений и секций