Hi Fleaster,
I have a process that loads data from csv into multiple cubes with varying dimensions - you can load data to different cubes within the same source file.
The source file fields are as follows:
Cube - string - name of the cube to be loaded
Type - string - either 'string' or 'numeric' depending on the row to be loaded
String - string - if Type = 'string', the string data to be loaded
Numeric - numeric - if Type = 'numeric', the numeric data to be loaded
Dimension_1 - string - element reference for dimension 1 in the cube
Dimension_2 - string - element reference for dimension 2 in the cube
...
Dimension_12 - string - element reference for dimension 12 in the cube
So if I was loading data to a reporting_cube with 5 dimensions, the source file row might be:
reporting_cube, numeric, , 100, AAA, BBB, CCC, DDD, EEE, , , , , , ,
reporting_cube, string, comment, , AAA, BBB, CCC, DDD, EEE, , , , , , ,
My data tab is something like the below:
Code: Select all
# Check if cube exists
# ================
If( CubeExists( vsCubeName) = 0);
ItemReject( 'Cube: ' | vsCubeName | ' does not exist');
ProcessError;
EndIf;
# Skip data that can't be written - this is to avoid throwing an error when updating the abbreviations for unmapped divisions.
# ========================================================================================================
vnCounter = 1;
vsElement = EXPAND( '%' | 'vsDimension_' | NumberToString(vnCounter) | '%');
While( vsElement @<> '');
vsDim = TABDIM( vsCubeName, vnCounter);
If( DIMIX( vsDim, vsElement) = 0);
# TextOutput( 'debug_data.txt', vsElement | ' missing from ' | vsDim);
ItemSkip;
EndIf;
vnCounter = vnCounter + 1;
vsElement = EXPAND( '%' | 'vsDimension_' | NumberToString(vnCounter) | '%');
End;
# Populate numeric and string static data
# ===============================
If(vsType @= 'string');
If(vsDimension_10 @<> '');
CellPutS( vsString, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4, vsDimension_5, vsDimension_6, vsDimension_7, vsDimension_8, vsDimension_9, vsDimension_10);
ElseIf( vsDimension_9 @<> '');
CellPutS( vsString, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4, vsDimension_5, vsDimension_6, vsDimension_7, vsDimension_8, vsDimension_9);
ElseIf( vsDimension_8 @<> '');
CellPutS( vsString, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4, vsDimension_5, vsDimension_6, vsDimension_7, vsDimension_8);
ElseIf( vsDimension_7 @<> '');
CellPutS( vsString, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4, vsDimension_5, vsDimension_6, vsDimension_7);
ElseIf(vsDimension_6 @<> '');
CellPutS( vsString, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4, vsDimension_5, vsDimension_6);
ElseIf(vsDimension_5 @<> '');
CellPutS( vsString, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4, vsDimension_5);
ElseIf(vsDimension_4 @<> '');
CellPutS( vsString, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4);
ElseIf(vsDimension_3 @<> '');
CellPutS( vsString, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3);
ElseIf(vsDimension_2 @<> '');
CellPutS( vsString, vsCubeName, vsDimension_1, vsDimension_2);
Else;
ItemReject('Cube: ' | vsCubeName | ' needs to have at least 2 vsDimensions defined');
ProcessError;
EndIf;
ElseIf(vsType @= 'numeric');
If(vsDimension_10 @<> '');
CellPutN( vnNumeric, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4, vsDimension_5, vsDimension_6, vsDimension_7, vsDimension_8, vsDimension_9, vsDimension_10);
ElseIf(vsDimension_9 @<> '');
CellPutN( vnNumeric, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4, vsDimension_5, vsDimension_6, vsDimension_7, vsDimension_8, vsDimension_9);
ElseIf(vsDimension_8 @<> '');
CellPutN( vnNumeric, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4, vsDimension_5, vsDimension_6, vsDimension_7, vsDimension_8);
ElseIf(vsDimension_7 @<> '');
CellPutN( vnNumeric, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3,vsDimension_4, vsDimension_5, vsDimension_6, vsDimension_7);
ElseIf(vsDimension_6 @<> '');
CellPutN( vnNumeric, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4, vsDimension_5, vsDimension_6);
ElseIf(vsDimension_5 @<> '');
CellPutN( vnNumeric, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4, vsDimension_5);
ElseIf(vsDimension_4 @<> '');
CellPutN( vnNumeric, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3, vsDimension_4);
ElseIf(vsDimension_3 @<> '');
CellPutN( vnNumeric, vsCubeName, vsDimension_1, vsDimension_2, vsDimension_3);
ElseIf(vsDimension_2 @<> '');
CellPutN( vnNumeric, vsCubeName, vsDimension_1, vsDimension_2);
Else;
ItemReject('Cube: ' | vsCubeName | ' needs to have at least 2 vsDimensions defined');
ProcessError;
EndIf;
Else;
ItemReject('Incorrect data type: ' | vsType);
ProcessError;
EndIf;
Thanks,
Dan