OpenCellset: IAdoMdCellset;
OpenCellset: Prognoz.Platform.Interop.AdoMd.IAdoMdCellset;
Метод OpenCellset возвращает аналитические данные, полученные в результате выполнения произвольного MDX-запроса к кубу.
Для выполнения примера предполагается наличие в репозитории каталога ADOMD с идентификатором «ADOMDTest». В каталоге имеется куб ADOMD с идентификатором «Cube_1».
Sub UserProc;
Var
MB: IMetabase;
CubInst: ICubeInstance;
CubDest: ICubeInstanceDestination;
ExeCub: ICubeInstanceDestinationExecutor;
ExeAdo: IAdoMdCubeExecutor;
sMDX: String;
Cellset: IAdoMdCellset;
AxisInfo: IAdoMdAxisInfo;
Axis: IAdoMdAxis;
Dim: IAdoMdAxisDim;
i, j: Integer;
Begin
MB := MetabaseClass.Active;
//Открываем куб ADOMD
CubInst := MB.ItemByIdNamespace("Cube_1", MB.GetObjectKeyById("ADOMDTest")).Open(Null) As ICubeInstance;
CubDest := CubInst.Destinations.DefaultDestination;
//Создаем вычислитель
ExeCub := CubDest.CreateExecutor;
ExeAdo := ExeCub As IAdoMdCubeExecutor;
//Указываем MDX-запрос
sMDX := "SELECT ...";
ExeAdo.MdxQuery := sMdx;
//Получение аналитических
данных в соответствии с указанным запросом
Cellset := ExeAdo.OpenCellset;
AxisInfo := Cellset.AxisInfo;
Debug.WriteLine("Количество осей: " + AxisInfo.Count.ToString);
For i := 0 To AxisInfo.Count - 1 Do
Debug.WriteLine("Ось: " + i.ToString);
Axis := AxisInfo.Item(i);
Debug.WriteLine("Количество измерений: " + Axis.DimCount.ToString);
For j := 0 To Axis.DimCount - 1 Do
Dim := Axis.Dim(j);
Debug.Indent;
Debug.WriteLine("Измерение: " + Dim.Name + "; (Количество атрибутов: " + Dim.Cols.ToString + ")");
Debug.WriteLine("Количество элементов в измерении:" + Dim.Instance.Elements.Count.ToString);
Debug.Unindent;
End For;
End For;
End Sub UserProc;
При выполнении примера будет выполнен многомерный запрос к указанному кубу ADOMD. Из результата выполнения будет получена информация об осях, по которым сформированы данные. В консоль среды разработки будет выведена информация по всем осям: количество и наименования измерений, которые использованы для составления координат оси, и количество атрибутов каждого измерения, которые описывают каждую координату.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.AdoMd;
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.Metabase;
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
CubInst: ICubeInstance;
CubDest: ICubeInstanceDestination;
ExeCub: ICubeInstanceDestinationExecutor;
ExeAdo: IAdoMdCubeExecutor;
sMDX: String;
Cellset: IAdoMdCellset;
AxisInfo: IAdoMdAxisInfo;
Axis: IAdoMdAxis;
Dim: IAdoMdAxisDim;
i, j: Integer;
Begin
MB := Params.Metabase;
//Открываем куб ADOMD
CubInst := MB.ItemByIdNamespace["Cube_1", MB.GetObjectKeyById("ADOMDTest")].Open(Null) As ICubeInstance;
CubDest := CubInst.Destinations.DefaultDestination;
//Создаем вычислитель
ExeCub := CubDest.CreateExecutor();
ExeAdo := ExeCub As IAdoMdCubeExecutor;
sMDX := "SELECT...";
ExeAdo.MdxQuery := sMdx;
//Получение аналитических данных в соответствии с указанным запросом
Cellset := ExeAdo.OpenCellset();
AxisInfo := Cellset.AxisInfo;
System.Diagnostics.Debug.WriteLine("Количество осей: " + AxisInfo.Count.ToString());
For i := 0 To AxisInfo.Count - 1 Do
System.Diagnostics.Debug.WriteLine("Ось: " + i.ToString());
Axis := AxisInfo.Item[i];
System.Diagnostics.Debug.WriteLine("Количество измерений: " + Axis.DimCount.ToString());
For j := 0 To Axis.DimCount - 1 Do
Dim := Axis.Dim[j];
System.Diagnostics.Debug.Indent();
System.Diagnostics.Debug.WriteLine("Измерение: " + Dim.Name + "; (Количество атрибутов: " + Dim.Cols.ToString() + ")");
System.Diagnostics.Debug.WriteLine("Количество элементов в измерении:" + Dim.Instance.Elements.Count.ToString());
System.Diagnostics.Debug.Unindent();
End For;
End For;
End Sub;
См. также: