Coalesce(Parameters: Array): Variant;
Coalesce(Parameters: System.Array; Context: Prognoz.Platform.Interop.Fore.ForeRuntimeContext): object;
Parameters. Массив рядов;
Context. Контекст. Параметр используется только в Fore.NET.
Метод Coalesce возвращает ряд, каждая точка которого вычисляется как первое встреченное значение из указанных рядов, которое не равно Null.
Если все значения в массиве рядов будут Null, то метод тоже вернёт Null.
Для корректной работы метода убедитесь, что массив рядов содержит более одного ряда.
Допустим, есть три ряда «A», «B» и «C». В результате применения метода Coalesce будет получен следующий ряд:
| Ряд/Значения | ||||||||
| А | 1 | Null | 1 | 1 | Null | 1 | Null | Null |
| B | 2 | 2 | Null | 2 | Null | Null | 2 | Null |
| C | 3 | 3 | 3 | Null | 3 | Null | Null | Null |
| Coalesce (A, B,C) | 1 | 2 | 1 | 1 | 3 | 1 | 2 | Null |
Для выполнения примера предполагается наличие в репозитории контейнера моделирования с идентификатором «MS». В данном контейнере содержится модель с идентификатором «MODEL_D», рассчитываемая методом детерминированного уравнения и содержащая больше двух входных переменных.
Добавьте ссылки на системные сборки: Metabase, Ms.
Sub UserCoalesce;
Var
Mb: IMetabase;
ModelSpace, ModelObj: IMetabaseObject;
Transf: IMsFormulaTransform;
Formula: IMsFormula;
Model: IMsModel;
Determ: IMsDeterministicTransform;
TransVar: IMsFormulaTransformVariable;
Slice: IMsFormulaTransformSlice;
TermInfo: IMsFormulaTermInfo;
X1, X2, X3: String;
Expr: IExpression;
Begin
// Получаем репозиторий
Mb := MetabaseClass.Active;
// Получаем контейнер моделирования
ModelSpace := Mb.ItemById("MS").Bind;
// Получаем модель
ModelObj := Mb.ItemByIdNamespace("MODEL_D", ModelSpace.Key).Edit;
Model := ModelObj As IMsModel;
// Получаем параметры расчета модели
Transf := Model.Transform;
Formula := Transf.FormulaItem(0);
Determ := Formula.Method As IMsDeterministicTransform;
// Получаем первую входную переменную
TransVar := Transf.Inputs.Item(0);
Slice := TransVar.Slices.Item(0);
TermInfo := Transf.CreateTermInfo;
TermInfo.Slice := Slice;
// Задаем режим передачи переменной в расчет
TermInfo.Type := MsFormulaTermType.Pointwise;
// Получаем внутреннее представление переменной в виде текста
X1 := TermInfo.TermInnerText;
// Получаем вторую входную переменную
TransVar := Transf.Inputs.Item(1);
Slice := TransVar.Slices.Item(0);
TermInfo := Transf.CreateTermInfo;
TermInfo.Slice := Slice;
// Задаем режим передачи переменной в расчет
TermInfo.Type := MsFormulaTermType.Pointwise;
// Получаем внутреннее представление переменной в виде текста
X2 := TermInfo.TermInnerText;
// Получаем третью входную переменную
TransVar := Transf.Inputs.Item(2);
Slice := TransVar.Slices.Item(0);
TermInfo := Transf.CreateTermInfo;
TermInfo.Slice := Slice;
// Задаем режим передачи переменной в расчет
TermInfo.Type := MsFormulaTermType.Pointwise;
// Получаем внутреннее представление переменной в виде текста
X3 := TermInfo.TermInnerText;
// Получаем выражение расчета модели
Expr := Determ.Expression;
Expr.References := "Ms";
// Задаем выражение расчета модели
Expr.AsString := "Coalesce(" + X1 + ", " + X2 + "," + X3 + ")";
// Проверяем корректность выражения
If Expr.Valid
// Если выражение задано корректно, то сохраняем модель
Then ModelObj.Save;
// Если выражение некорректное, то выводим сообщение в окно консоли
Else Debug.WriteLine("Модель не сохранена: ошибка в формуле");
End If;
End Sub UserCoalesce;
В результате выполнения примера будет получен ряд путём применения метода Coalesce к трем первым входным переменным.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.ForeSystem;
…
Public Shared Sub Main(Params: StartParams);
Var
Mb: IMetabase;
ModelSpace, ModelObj: IMetabaseObject;
Transf: IMsFormulaTransform;
Formula: IMsFormula;
Model: IMsModel;
Determ: IMsDeterministicTransform;
TransVar: IMsFormulaTransformVariable;
Slice: IMsFormulaTransformSlice;
TermInfo: IMsFormulaTermInfo;
X1, X2, X3: String;
Expr: IExpression;
Begin
// Получаем репозиторий
Mb := Params.Metabase;
// Получаем контейнер моделирования
ModelSpace := Mb.ItemById["MS"].Bind();
// Получаем модель
ModelObj := Mb.ItemByIdNamespace["MODEL_D", ModelSpace.Key].Edit();
Model := ModelObj As IMsModel;
// Получаем параметры расчета модели
Transf := Model.Transform;
Formula := Transf.FormulaItem[0];
Determ := Formula.Method As IMsDeterministicTransform;
// Получаем первую входную переменную
TransVar := Transf.Inputs.Item[0];
Slice := TransVar.Slices.Item[0];
TermInfo := Transf.CreateTermInfo();
TermInfo.Slice := Slice;
// Задаем режим передачи переменной в расчет
TermInfo.Type := MsFormulaTermType.mfttPointwise;
// Получаем внутреннее представление переменной в виде текста
X1 := TermInfo.TermInnerText;
// Получаем вторую входную переменную
TransVar := Transf.Inputs.Item[1];
Slice := TransVar.Slices.Item[0];
TermInfo := Transf.CreateTermInfo();
TermInfo.Slice := Slice;
// Задаем режим передачи переменной в расчет
TermInfo.Type := MsFormulaTermType.mfttPointwise;
// Получаем внутреннее представление переменной в виде текста
X2 := TermInfo.TermInnerText;
// Получаем третью входную переменную
TransVar := Transf.Inputs.Item[2];
Slice := TransVar.Slices.Item[0];
TermInfo := Transf.CreateTermInfo();
TermInfo.Slice := Slice;
// Задаем режим передачи переменной в расчет
TermInfo.Type := MsFormulaTermType.mfttPointwise;
// Получаем внутреннее представление переменной в виде текста
X3 := TermInfo.TermInnerText;
// Получаем выражение расчета модели
Expr := Determ.Expression;
Expr.References := "Ms;Stat";
// Задаем выражение расчета модели
Expr.AsString := "Coalesce(" + X1 + ", " + X2 + "," + X3 + ")";
// Проверяем корректность выражения
If Expr.Valid
// Если выражение задано корректно, то сохраняем модель
Then ModelObj.Save();
// Если выражение некорректное, то выводим сообщение в окно консоли
Else System.Diagnostics.Debug.WriteLine("Модель не сохранена: ошибка в формуле");
End If;
End Sub;
Выражение 1:
Coalesce({Уровень безработицы, %|Анкоридж[t]}, {Уровень безработицы, %|Чикаго[t]}, {Уровень безработицы, %|Мехико[t]})
Результат: будет получен ряд путём применения метода Coalesce к рядам «Уровень безработицы, %|Анкоридж», «Уровень безработицы, %|Чикаго», «Уровень безработицы, %|Мехико».
Применение: можно использовать в формулах вычисляемых рядов базы данных временных рядов и в формулах моделей контейнера моделирования, являющегося дочерним по отношению к базе данных временных рядов.
Выражение 2:
Coalesce(X1, X2)
Результат: будет получен ряд путём применения метода Coalesce к факторам «X1» и «X2».
Применение: можно использовать в формулах моделей контейнера моделирования.
См. также: