UpdateCacheBySelection(Selection: IDimSelectionSet);
Selection. Отметка, в соответствии с которой будет обновлён кэш.
Метод UpdateCacheBySelection обновляет кэш открытого экземпляра куба по заданной отметке.
Метод UpdateCacheBySelection, в отличие от метода UpdateCache, позволяет производить параллельное обновление кэша в нескольких потоках. Количество потоков определяется автоматически и зависит от характеристик компьютера, на котором производится обновление, размера передаваемое отметки. Измерение, отметка которого будет разделена для параллельной обработки в потоках, должно быть определено в свойстве ICubeCacheSaver.PartitionDimensionKey.
Примечание. Для работы метода требуется предварительная настройка пула соединений.
Если в качестве значения параметра Selection передаётся значение Null, то кэш обновляется по полной отметке куба.
Примечание. Параллельное обновление кэша доступно только для стандартных кубов.
Для выполнения примера в репозитории предполагается наличие стандартного куба с идентификатором STD_CUBE. Куб в своей структуре имеет измерение с идентификатором CALENDAR. У куба включена возможность кэширования данных в хранилище закэшированных данных куба. Также в настройках кэша куба измерение CALENDAR установлено для использования при параллельном обновлении кэша.
Добавьте ссылки на системные сборки: Cubes, Metabase.
Sub UserProc;
Var
MB: IMetabase;
MDesc, CacheDesc: IMetabaseObjectDescriptor;
Cache: ICubeCacheSaver;
CubeInst: ICubeInstance;
Dest: ICubeInstanceDestination;
Sels: IDimSelectionSet;
Sel: IDimSelection;
Begin
MB := MetabaseClass.Active;
MDesc := MB.ItemById("STD_CUBE");
CacheDesc := GetCache(MDesc);
If CacheDesc <> Null Then
Cache := CacheDesc.Edit As ICubeCacheSaver;
// Открытие куба
CubeInst := MDesc.Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
// Создание отметки
Sels := Dest.CreateDimSelectionSet;
For Each Sel In Sels Do
If Sel.Dimension.Ident = "CALENDAR" Then
Sel.SelectAll;
Else
Sel.SelectElement(0, False);
Sel.SelectElement(1, False);
Sel.SelectElement(2, False);
End If;
End For;
// Обновление кэша по отметке
Dest.UpdateCacheBySelection(Sels);
End If;
End Sub UserProc;
Function GetCache(MObj: IMetabaseObjectDescriptor): IMetabaseObjectDescriptor;
Var
Desc: IMetabaseObjectDescriptor;
Begin
For Each Desc In MObj.Children Do
If Desc.ClassId = MetabaseObjectClass.KE_CLASS_CUBE_CACHE_SAVER Then
Return Desc;
End If;
End For;
Return Null;
End Function GetCache;
При выполнении примера будет обновлён кэш куба по предопределённой отметке куба. Для параллельного обновления кэша отметка измерения CALENDAR будет разделена на части.
См. также: