ArrangeModels(ArrangeMode: MsArrangeMode; [Problem: IMsProblem = Null]);
ArrangeMode. Режим автопостроения цепочки расчёта;
Problem. Задача, по которой будут устанавливаться периоды расчёта создаваемой системы уравнений.
Метод ArrangeModels автоматически выстраивает цепочку расчёта моделей по заданным параметрам в соответствии с зависимостями между переменными.
Автоматическое построение позволяет определить зависимости между моделями и построить согласно этим зависимостям цепочку расчёта. Метамодели, входящие в цепочку расчёта, при автопостроении игнорируются.
Принципы автоматического построения цепочки:
объясняемые переменные моделей представляют множество Y;
в число факторов всех моделей входят:
переменные из множества Y;
переменные из множества Y, но с лагами - множество Y1;
переменные, для которых нет уравнений - множество X;
в цепочку будут включены сначала X, Y1, затем Y2. Модели Y2 зависят только от X и от Y1;
затем формируется множество Y3, содержащее модели, которые можно рассчитать на основе X, Y1, Y2. Полученное множество будет включено в цепочку и т.д.;
если в цепочке присутствуют модели, содержащие переменные, зависящие сами от себя, то такие модели будут размещены в отдельную папку «Циклы».
Значение параметра ArrangeMode влияет на автоматическое построение следующим образом:
ArrangeMode содержит значение InsideFolders. Автопостроение выполняется по отдельности для каждой папки, входящей в цепочку;
ArrangeMode содержит значение DeleteFolders. Все модели из всех дочерних папок извлекаются на уровень, для которого производится автопостроение, а папки удаляются. Таким образом, автопостроение выполняется без учёта папок;
ArrangeMode содержит значение SplitSlices. Если в цепочке расчёта присутствует многомерная модель, содержащая внутренние циклы, или если хотя бы одно из её уравнений образует цикл с другой моделью, входящей в цепочку, то многомерная модель разбивается на модели, соответствующие измерениям, для которых задан метод расчёта. Оставшиеся уравнения, которые не образуют циклов, помещаются в другую многомерную модель. Если циклы разрешаются путём изменения порядка уравнений в многомерной модели, то создается копия модели с нужным порядком. Все созданные модели будут выстроены в порядке зависимости. Модели, образующие циклы, будут помещены в папку «Цикл N», где N - порядковый номер цикла. Исходные многомерные модели изменены не будут, созданные модели будут иметь наименование, соответствующее исходной многомерной модели, и помещены в папку рядом с ней. Наименование папки формируется следующим образом: <Наименование исходной модели>(<дата и время создания папки>);
ArrangeMode не содержит значение SplitSlices. Многомерные модели, содержащие внутренние циклы, будут помещены без изменений в папку «Циклы»;
Примечание. Если родительским объектом контейнера моделирования является база данных временных рядов, то разделение использования значения SplitSlices недоступно.
ArrangeMode содержит значение CreateSystems. Если в цепочке расчёта присутствуют уравнения линейной регрессии, нелинейной регрессии, детерминированного уравнения, образующие цикл, то они объединяются в систему уравнений. Периоды расчёта системы будут взяты из задачи моделирования, указанной в параметре Problem;
ArrangeMode содержит значение NoCycles. Если в цепочке расчёта присутствуют циклы, то модели, образующие цикл, извлекаются из папок, соответствующих циклам, в цепочку расчета вместо самих папок.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором CONT_MODEL, содержащего метамодель с идентификатором META_ARRANGE.
Добавьте ссылки на системные сборки: Metabase, Ms.
Sub UserProc;
Var
mb: IMetabase;
ContKey: Integer;
MetaModel: IMsMetaModel;
Chain: IMsCalculationChainEntries;
Begin
mb := MetabaseClass.Active;
ContKey := mb.GetObjectKeyById("CONT_MODEL");
MetaModel := mb.ItemByIdNamespace("META_ARRANGE", ContKey).Edit As IMsMetaModel;
Chain := MetaModel.CalculationChain;
Chain.ArrangeModels(MsArrangeMode.DeleteFolders Or MsArrangeMode.SplitSlices);
(MetaModel As IMetabaseObject).Save;
End Sub UserProc;
В результате выполнения примера элементы в цепочке расчёта будут выстроены без учёта папок, многомерные модели с циклами будут разделены на части.
См. также: