AutoPeriod: IRubricatorAutoPeriod;
AutoPeriod: Prognoz.Platform.Interop.Cubes.IRubricatorAutoPeriod;
Свойство AutoPeriod возвращает период обновления данных.
Для фильтрации обновляемых временных рядов используйте свойство ICubeMetaUpdateExParams.FactorsFilter.
Для выполнения примера в репозитории предполагается наличие базы данных временных рядов с идентификатором «TSDB_UPD», содержащей пользовательские атрибуты временных рядов с идентификаторами «CITY» и «INDICATOR». Данные атрибуты должны являться ссылками на справочник.
Добавьте ссылки на системные сборки: Cubes, Dimensions, Metabase, Rds.
// Основная процедура
Sub UserProc;
Var
Mb: IMetabase;
MUpd: IMetabaseUpdate;
Object: IMetabaseObject;
Begin
// Получаем репозиторий
Mb := MetabaseClass.Active;
// Создаем обновление
MUpd := Mb.CreateUpdate;
// Получаем базу данных временных рядов
Object := Mb.ItemById("TSDB_UPD").Bind;
// Добавляем в обновление базу данных временных рядов
AddToUpdate(Object, MUpd.RootFolder);
// Задаем тип обновления: по идентификаторам
MUpd.BoundType := MetabaseObjectUpdateBoundType.ById;
// Выполняем сортировку объектов обновления в порядке зависимости
MUpd.RootFolder.Sort(UpdateSortMode.ByDepends);
// Сохраняем обновление в файл
MUpd.SaveToFile("C:\UpdTSDB.pef");
End Sub UserProc;
// Процедура добавления объекта в обновление
Sub AddToUpdate(Object: IMetabaseObjectDescriptor; Folder: IMetabaseUpdateFolderNode);
Var
Node: IMetabaseUpdateObjectNode;
NodeAsFolder: IMetabaseUpdateFolderNode;
Children: IMetabaseObjectDescriptors;
i: Integer;
exParams: ICubeMetaUpdateExParams;
factory: IDimSelectionSetFactory;
SelectionSet: IDimSelectionSet;
Rub: IRubricator;
Attributes: IMetaAttributes;
Attr: IMetaAttribute;
Selection: IDimSelection;
AutoPeriod: IRubricatorAutoPeriod;
Begin
// Создаем ветку обновления
Node := Folder.Add(MetabaseUpdateNodeType.Object) As IMetabaseUpdateObjectNode;
// Если добавляемый объект это база данных временных рядов, то задаем параметры её обновления
If Object.ClassId = MetabaseObjectClass.KE_CLASS_RUBRICATOR Then
// Задаем фильтр, по которому будут обновляться временные ряды
exParams := Object.Bind.CreateUpdateExParams As ICubeMetaUpdateExParams;
factory := New DimSelectionSetFactory.Create;
SelectionSet := factory.CreateDimSelectionSet;
// Получаем все атрибуты временных рядов
Rub := Object As IRubricator;
attributes := Rub.Facts.Attributes;
// Перебираем все атрибуты временных рядов
For Each Attr In attributes Do
// Если это атрибут «INDICATOR» или «CITY»,
// то ограничиваем отметку в измерении, основанном на данном атрибуте
If (Attr.Id = "INDICATOR") Or (Attr.Id = "CITY") Then
selection := SelectionSet.Add(Attr.ValuesObject.Open(Null) As IDimInstance);
selection.DeselectAll;
selection.SelectElement(1, False);
selection.SelectElement(2, False);
End If;
End For;
exParams.FactorsFilter := SelectionSet;
// Указываем, что мнемоники должны быть регенерированы
exParams.RegenerateMnemo := True;
// Указываем, наблюдения, отсутствующие в обновлении, но присутствующие в обновляемой
// базе данных временных рядов, будут заменены значением Null
exParams.ForceEmptyValues := True;
// Указываем, что пустые значения из обновления не вставляются
// в обновляемую базу данных временных рядов
exParams.SkipEmptySourceValues := True;
// Задаем режим обновления базы данных временных рядов
exParams.UpdateMode := CubeLoadClearMode.DataAndMetadata;
// Задаем период обновления данных
AutoPeriod := exParams.AutoPeriod;
AutoPeriod.Start.ExactDate := DateTime.Parse("01.01.1980");
AutoPeriod.End_.ExactDate := DateTime.Parse("01.01.2016");
// Указываем, что на время обновления будет заблокирована системная таблица
exParams.CanLockBMOD := True;
Node.ExtendedParams := exParams;
End If;
// Указываем обновляемый объект
Node.Object := Object;
// Задаем параметры обновления
Node.BoundType := MetabaseObjectUpdateBoundType.ById;
Node.UpdatePart := MetabaseObjectUpdatePart.DataMetadata;
Node.Constraint := MetabaseObjectUpdateConstraint.None;
// Добавляем в обновление дочерние объекты
Children := Object.Children;
NodeAsFolder := (Node As IMetabaseUpdateFolderNode);
For i := 0 To Children.Count - 1 Do
AddToUpdate(Children.Item(i), NodeAsFolder);
End For;
End Sub AddToUpdate;
В результате выполнения примера в будет создано обновление, включающее в себя базу данных временных рядов и все её дочерние объекты. Обновление будет сохранено в файл «C:\UpdTSDB.pef».
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Rds;
…
Public Shared Sub Main(Params: StartParams);
Var
Mb: IMetabase;
MUpd: IMetabaseUpdate;
Object: IMetabaseObject;
Begin
// Получаем репозиторий
Mb := Params.Metabase;
// Создаем обновление
MUpd := Mb.CreateUpdate();
// Получаем базу данных временных рядов
Object := Mb.ItemById["TSDB_UPD"].Bind();
// Добавляем в обновление базу данных временных рядов
AddToUpdate(Object, MUpd.RootFolder);
// Задаем тип обновления: по идентификаторам
MUpd.BoundType := MetabaseObjectUpdateBoundType.moubtById;
// Выполняем сортировку объектов обновления в порядке зависимости
MUpd.RootFolder.Sort(UpdateSortMode.usmByDepends);
// Сохраняем обновление в файл
MUpd.SaveToFile("C:\\UpdTSDB.pef");
End Sub;
// Процедура добавления объекта в обновление
Public Shared Sub AddToUpdate(Object: IMetabaseObjectDescriptor; Folder: IMetabaseUpdateFolderNode);
Var
Node: IMetabaseUpdateObjectNode;
NodeAsFolder: IMetabaseUpdateFolderNode;
Children: IMetabaseObjectDescriptors;
i: Integer;
exParams: ICubeMetaUpdateExParams;
factory: IDimSelectionSetFactory;
SelectionSet: IDimSelectionSet;
Rub: IRubricator;
Attributes: IMetaAttributes;
Attr: IMetaAttribute;
Selection: IDimSelection;
AutoPeriod: IRubricatorAutoPeriod;
Begin
// Создаем ветку обновления
Node := Folder.Add(MetabaseUpdateNodeType.untObject) As IMetabaseUpdateObjectNode;
// Если добавляемый объект это база данных временных рядов, то задаем параметры её обновления
If Object.ClassId = MetabaseObjectClass.KE_CLASS_RUBRICATOR As integer Then
// Задаем фильтр, по которому будут обновляться временные ряды
exParams := Object.Bind().CreateUpdateExParams() As ICubeMetaUpdateExParams;
factory := New DimSelectionSetFactory.Create();
SelectionSet := factory.CreateDimSelectionSet();
// Получаем все атрибуты временных рядов
Rub := Object As IRubricator;
attributes := Rub.Facts.Attributes;
// Перебираем все атрибуты временных рядов
For Each Attr In attributes Do
// Если это атрибут «INDICATOR» или «CITY»,
// то ограничиваем отметку в измерении, основанном на данном атрибуте
If (Attr.Id = "INDICATOR") Or (Attr.Id = "CITY") Then
selection := SelectionSet.Add(Attr.ValuesObject.Open(Null) As IDimInstance);
selection.DeselectAll();
selection.SelectElement(1, False);
selection.SelectElement(2, False);
End If;
End For;
exParams.FactorsFilter := SelectionSet;
// Указываем, что мнемоники должны быть регенерированы
exParams.RegenerateMnemo := True;
// Указываем, наблюдения, отсутствующие в обновлении, но присутствующие в обновляемой
// базе данных временных рядов, будут заменены значением Null
exParams.ForceEmptyValues := True;
// Указываем, что пустые значения из обновления не вставляются
// в обновляемую базу данных временных рядов
exParams.SkipEmptySourceValues := True;
// Задаем режим обновления базы данных временных рядов
exParams.UpdateMode := CubeLoadClearMode.clcmDataAndMetadata;
// Задаем период обновления данных
AutoPeriod := exParams.AutoPeriod;
AutoPeriod.Start.ExactDate := DateTime.Parse("01.01.1980");
AutoPeriod.@End.ExactDate := DateTime.Parse("01.01.2016");
// Указываем, что на время обновления будет заблокирована системная таблица
exParams.CanLockBMOD := True;
Node.ExtendedParams := exParams;
End If;
// Указываем обновляемый объект
Node.Object := Object;
// Задаем параметры обновления
Node.BoundType := MetabaseObjectUpdateBoundType.moubtById;
Node.UpdatePart := MetabaseObjectUpdatePart.moupDataMetadata;
Node.Constraint := MetabaseObjectUpdateConstraint.moucNone;
// Добавляем в обновление дочерние объекты
Children := Object.Children;
NodeAsFolder := (Node As IMetabaseUpdateFolderNode);
For i := 0 To Children.Count - 1 Do
AddToUpdate(Children.Item[i], NodeAsFolder);
End For;
End Sub AddToUpdate;
См. также: