Operating system requirements: iOS 5.0 or later.
Mobile device: iPad.
This example describes some methods of working with a cube data source. After starting the example the following operations are executed:
A data source is created based on description of the repository object obtained from selected dimension.
A data source dimension array is obtained.
A cube data source is created based on description of the repository object obtained from selected dimension, and array of dimensions.
Cube data matrix is obtained.
Text description of cube data source is retrieved, and also information on the object, based on which a cube data source is created, is retrieved.
Cube data table description is retrieved, and also information on the name, primary key, fact key, date key and value key of cube data table are retrieved.
Cube fact table description is retrieved, and also information on the name, primary key and level key of cube fact table data level are retrieved.
Information on the name, type and also identifier of linked dimension is retrieved for one of the data table fields and cube fact table fields.
A new cube table field is created.
Executing the example requires to place the following code instead of the executeExample method of the ViewController class (see the Data Analysis section):
-(void)executeExample {
// Get cube dimension array
SNArray allDimensions = [self allDimensions];
// Get first cube dimension in array
SPPLDimension dimension = allDimensions->objectAtIndex<PPLDimension>(0);
// Get description of object, based on which the current dimension is created
SPPLMetabaseRepositoryObjectDescriptor dimensionObjectDescriptor = dimension->relatedObjectDescriptor();
// Create a data source based on repository object description
SPPLDataSource createdDataSource = PPLDataSource::dataSource(dimensionObjectDescriptor);
// Get array of data source dimensions
SNArray baseDimensions = createdDataSource->dimensions();
// Create a cube data source based on obtained repository object description
SPPLCubeDataSource cubeDataSourse = PPLCubeDataSource::cubeDataSource(dimensionObjectDescriptor);
// Get text description of cube object
SNString cubeDescription = cubeDataSourse->description();
printf("Cube description:\n\n%s", cubeDescription->UTF8String());
// Get description of the repository object, based on which a cube data source is created
SPPLMetabaseRepositoryObjectDescriptor cubeDescriptor = cubeDataSourse->descriptor();
// Get name of the repository object, based on which a cube data source is created
SNString cubeDescriptorName = cubeDescriptor->name();
printf("Name of the repository object, based on which a cube data source is created: %s\n", cubeDescriptorName->UTF8String());
if (cubeDataSourse->dataTableInfo()) {
// Get dictionary with cube data table description
SNMutableDictionary dataTableInfoDescription = cubeDataTableInfoDescription(cubeDataSourse->dataTableInfo());
// Create a cube data table description
SPPLCubeDataTableInfo cubeDataTableInfo = PPLCubeDataTableInfo::dataTableInfo(dataTableInfoDescription);
// Get cube data table name
SNString cubeDataTableName = cubeDataTableInfo->name();
printf("Cube data table name: %s\n", cubeDataTableName->UTF8String());
// Get primary key of cube data table
SNString cubeDataTablePrimaryKey = cubeDataTableInfo->primaryKey();
printf("Primary key of cube data table: %s\n", cubeDataTablePrimaryKey->UTF8String());
// Get cube data table fact key
SNString cubeDataTableFactsKey = cubeDataTableInfo->factsKey();
printf("Cube data table fact key: %s\n", cubeDataTableFactsKey->UTF8String());
// Get cube data table fact key
SNString cubeDataTableDateKey = cubeDataTableInfo->dateKey();
printf("Cube data table fact key: %s\n", cubeDataTableDateKey->UTF8String());
// Get cube data table value key
SNString cubeDataTableValueKey = cubeDataTableInfo->valueKey();
printf("Cube data table value key: %s\n", cubeDataTableValueKey->UTF8String());
// Get array of all cube data table fields
SNArray cubeDataTableFields = cubeDataTableInfo->fields();
// Get object of data table last field
SPPLCubeTableField cubeDataTableField = cubeDataTableFields->objectAtIndex<PPLCubeTableField>(cubeDataTableFields->count() - 1);
// Get field name
SNString cubeDataTableFieldName = cubeDataTableField->name();
// Get field type
SNString cubeDataTableFieldType = cubeDataTableField->type();
printf("Data table field:\"%s\", type %s\n", cubeDataTableFieldName->UTF8String(), cubeDataTableFieldType->UTF8String());
// Get identifier of dimension linked with field
SNString cubeDataTableFieldRelatedDimensionsID = cubeDataTableField->relatedDimensionsId();
// Display information on identifier of dimension linked with field in the development environment console
if(cubeDataTableFieldRelatedDimensionsID != NULL) {
printf("Identifier of dimension linked with field \"%s\": %s\n", cubeDataTableFieldName->UTF8String(),
cubeDataTableFieldRelatedDimensionsID->UTF8String());
} else {
printf("Identifier of dimension linked with field \"%s\", missing\n", cubeDataTableFieldName->UTF8String());
}
} else {
printf("Dictionary with description of cube data table is not defined \n");
}
if (cubeDataSourse->dataTableInfo()) {
// Get dictionary with cube fact table description
SNMutableDictionary facsTableInfoDescription = cubeFactsTableInfoDescription(cubeDataSourse->factsTableInfo());
// Create a cube fact table description
SPPLCubeFactsTableInfo cubeFactsTableInfo = PPLCubeFactsTableInfo::factsTableInfo(facsTableInfoDescription);
// Get cube fact table name
SNString cubeFactsTableName = cubeFactsTableInfo->name();
printf("Cube fact table name: %s\n", cubeFactsTableName->UTF8String());
// Get name of cube fact table primary key
SNString cubeFactsTablePrimaryKey = cubeFactsTableInfo->primaryKey();
printf("Cube fact table primary key: %s\n", cubeFactsTablePrimaryKey->UTF8String());
// Get cube fact table data level key
SNString cubeFactsTableDataLevelKey = cubeFactsTableInfo->dataLevelKey();
printf("Cube fact table data level key: %s\n", cubeFactsTableDataLevelKey->UTF8String());
// Get array of all cube fact table fields
SNArray cubeFactsTableFields = cubeFactsTableInfo->fields();
// Get object of fact table last field
SPPLCubeTableField cubeFactsTableField = cubeFactsTableFields->objectAtIndex<PPLCubeTableField>(cubeFactsTableFields->count() - 1);
// Get field name
SNString cubeFactsTableFieldName = cubeFactsTableField->name();
// Get field type
SNString cubeFactsTableFieldType = cubeFactsTableField->type();
printf("Fact table field:\"%s\", type %s\n", cubeFactsTableFieldName->UTF8String(), cubeFactsTableFieldType->UTF8String());
// Get identifier of dimension linked with field
SNString cubeFactsTableFieldRelatedDimensionsID = cubeFactsTableField->relatedDimensionsId();
// Display information on identifier of dimension linked with field in the development environment console
if(cubeFactsTableFieldRelatedDimensionsID != NULL) {
printf("Identifier of dimension linked with field \"%s\": %s\n", cubeFactsTableFieldName->UTF8String(),
cubeFactsTableFieldRelatedDimensionsID->UTF8String());
} else {
printf("Identifier of dimension linked with field \"%s\", missing\n", cubeFactsTableFieldName->UTF8String());
}
} else {
printf("Dictionary with description of cube fact table is not defined \n");
}
if (cubeDataSourse->dataTableInfo() != NULL && cubeDataSourse->dataTableInfo() != NULL) {
// Get selection for object data source dimensions
SPPLDimensionSelectionSet pivotSet = m_gridPivot->selectionSet();
// Get cube data matrix
SPPLDataSourceMatrix cubeMatrix = cubeDataSourse->obtainMatrix(pivotSet, baseDimensions);
if(cubeMatrix != NULL) printf("Cube matrix is successfully created\n");
else printf("Cube matrix is not created\n");
} else {
printf("Cube matrix is not created \n");
}
// Create a dictionary containing description of cube table new field
SNMutableDictionary fieldDescription = NMutableDictionary::mutableDictionary();
// Add field name to dictionary
fieldDescription->setObjectForKey(NStr("Comments"), NStr("name"));
// Add field type to dictionary
fieldDescription->setObjectForKey(NStr("INTEGER"), NStr("type"));
// Create a new field of cube table
SPPLCubeTableField field = PPLCubeTableField::tableField(fieldDescription);
// Get new field name
SNString tableName = field->name();
printf("Cube table new field name: %s\n", tableName->UTF8String());
}
// Returns dictionary with description of cube data table
SNMutableDictionary cubeDataTableInfoDescription (SPPLCubeDataTableInfo dataTableInfo) {
SNMutableDictionary tableInfoDictionary = NMutableDictionary::mutableDictionary();
tableInfoDictionary->setObjectForKey(dataTableInfo->name(), NStr("name"));
tableInfoDictionary->setObjectForKey(dataTableInfo->primaryKey(), NStr("primarykey"));
tableInfoDictionary->setObjectForKey(dataTableInfo->factsKey(), NStr("facts"));
tableInfoDictionary->setObjectForKey(dataTableInfo->dateKey(), NStr("date"));
tableInfoDictionary->setObjectForKey(dataTableInfo->valueKey(), NStr("value"));
if (dataTableInfo->fields() != NULL) {
SNMutableArray fieldDictionaries = NMutableArray::mutableArray();
for (int i = 0; i < dataTableInfo->fields()->count(); i++) {
SPPLCubeTableField field = dataTableInfo->fields()->objectAtIndex<PPLCubeTableField>(i);
// Get dictionary with cube table field description
SNMutableDictionary fieldDictionary = cubeTableFieldDescription(field);
fieldDictionaries->addObject(fieldDictionary);
}
tableInfoDictionary->setObjectForKey(fieldDictionaries, NStr("Fields"));
}
return tableInfoDictionary;
}
// Returns dictionary with cube fact table description
SNMutableDictionary cubeFactsTableInfoDescription (SPPLCubeFactsTableInfo cubeFactsTableInfo) {
SNMutableDictionary tableInfoDictionary = NMutableDictionary::mutableDictionary();
tableInfoDictionary->setObjectForKey(cubeFactsTableInfo->name(), NStr("name"));
tableInfoDictionary->setObjectForKey(cubeFactsTableInfo->primaryKey(), NStr("primarykey"));
tableInfoDictionary->setObjectForKey(cubeFactsTableInfo->dataLevelKey(), NStr("datalevel"));
if (cubeFactsTableInfo->fields() != NULL) {
SNMutableArray fieldDictionaries = NMutableArray::mutableArray();
for (int i = 0; i < cubeFactsTableInfo->fields()->count(); i++) {
SPPLCubeTableField field = cubeFactsTableInfo->fields()->objectAtIndex<PPLCubeTableField>(i);
// Get dictionary with cube table field description
SNMutableDictionary fieldDictionary = cubeTableFieldDescription(field);
fieldDictionaries->addObject(fieldDictionary);
}
tableInfoDictionary->setObjectForKey(fieldDictionaries, NStr("Fields"));
}
return tableInfoDictionary;
}
// Returns dictionary with cube table field description
SNMutableDictionary cubeTableFieldDescription (SPPLCubeTableField field) {
SNMutableDictionary fieldDictionary = NMutableDictionary::mutableDictionary();
fieldDictionary->setObjectForKey(field->name(), NStr("name"));
fieldDictionary->setObjectForKey(field->type(), NStr("type"));
fieldDictionary->setObjectForKey(field->relatedDimensionsId(), NStr("dim"));
return fieldDictionary;
}
After executing the example the development environment console displays result of cube matrix creation, information about cube data source, and also name of the created cube field:
Cube description:
descriptor: Object:
Key: 528
Object Id: CUBE_WORLD
Name: World Development Indicators
Type: 3
Modified date: NDate: Thu 22 Dec 2011 18:21:01
Data source ref id: NULL
Hidden NO
Size: 449612
Version: 1646670
Dependencies: NULL
dimensions: <NMutableArray:
id: CALENDAR_Y_ENG_533
name: Calendar
Elements tree:
Elements count: 11
id: CUT_REGIONS_68045
name: Regions
Elements tree:
Elements count: 173
id: FACTS_WDI_COPY_1557
name: Indicators
Elements tree:
Elements count: 3
>
Name of the repository object, based on which a cube data source is created: World Development Indicators
Cube data table name: CUBE_DATA
Cube data table primary key: D_KEY
Cube data table fact key: F_KEY
Cube data table date key: DT
Cube data table value key: VALUE
Data table field:"VALUE", type REAL
Identifier of dimension linked to the "VALUE" field is missing
Cube fact table name: CUBE_FACTS
Cube fact table primary key: F_KEY
Cube fact table data level key: DL
Fact table field:"DL", type INTEGER
Identifier of dimension linked to the "DL" field is missing
Cube matrix is successfully created
Name of cube table new field: Comments
See also: