Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приемы работы с источником данных куба. После запуска примера выполняются следующие операции:
создается источник данных на основе описания объекта репозитория, полученного у выбранного измерения;
осуществляется получение массива измерений источника данных;
создается источник данных куба на основе описания объекта репозитория, полученного у выбранного измерения, и массива измерений;
осуществляется получение матрицы данных куба;
извлекается текстовое описание источника данных куба, а также информация об объекте, на основе которого создан источник данных куба;
осуществляется получение описания таблицы данных куба, а также извлекается информация о наименовании, первичном ключе, ключе фактов, ключе даты и ключе значений таблицы данных куба;
осуществляется получение описания таблицы фактов куба, а также извлекается информация о наименовании, первичном ключе и ключе уровня данных таблицы фактов куба;
извлекается информация о наименовании, типе, а также об идентификаторе связанного измерения для одного из полей таблицы данных и таблицы фактов куба;
создается новое поле таблицы куба.
Для выполнения примера необходимо разместить взамен метода executeExample класса ViewController (см. раздел «Анализ данных») следующий код:
-(void)executeExample {
// Получаем массив измерений куба
SNArray allDimensions = [self allDimensions];
// Получаем первое измерение куба в массиве
SPPLDimension dimension = allDimensions->objectAtIndex<PPLDimension>(0);
// Получаем описание объекта, на основе которого создано текущее измерение
SPPLMetabaseRepositoryObjectDescriptor dimensionObjectDescriptor = dimension->relatedObjectDescriptor();
// Создаем источник данных на основе описания объекта репозитория
SPPLDataSource createdDataSource = PPLDataSource::dataSource(dimensionObjectDescriptor);
// Получаем массив измерений источника данных
SNArray baseDimensions = createdDataSource->dimensions();
// Создаем источник данных куба на основе полученного описания объекта репозитория
SPPLCubeDataSource cubeDataSourse = PPLCubeDataSource::cubeDataSource(dimensionObjectDescriptor);
// Получаем текстовое описание объекта куба
SNString cubeDescription = cubeDataSourse->description();
printf("Описание куба:\n\n%s", cubeDescription->UTF8String());
// Получаем описание объекта репозитория, на основе которого создан источник данных куба
SPPLMetabaseRepositoryObjectDescriptor cubeDescriptor = cubeDataSourse->descriptor();
// Получаем наименование объекта репозитория, на основе которого создан источник данных куба
SNString cubeDescriptorName = cubeDescriptor->name();
printf("Наименование объекта репозитория, на основе которого создан источник данных куба: %s\n", cubeDescriptorName->UTF8String());
if (cubeDataSourse->dataTableInfo()) {
// Получаем справочник с описанием таблицы данных куба
SNMutableDictionary dataTableInfoDescription = cubeDataTableInfoDescription(cubeDataSourse->dataTableInfo());
// Создаём описание таблицы данных куба
SPPLCubeDataTableInfo cubeDataTableInfo = PPLCubeDataTableInfo::dataTableInfo(dataTableInfoDescription);
// Получаем наименование таблицы данных куба
SNString cubeDataTableName = cubeDataTableInfo->name();
printf("Наименование таблицы данных куба: %s\n", cubeDataTableName->UTF8String());
// Получаем первичный ключ таблицы данных куба
SNString cubeDataTablePrimaryKey = cubeDataTableInfo->primaryKey();
printf("Первичный ключ таблицы данных куба: %s\n", cubeDataTablePrimaryKey->UTF8String());
// Получаем ключ фактов таблицы данных куба
SNString cubeDataTableFactsKey = cubeDataTableInfo->factsKey();
printf("Ключ фактов таблицы данных куба: %s\n", cubeDataTableFactsKey->UTF8String());
// Получаем ключ даты таблицы данных куба
SNString cubeDataTableDateKey = cubeDataTableInfo->dateKey();
printf("Ключ даты таблицы данных куба: %s\n", cubeDataTableDateKey->UTF8String());
// Получаем ключ значений таблицы данных куба
SNString cubeDataTableValueKey = cubeDataTableInfo->valueKey();
printf("Ключ значений таблицы данных куба: %s\n", cubeDataTableValueKey->UTF8String());
// Получаем массив всех полей таблицы данных куба
SNArray cubeDataTableFields = cubeDataTableInfo->fields();
// Получаем объект последнего поля таблицы данных
SPPLCubeTableField cubeDataTableField = cubeDataTableFields->objectAtIndex<PPLCubeTableField>(cubeDataTableFields->count() - 1);
// Получаем наименование поля
SNString cubeDataTableFieldName = cubeDataTableField->name();
// Получаем тип поля
SNString cubeDataTableFieldType = cubeDataTableField->type();
printf("Поле таблицы данных:\"%s\", тип %s\n", cubeDataTableFieldName->UTF8String(), cubeDataTableFieldType->UTF8String());
// Получаем идентификатор связанного с полем измерения
SNString cubeDataTableFieldRelatedDimensionsID = cubeDataTableField->relatedDimensionsId();
// Выводим в консоль среды разработки информацию об идентификаторе связанного с полем измерения
if(cubeDataTableFieldRelatedDimensionsID != NULL) {
printf("Идентификатор измерения, связанного с полем \"%s\": %s\n", cubeDataTableFieldName->UTF8String(),
cubeDataTableFieldRelatedDimensionsID->UTF8String());
} else {
printf("Идентификатор измерения, связанного с полем \"%s\", отсутствует\n", cubeDataTableFieldName->UTF8String());
}
} else {
printf("Справочник с описанием таблицы данных куба не определён \n");
}
if (cubeDataSourse->factsTableInfo()) {
// Получаем справочник с описанием таблицы фактов куба
SNMutableDictionary facsTableInfoDescription = cubeFactsTableInfoDescription(cubeDataSourse->factsTableInfo());
// Создаём описание таблицы фактов куба
SPPLCubeFactsTableInfo cubeFactsTableInfo = PPLCubeFactsTableInfo::factsTableInfo(facsTableInfoDescription);
// Получаем наименование таблицы фактов куба
SNString cubeFactsTableName = cubeFactsTableInfo->name();
printf("Наименование таблицы фактов куба: %s\n", cubeFactsTableName->UTF8String());
// Получаем наименование первичного ключа таблицы фактов куба
SNString cubeFactsTablePrimaryKey = cubeFactsTableInfo->primaryKey();
printf("Первичный ключ таблицы фактов куба: %s\n", cubeFactsTablePrimaryKey->UTF8String());
// Получаем ключ уровня данных таблицы фактов куба
SNString cubeFactsTableDataLevelKey = cubeFactsTableInfo->dataLevelKey();
printf("Ключ уровня данных таблицы фактов куба: %s\n", cubeFactsTableDataLevelKey->UTF8String());
// Получаем массив всех полей таблицы фактов куба
SNArray cubeFactsTableFields = cubeFactsTableInfo->fields();
// Получаем объект последнего поля таблицы фактов
SPPLCubeTableField cubeFactsTableField = cubeFactsTableFields->objectAtIndex<PPLCubeTableField>(cubeFactsTableFields->count() - 1);
// Получаем наименование поля
SNString cubeFactsTableFieldName = cubeFactsTableField->name();
// Получаем тип поля
SNString cubeFactsTableFieldType = cubeFactsTableField->type();
printf("Поле таблицы фактов:\"%s\", тип %s\n", cubeFactsTableFieldName->UTF8String(), cubeFactsTableFieldType->UTF8String());
// Получаем идентификатор связанного с полем измерения
SNString cubeFactsTableFieldRelatedDimensionsID = cubeFactsTableField->relatedDimensionsId();
// Выводим в консоль среды разработки информацию об идентификаторе связанного с полем измерения
if(cubeFactsTableFieldRelatedDimensionsID != NULL) {
printf("Идентификатор измерения, связанного с полем \"%s\": %s\n", cubeFactsTableFieldName->UTF8String(),
cubeFactsTableFieldRelatedDimensionsID->UTF8String());
} else {
printf("Идентификатор измерения, связанного с полем \"%s\", отсутствует\n", cubeFactsTableFieldName->UTF8String());
}
} else {
printf("Справочник с описанием таблицы фактов куба не определён \n");
}
if (cubeDataSourse->dataTableInfo() != NULL && cubeDataSourse->dataTableInfo() != NULL) {
// Получаем отметку для измерений источника данных объекта
SPPLDimensionSelectionSet pivotSet = m_gridPivot->selectionSet();
// Получаем матрицу данных куба
SPPLDataSourceMatrix cubeMatrix = cubeDataSourse->obtainMatrix(pivotSet, baseDimensions);
if(cubeMatrix != NULL) printf("Матрица куба создана успешно\n");
else printf("Матрица куба не создана\n");
} else {
printf("Матрица куба не создана \n");
}
// Создаем справочник, в котором содержится описание нового поля таблицы куба
SNMutableDictionary fieldDescription = NMutableDictionary::mutableDictionary();
// Добавляем в справочник название поля
fieldDescription->setObjectForKey(NStr("Комментарии"), NStr("name"));
// Добавляем в справочник тип поля
fieldDescription->setObjectForKey(NStr("INTEGER"), NStr("type"));
// Создаем новое поле таблицы куба
SPPLCubeTableField field = PPLCubeTableField::tableField(fieldDescription);
// Получаем наименование нового поля
SNString tableName = field->name();
printf("Наименование нового поля таблицы куба: %s\n", tableName->UTF8String());
}
// Возвращает справочник с описанием таблицы данных куба
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);
// Получаем справочник с описанием поля таблицы куба
SNMutableDictionary fieldDictionary = cubeTableFieldDescription(field);
fieldDictionaries->addObject(fieldDictionary);
}
tableInfoDictionary->setObjectForKey(fieldDictionaries, NStr("Fields"));
}
return tableInfoDictionary;
}
// Возвращает справочник с описанием таблицы фактов куба
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);
// Получаем справочник с описанием поля таблицы куба
SNMutableDictionary fieldDictionary = cubeTableFieldDescription(field);
fieldDictionaries->addObject(fieldDictionary);
}
tableInfoDictionary->setObjectForKey(fieldDictionaries, NStr("Fields"));
}
return tableInfoDictionary;
}
// Возвращает справочник с описанием поля таблицы куба
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;
}
В результате выполнения примера в консоли среды разработки был выведен результат создания матрицы куба, информация об источнике данных куба, а также наименование созданного поля куба:
Описание куба:
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: Календарь
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
>
Наименование объекта репозитория, на основе которого создан источник данных куба: World Development Indicators
Наименование таблицы данных куба: CUBE_DATA
Первичный ключ таблицы данных куба: D_KEY
Ключ фактов таблицы данных куба: F_KEY
Ключ даты таблицы данных куба: DT
Ключ значений таблицы данных куба: VALUE
Поле таблицы данных:"VALUE", тип REAL
Идентификатор измерения, связанного с полем "VALUE", отсутствует
Наименование таблицы фактов куба: CUBE_FACTS
Первичный ключ таблицы фактов куба: F_KEY
Ключ уровня данных таблицы фактов куба: DL
Поле таблицы фактов:"DL", тип INTEGER
Идентификатор измерения, связанного с полем "DL", отсутствует
Матрица куба создана успешно
Наименование нового поля таблицы куба: Комментарии
См. также: