MetaAttributeFilter: IMsMetaAttributeFilter;
MetaAttributeFilter: Prognoz.Platform.Interop.Ms.IMsMetaAttributeFilter;
Свойство MetaAttributeFilter возвращает объект, содержащий фильтр, применяемый при расчете задачи моделирования.
По умолчанию применяется пустой фильтр.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащего задачу моделирования с идентификатором «PROBLEM_METAFILTER». В базе данных временных рядов, являющейся источником данных для контейнера моделирования, должен присутствовать атрибут рядов «CITY», ссылающийся на справочник.
Добавьте ссылки на системные сборки: Cubes, Dimensions, Metabase, Ms, Rds.
Sub UserProc;
Var
MB: IMetabase;
Descr: IMetabaseObjectDescriptor;
Problem: IMsProblem;
CalcSettings: IMsProblemCalculationSettings;
Calculation: IMsProblemCalculation;
Ruby: IRubricator;
MetaAttr: IMetaAttribute;
MetaVals: IMsMetaAttributeValues;
Dict: IMetabaseObject;
DI: IDimInstance;
Sel: IDimSelection;
Begin
// Получаем текущий репозиторий
MB := MetabaseClass.Active;
// Получаем контейнер моделирования
Descr := MB.ItemById("MS");
// Получаем задачу моделирования
Problem := MB.ItemByIdNamespace("PROBLEM_METAFILTER", Descr.Key).Edit As IMsProblem;
// Создаем настройки расчета задачи
CalcSettings := Problem.CreateCalculationSettings;
// Указываем, что расчет будет по сценарию «Факт»
CalcSettings.FactIncluded := True;
// Создаем объект для расчета задачи
Calculation := Problem.Calculate(CalcSettings);
// Получаем базу данных временных рядов, являющуюся источником данных для контейнера моделирования
Ruby := (Descr.Bind As IMsModelSpace).DefaultObject.Bind As IRubricator;
// Получаем атрибут рядов «CITY»
MetaAttr := Ruby.Facts.Attributes.FindById("CITY");
// Добавляем фильтрацию по данному атрибуту
MetaVals := Calculation.MetaAttributeFilter.Add(MetaAttr);
// Создаём отметку атрибута «CITY»
Dict := MetaAttr.ValuesObject.Bind;
DI := Dict.Open(Null) As IDimInstance;
Sel := DI.CreateSelection;
Sel.SelectElement(0, False);
// Устанавливаем отметку в фильтр
MetaVals.Selection := Sel;
// Выполняем расчет
Calculation.Run;
// Сохраняем изменения в задаче моделирования
(Problem As IMetabaseObject).Save;
End Sub UserProc;
В результате выполнения примера для задачи моделирования будет настроена фильтрация и произведен расчет.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Rds;
…
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
Descr: IMetabaseObjectDescriptor;
Problem: IMsProblem;
CalcSettings: IMsProblemCalculationSettings;
Calculation: IMsProblemCalculation;
Ruby: IRubricator;
MetaAttr: IMetaAttribute;
MetaVals: IMsMetaAttributeValues;
Dict: IMetabaseObject;
DI: IDimInstance;
Sel: IDimSelection;
Begin
// Получаем текущий репозиторий
MB := Params.Metabase;
// Получаем контейнер моделировния
Descr := MB.ItemById["MS"];
// Получаем задачу моделирования
Problem := MB.ItemByIdNamespace["PROBLEM_METAFILTER", Descr.Key].Edit() As IMsProblem;
// Создаем настройки расчета задачи
CalcSettings := Problem.CreateCalculationSettings();
// Указываем, что расчет будет по сценарию «Факт»
CalcSettings.FactIncluded := True;
// Создаем объект для расчета задачи
Calculation := Problem.Calculate(CalcSettings);
// Получаем базу данных временных рядов, являющуюся источником данных для контейнера моделирования
Ruby := (Descr.Bind() As IMsModelSpace).DefaultObject.Bind() As IRubricator;
// Получаем атрибут рядов «CITY»
MetaAttr := Ruby.Facts.Attributes.FindById("CITY");
// Добавляем фильтрацию по данному атрибуту
MetaVals := Calculation.MetaAttributeFilter.Add(MetaAttr);
// Создаём отметку атрибута «CITY»
Dict := MetaAttr.ValuesObject.Bind();
DI := Dict.Open(Null) As IDimInstance;
Sel := DI.CreateSelection();
Sel.SelectElement(0, False);
// Устанавливаем отметку в фильтр
MetaVals.Selection := Sel;
// Выполняем расчет
Calculation.Run();
// Сохраняем изменения в задаче моделирования
(Problem As IMetabaseObject).Save();
End Sub;
См. также: