Execute: ITsStatisticsTree;
Execute(): Prognoz.Platform.Interop.Transform.ITsStatisticsTree;
Метод Execute выполняет построение дерева статистических характеристик.
Значения, для которых рассчитываются статистические характеристики, определяет свойство ITsStatistics.Values.
Для выполнения примера предполагается наличие формы, содержащей следующие компоненты:
кнопку с идентификатором «Button1»;
LanerBox с идентификатором «LanerBox1»;
UiErAnalayzer с идентификатором «UiErAnalayzer1», являющийся источником данных для «LanerBox1». В «UiErAnalayzer1» должна быть загружена рабочая книга БД временных рядов;
TreeList с идентификатором «TreeList1», содержащий 2 колонки.
Добавьте ссылки на системные сборки: Collection, Cubes, Ms, Stat, Tab, Transform.
Пример является обработчиком события OnClick для компонента «Button1».
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
Stat: ITsStatistics;
CalcSerie: ILanerCalculateSerie;
Transform: IMsFormulaTransform;
Formula: IMsFormula;
SummaryStat: ISummaryStatistics;
TabSheet: ITabSheet;
TabSelection: ITabSelection;
Range: ITabRange;
i, j: integer;
Arr: IArrayList;
Tree: ITsStatisticsTree;
StatNode, ParentNode: ITreeListNode;
HashT: IHashtable;
Grid:IEaxGrid;
Begin
// Очищаем компонент для вывода дерева статистик
TreeList1.Nodes.Clear;
If LanerBox1.SelectedSeriesCount = 0 Then
Return;
End If;
// Создаем класс для построения дерева статистик
Stat := New TsStatistics.Create;
// Передаем статистические характеристики для построения дерева
CalcSerie := LanerBox1.SelectedSeries(0) As ILanerCalculateSerie;
If CalcSerie.Transform <> Null Then
Transform := CalcSerie.Transform.Transform As IMsFormulaTransform;
If (Transform <> Null) And (Transform.FormulaCount <> 0) Then
Formula := Transform.FormulaItem(0);
SummaryStat := Formula.Method.Summary(Transform.CreateCoord(Null));
Stat.SummaryStatistics := SummaryStat;
End If;
End If;
// Получаем диапазон ячеек, выделенных в LanerBox
Grid := UiErAnalyzer1.ErAnalyzer.Grid;
TabSheet := Grid.TabSheet;
TabSelection := TabSheet.View.Selection;
If TabSelection.Range.IsCell Then
Range := Grid.SpecificRange(EaxRangeType.Internal);
Else
Range := TabSelection.Range;
End If;
// Получаем значения в выделенном диапазоне
Arr := New ArrayList.Create;
For i := Range.Left To Range.Right Do
For j := Range.Top To Range.Bottom Do
Arr.Add(TabSheet.CellValue(j, i));
End For;
End For;
// Передаем значения для построения дерева
Stat.Values := Arr.ToArray;
// Исключаем часть статистик из построения дерева
Stat.IncludeStatistics(TsStatisticsType.Skew) := False;
Stat.IncludeStatistics(TsStatisticsType.Kurt) := False;
// Включаем в построение дерева только рассчитанные статистики
Stat.CalculatedOnly := True;
// Отстраиваем дерево
Tree := Stat.Execute;
If Tree = Null Then
Return;
End If;
HashT := New Hashtable.Create;
For i := 0 To Tree.Count - 1 Do
ParentNode := Null;
If Tree.ParentNode(i) <> -1 Then
ParentNode := HashT(Tree.ParentNode(i));
End If;
StatNode := TreeList1.Nodes.AddChild(ParentNode, Tree.Name(i));
If Tree.Type(i) = TsStatisticsTreeNodeType.Statistics Then
StatNode.ColumnText(1) := Tree.Value(i);
Debug.WriteLine(Tree.Data[i] As TsStatisticsTreeNodeType);
End If;
HashT(i) := StatNode;
End For;
HashT.Clear;
TreeList1.Nodes.TreeControl.InnerRoot.Expand(True);
End Sub Button1OnClick;
После выполнения примера в «TreeList1» будет выведено дерево статистических характеристик, рассчитанных для диапазона данных, выделенного в «LanerBox1».
Для выполнения примера предполагается наличие формы, содержащей следующие компоненты:
кнопку с идентификатором «button1»;
LanerBoxNet с идентификатором «lanerBoxNet1»;
uiErAnalayzerNet с идентификатором «uiErAnalayzerNet1», являющийся источником данных для «lanerBoxNet1». В «uiErAnalayzerNet1» должна быть загружена рабочая книга БД временных рядов;
TreeListNet с идентификатором «treeListNet1», содержащий 2 колонки.
Пример является обработчиком события Click для компонента «button1».
Imports Prognoz.Platform.Interop.Laner;
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Stat;
Imports Prognoz.Platform.Interop.Tab;
Imports Prognoz.Platform.Interop.Transform;
Imports Prognoz.Platform.Interop.ForeCollections;
Imports Prognoz.Platform.Interop.Express;
Imports Prognoz.Platform.Interop.Forms;
…
Private Sub button1_Click(sender: System.Object; e: System.EventArgs);
Var
Stat: ITsStatistics;
CalcSerie: ILanerCalculateSerie;
Transform: IMsFormulaTransform;
Formula: IMsFormula;
SummaryStat: ISummaryStatistics;
TabSheet: ITabSheet;
TabSelection: ITabSelection;
Range: ITabRange;
i, j: integer;
Arr: IArrayList;
Tree: ITsStatisticsTree;
StatNode, ParentNode: ITreeListNode;
HashT: IHashtable;
Grid: IEaxGrid;
Begin
// Очищаем компонент для вывода дерева статистик
treeListNet1.CtrlBox.Nodes.Clear();
If lanerBoxNet1.SelectedSeriesCount = 0 Then
Return;
End If;
// Создаем класс для построения дерева статистик
Stat := New TsStatistics.Create();
// Передаем статистические характеристики для построения дерева
CalcSerie := lanerBoxNet1.SelectedSeries[0] As ILanerCalculateSerie;
If CalcSerie.Transform <> Null Then
Transform := CalcSerie.Transform.Transform As IMsFormulaTransform;
If (Transform <> Null) And (Transform.FormulaCount <> 0) Then
Formula := Transform.FormulaItem[0];
SummaryStat := Formula.Method.Summary[Transform.CreateCoord(Null)];
Stat.SummaryStatistics := SummaryStat;
End If;
End If;
// Получаем диапазон ячеек, выделенных в LanerBoxNet
Grid := uiErAnalyzerNet1.ErAnalyzer.ErAnalyzer.Grid;
TabSheet := Grid.TabSheet;
TabSelection := TabSheet.View.Selection;
If TabSelection.Range.IsCell Then
Range := Grid.SpecificRange[EaxRangeType.ertInternal];
Else
Range := TabSelection.Range;
End If;
// Получаем значения в выделенном диапазоне
Arr := New ArrayList.Create();
For i := Range.Left To Range.Right Do
For j := Range.Top To Range.Bottom Do
Arr.Add(TabSheet.CellValue[j, i]);
End For;
End For;
// Передаем значения для построения дерева
Stat.Values := Arr.ToArray();
// Исключаем часть статистик из построения дерева
Stat.IncludeStatistics[TsStatisticsType.tstSkew] := False;
Stat.IncludeStatistics[TsStatisticsType.tstKurt] := False;
// Включаем в построение дерева только рассчитанные статистики
Stat.CalculatedOnly := True;
// Отстраиваем дерево
Tree := Stat.Execute();
If Tree = Null Then
Return;
End If;
HashT := New Hashtable.Create();
For i := 0 To Tree.Count - 1 Do
ParentNode := Null;
If Tree.ParentNode[i] <> -1 Then
ParentNode := HashT[Tree.ParentNode[i]] As ITreeListNode;
End If;
StatNode := treeListNet1.CtrlBox.Nodes.AddChild(ParentNode, Tree.Name[i]);
If Tree.Type[i] = TsStatisticsTreeNodeType.tstntStatistics Then
StatNode.ColumnText[1] := Tree.Value[i].ToString();
System.Diagnostics.Debug.WriteLine(Tree.Data[i] As TsStatisticsTreeNodeType);
End If;
HashT[i] := StatNode;
End For;
HashT.Clear();
treeListNet1.CtrlBox.Nodes.TreeControl.InnerRoot.Expand(True);
End Sub;
После выполнения примера в «treeListNet1» будет выведено дерево статистических характеристик, рассчитанных для диапазона данных, выделенного в «lanerBoxNet1».
См. также:
Код примера