Consider the example of creating a virtual cube using the Fore and Fore.NET language. Executing the example requires that the repository contains two cubes with the Cube_1 and Cube_2 identifiers. Each cube is built in its own fact dimension with the FACTS1 and FACTS2 identifiers respectively.
The following example creates a new object that is Virtual Cube in the repository root and sets up its parameters, facts dimensions are registered.
To execute the example, add links to the Cubes, Dimensions, Metabase system assemblies. Write corresponding strings of Imports for the Fore.NET example.
Sub CreateViewCube;
Var
MB: IMetabase;
CrInfo: IMetabaseObjectCreateInfo;
MObj: IMetabaseObject;
VCube: IVirtualCube;
VCubeSources: IVirtualCubeSources;
CubeModel: ICubeModel;
CubeDest: ICubeModelDestination;
VSource1, VSource2: IVirtualCubeSource;
FixInfo: ICubeDimensionFixInfo;
Fix: ICubeDimensionFix;
Begin
MB := MetabaseClass.Active;
CrInfo := MB.CreateCreateInfo;
CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_VIRTUALCUBE;
CrInfo.Id := "New_Virt_Cube";
CrInfo.Name := New virtual cube;
CrInfo.Parent := MB.Root;
MObj := MB.CreateObject(CrInfo).Edit;
VCube := MObj As IVirtualCube;
VCubeSources := VCube.Sources;
//Add the first cube to data sources
CubeModel := Mb.ItemById("Cube_1").Bind As ICubeModel;
CubeDest := CubeModel.Destinations.DefaultDestination;
VSource1 := VCubeSources.Add(CubeDest);
//Add the second cube to data sources
CubeModel := Mb.ItemById("Cube_2").Bind As ICubeModel;
CubeDest := CubeModel.Destinations.DefaultDestination;
VSource2 := VCubeSources.Add(CubeDest);
//Fix elements in fact dimensions of source cubes
FixInfo := VSource1.FixInfo;
For Each Fix In FixInfo Do
If ((Fix.Dimension As IMetabaseObject).Id = "FACTS1") Then
Fix.Fixed := True;
Fix.Selection.SelectAll;
End If;
End For;
FixInfo := VSource2.FixInfo;
For Each Fix In FixInfo Do
If ((Fix.Dimension As IMetabaseObject).Id = "FACTS2") Then
Fix.Fixed := True;
Fix.Selection.SelectAll;
End If;
End For;
MObj.Save;
End Sub CreateViewCube;
Sub CreateVirtCube(MB: IMetabase);
Var
CrInfo: IMetabaseObjectCreateInfo;
MObj: IMetabaseObject;
VCube: IVirtualCube;
VCubeSources: IVirtualCubeSources;
CubeModel: ICubeModel;
CubeDest: ICubeModelDestination;
VSource1, VSource2: IVirtualCubeSource;
FixInfo: ICubeDimensionFixInfo;
Fix: ICubeDimensionFix;
Begin
CrInfo := MB.CreateCreateInfo();
CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_VIRTUALCUBE As Integer;
CrInfo.Id := "New_Virt_Cube";
CrInfo.Name := "New virtual cube";
CrInfo.Parent := MB.Root;
MObj := MB.CreateObject(CrInfo).Edit();
VCube := MObj As IVirtualCube;
VCubeSources := VCube.Sources;
//Add the first cube to data sources
CubeModel := Mb.ItemById["Cube_1"].Bind() As ICubeModel;
CubeDest := CubeModel.Destinations.DefaultDestination;
VSource1 := VCubeSources.Add(CubeDest);
//Add the second cube to data sources
CubeModel := Mb.ItemById["Cube_2"].Bind() As ICubeModel;
CubeDest := CubeModel.Destinations.DefaultDestination;
VSource2 := VCubeSources.Add(CubeDest);
//Fix elements in fact dimensions of source cubes
FixInfo := VSource1.FixInfo;
For Each Fix In FixInfo Do
If ((Fix.Dimension As IMetabaseObject).Id = "FACTS1") Then
Fix.Fixed := True;
Fix.Selection.SelectAll();
End If;
End For;
FixInfo := VSource2.FixInfo;
For Each Fix In FixInfo Do
If ((Fix.Dimension As IMetabaseObject).Id = "FACTS2") Then
Fix.Fixed := True;
Fix.Selection.SelectAll();
End If;
End For;
MObj.Save();
End Sub;
See also: