Creating a Virtual Cube

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.

Fore 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;

Fore.NET Example

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:

Examples