DWH-ETL-OLAP
July 23, 2019

SSAS Tabular: Processing

https://www.wiseowl.co.uk/blog/s2484/processing-theory.htm

1й подход - Process Full - процессинг происходит в отдельной транзакции, не затрагивающей исходную модель. Т.е. пользователи могут пользоваться исходной моделью до конца процессинга, загрузка и процессинг происходит в "параллеkьную модель", а в момент завершения происходит подмена старой модели на новую.

Но в этом случае требуется чуть более двойного обьема оперативной памяти на модель.

Второй подход:

  • шаг 1 - Process Data на каждой таблице
  • шаг 2 - Process Recalc на БД

Выигрываем по оперативной памяти, но у пользователей скорее всего не будет доступа к модели между шагом 1 и 2.

Оптимизация процессинга

  1. Партиционирование и процессинг только партиций с актуальными данными
  2. Исключение столбцов с уникальными значениями и высокой степенью уникальности
  3. Предварительная сортировка данных по наименее уникальному столбцу
  4. Избегать вычисляемых столбцов, ибо они повышают степень уникальности значений относительно исходных столбцов
  5. Избегать Datetime столбцов
  6. Если идшник фактов нужен - разделять его на группы разрядов: тысячи и остальное

Более фундаментальный труд: Whitepaper on modeling for AS tabular scalability

Измерения:

  1. Минимизиуруем количество столбцов и строк. Строки в измерениях оставляем только те, по которым есть факты.
  2. Снижаем мощность столбцов всеми силами
  3. Указать тип данных у колонок с минимально возможной точностью для числовых полей
  4. SK
    1. Интовые sk
    2. Сортировка по sk
    3. Установка свойств Скрыто=Да, Уникальные=Да, ДопускающийNuill=Нет, Уникальный=Да
    4. Для всех числовых полей устанавливается свойство EncodingHints = Значение(VALUE). Особенно для sk. (Свойство доступно начиная с 2017й версии)
    5. Устанавливаем свойство IsAvailableInMdx = Да только для тех полей, по которым будем проводить анализ, вытаскивать в сводную и тд. Т.е. в измерениях это свойство необходимо отключить для sk.

Факты:

  1. интовые fk к измерениям
  2. Снижаем мощность
  3. Вычисляемые столбцы -
    1. не создаются, если будет соответствующая мера
    2. если все таки нужен выч столбец, то он делает на уровне источника
  4. Сортировка фактов по минимально мощным ключам измерения
  5. Указать тип данных у колонок с минимально возможной точностью для числовых полей
  6. Для всех числовых полей устанавливается свойство EncodingHints = Значение(VALUE). (Свойство доступно начиная с 2017й версии)
  7. Устанавливаем свойство IsAvailableInMdx = Нет для всех колонок в фактах (как для fk, так и для значений), за исключением тех колонок, которые выступают как атрибут "измерения фактов", если такие есть.