| 
   Когда мы создаем в SSAS меру типа distinct count, она
  по-умолчанию создается в новой группе мер, причем метаданные источника данных
  копируется из исходной группы мер. То есть, если исходная группа мер
  содержала в себе 50 секций, то определения(запросы) этих секций абсолютно
  таком же виде скопируются в новую группу мер.  
   
  Удобно? На первый взгляд да. 
   
  Но в некоторых случаях начинаются проблемы при процессинге: для новосозданных
  секций он идет очень-очень долго. Часто в разы дольше, чем обрабатываются
  секции исходной группы мер. 
   
  Почему так происходит? 
   
  Первый момент: если запустить Profiler, то можно увидеть, что запрос,
  поступающий в хранилище, содержит сортировку по тому полю, по которому
  построена distinct count-мера. Построением нужного индекса можно существенно
  ускорить такой запрос. Этот момент очевиден и применяется достаточно часто. 
   
  Второй момент: напомню, что distinct count-секции генерируются на основе
  секций некоторой исходной группы мер. А эти исходные секции часто основаны на
  представлениях. Вот тут-то и зарыта собака. 
  Рассмотрим на примере: куб "Продажи" с данными о себестоимости
  товаров, пусть здесь в качестве источника данных выступает преставление, в
  котором факты продаж джойнятся с табличкой себестоимости товара. Это значит,
  что СУБД должена сначала выполнить объединение данных, затем их
  отсортировать, причем эта самая себестоимость в данном случае нам фактически
  не нужна! А если она не нужна, то от нее стоит избавится и взять в качестве
  источника сразу таблицу продаж, а не автоматически сгенерированное
  представление. То есть стоит чуть-чуть поработать руками и заменить в
  источник данных для этой группы мер. 
   
  Этот подход может в разы увеличить скорость процессинга, особенно на кубах,
  содержащих несколько distinct count-мер.
   | 
 
Комментариев нет:
Отправить комментарий