Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приемы работы с источником данных базы данных временных рядов. После запуска примера выполняются следующие операции:
выводит в консоль среды разработки количество пар «ключ-значение» в матрице данных;
создается источник данных на основе описания объекта репозитория, полученного у выбранного измерения;
осуществляется получение массива измерений источника данных;
создается источник данных базы данных временных рядов на основе описания объекта репозитория, полученного у выбранного измерения, и массива измерений;
извлекается текстовое описание источника данных базы данных временных рядов, а также информация об объекте, на основе которого создан источник данных базы данных временных рядов;
осуществляется получение описания таблицы данных для базы данных временных рядов, а также извлекается информация о наименовании, первичном ключе, ключе фактов, ключе даты и ключе значений таблицы данных для базы данных временных рядов;
осуществляется получение описания таблицы фактов базы данных временных рядов, а также извлекается информация о наименовании, первичном ключе, ключе уровня данных, ключе фактора и ключе мнемоники таблицы фактов для базы данных временных рядов;
извлекается информация о наименовании, типе, а также об идентификаторе связанного измерения для одного из полей таблицы данных и таблицы фактов базы данных временных рядов;
создается новое поле таблицы базы данных временных рядов.
Для выполнения примера необходимо, чтобы мобильное приложение открывало экспресс-отчет, использующий базу данных временных рядов. Далее разместим в теле метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») следующий код:
-(void)executeExample {
// Получаем массив измерений базы данных временных рядов, находящихся в левом заголовке
SNArray leftDimensions = m_olapReport->leftDimensions();
// Получаем первое измерение базы данных временных рядов в массиве
SPPLDimension dimension = leftDimensions->objectAtIndex<PPLDimension>(0);
// Получаем описание объекта, на основе которого создано текущее измерение
SPPLMetabaseRepositoryObjectDescriptor dimensionObjectDescriptor = dimension->relatedObjectDescriptor();
// Создаем источник данных на основе описания объекта репозитория
SPPLDataSource createdDataSource = PPLDataSource::dataSource(dimensionObjectDescriptor);
// Получаем массив измерений источника данных
SNArray baseDimensions = createdDataSource->dimensions();
// Создаем источник данных базы данных временных рядов на основе полученного описания объекта репозитория
SPPLRubricatorDataSource rubricatorDataSourse = PPLRubricatorDataSource::rubricatorDataSource(dimensionObjectDescriptor);
// Выводим в консоль среды разработки количество пар «ключ-значение» в матрице данных
[self getMatrixInfoForRubricatorDataSource: rubricatorDataSourse];
// Получаем текстовое описание объекта базы данных временных рядов
SNString rubricatorDescription = rubricatorDataSourse->description();
// Выводим в консоль среды разработки текстовое описание объекта базы данных временных рядов
printf("Описание базы данных временных рядов:\n\n%s", rubricatorDescription->UTF8String());
// Получаем описание объекта репозитория, на основе которого создан источник данных
SPPLMetabaseRepositoryObjectDescriptor rubricatorDescriptor = rubricatorDataSourse->descriptor();
// Получаем наименование объекта базы данных временных рядов
SNString rubricatorDescriptorName = rubricatorDescriptor->name();
/* Выводим в консоль среды разработки наименование объекта репозитория,
на основе которого создан источник данных для базы данных временных рядов */
printf("Наименование объекта репозитория, на основе которого создан источник данных для базы данных временных рядов: %s\n",
rubricatorDescriptorName->UTF8String());
// Получаем описание таблицы данных для базы данных временных рядов
SPPLRubricatorDataTableInfo rubricatorDataTableInfo = PPLRubricatorDataTableInfo::dataTableInfo([self getDescriptionForRubricatorDataTableInfo: (rubricatorDataSourse->dataTableInfo())]);
// Получаем наименование таблицы данных для базы данных временных рядов
SNString rubricatorDataTableName = rubricatorDataTableInfo->name();
// Выводим в консоль среды разработки наименование таблицы данных для базы данных временных рядов
printf("Наименование таблицы данных для базы данных временных рядов: %s\n", rubricatorDataTableName->UTF8String());
// Получаем первичный ключ таблицы данных для базы данных временных рядов
SNString rubricatorDataTablePrimaryKey = rubricatorDataTableInfo->primaryKey();
// Выводим в консоль среды разработки первичный ключ таблицы данных для базы данных временных рядов
printf("Первичный ключ таблицы данных для базы данных временных рядов: %s\n", rubricatorDataTablePrimaryKey->UTF8String());
// Получаем ключ фактов таблицы данных для базы данных временных рядов
SNString rubricatorDataTableFactsKey = rubricatorDataTableInfo->factsKey();
// Выводим в консоль среды разработки ключ фактов таблицы данных для базы данных временных рядов
printf("Ключ фактов таблицы данных для базы данных временных рядов: %s\n", rubricatorDataTableFactsKey->UTF8String());
// Получаем ключ даты таблицы данных для базы данных временных рядов
SNString rubricatorDataTableDateKey = rubricatorDataTableInfo->dateKey();
if (rubricatorDataTableDateKey != NULL) {
// Выводим в консоль среды разработки ключ даты таблицы данных для базы данных временных рядов
printf("Ключ даты таблицы данных для базы данных временных рядов: %s\n", rubricatorDataTableDateKey->UTF8String());
} else {
printf("Ключ даты таблицы даннных для базы данных временных рядов не доступен");
}
// Получаем ключ значений таблицы данных для базы данных временных рядов
SNString rubricatorDataTableValueKey = rubricatorDataTableInfo->valueKey();
// Выводим в консоль среды разработки ключ значений таблицы данных для базы данных временных рядов
printf("Ключ значений таблицы данных для базы данных временных рядов: %s\n", rubricatorDataTableValueKey->UTF8String());
// Получаем массив всех полей таблицы данных для базы данных временных рядов
SNArray rubricatorDataTableFields = rubricatorDataTableInfo->fields();
// Получаем объект последнего поля таблицы данных
SPPLRubricatorTableField rubricatorDataTableField = rubricatorDataTableFields->objectAtIndex<PPLRubricatorTableField>(rubricatorDataTableFields->count() - 1);
// Получаем наименование поля
SNString rubricatorDataTableFieldName = rubricatorDataTableField->name();
// Получаем тип поля
SNString rubricatorDataTableFieldType = rubricatorDataTableField->type();
// Выводим в консоль среды разработки наименование и тип поля
printf("Поле таблицы данных:\"%s\", тип %s\n", rubricatorDataTableFieldName->UTF8String(), rubricatorDataTableFieldType->UTF8String());
// Получаем идентификатор связанного с полем измерения
SNString rubricatorDataTableFieldRelatedDimensionsID = rubricatorDataTableField->relatedDimensionsId();
// Выводим в консоль среды разработки информацию об идентификаторе связанного с полем измерения
if(rubricatorDataTableFieldRelatedDimensionsID != NULL) {
printf("Идентификатор измерения, связанного с полем \"%s\": %s\n",
rubricatorDataTableFieldName->UTF8String(),
rubricatorDataTableFieldRelatedDimensionsID->UTF8String());
} else {
printf("Идентификатор измерения, связанного с полем \"%s\", отсутствует\n",
rubricatorDataTableFieldName->UTF8String());
}
// Получаем описание таблицы фактов базы данных временных рядов
SPPLRubricatorFactsTableInfo rubricatorFactsTableInfo = PPLRubricatorFactsTableInfo::factsTableInfo([self getDescriptionForRubricatorFactsTableInfo:(rubricatorDataSourse->factsTableInfo())]);
// Получаем наименование таблицы фактов базы данных временных рядов
SNString rubricatorFactsTableName = rubricatorFactsTableInfo->name();
// Выводим в консоль среды разработки наименование таблицы фактов базы данных временных рядов
printf("Наименование таблицы фактов базы данных временных рядов: %s\n", rubricatorFactsTableName->UTF8String());
// Получаем наименование первичного ключа таблицы фактов базы данных временных рядов
SNString rubricatorFactsTablePrimaryKey = rubricatorFactsTableInfo->primaryKey();
// Выводим в консоль среды разработки первичный ключ таблицы фактов базы данных временных рядов
printf("Первичный ключ таблицы фактов базы данных временных рядов: %s\n", rubricatorFactsTablePrimaryKey->UTF8String());
// Получаем ключ уровня данных таблицы фактов базы данных временных рядов
SNString rubricatorFactsTableDataLevelKey = rubricatorFactsTableInfo->dataLevelKey();
// Выводим в консоль среды разработки ключ уровня данных таблицы фактов базы данных временных рядов
printf("Ключ уровня данных таблицы фактов базы данных временных рядов: %s\n", rubricatorFactsTableDataLevelKey->UTF8String());
// Получаем ключ фактора таблицы фактов базы данных временных рядов
SNString rubricatorFactsTableFactorKey = rubricatorFactsTableInfo->factorKey();
// Выводим в консоль среды разработки ключ фактора таблицы фактов базы данных временных рядов
printf("Ключ фактора таблицы фактов базы данных временных рядов: %s\n", rubricatorFactsTableFactorKey->UTF8String());
// Получаем ключ мнемоники таблицы фактов базы данных временных рядов
SNString rubricatorFactsTableMnemoKey = rubricatorFactsTableInfo->mnemo();
// Выводим в консоль среды разработки ключ мнемоники таблицы фактов базы данных временных рядов
printf("Ключ мнемоники таблицы фактов базы данных временных рядов: %s\n", rubricatorFactsTableMnemoKey->UTF8String());
// Получаем массив всех полей таблицы фактов базы данных временных рядов
SNArray rubricatorFactsTableFields = rubricatorFactsTableInfo->fields();
// Получаем объект последнего поля таблицы фактов
SPPLRubricatorTableField rubricatorFactsTableField = rubricatorFactsTableFields->objectAtIndex<PPLRubricatorTableField>(rubricatorFactsTableFields->count() - 1);
// Получаем наименование поля
SNString rubricatorFactsTableFieldName = rubricatorFactsTableField->name();
// Получаем тип поля
SNString rubricatorFactsTableFieldType = rubricatorFactsTableField->type();
// Выводим в консоль среды разработки наименование и тип поля
printf("Поле таблицы фактов:\"%s\", тип %s\n", rubricatorFactsTableFieldName->UTF8String(), rubricatorFactsTableFieldType->UTF8String());
// Получаем идентификатор связанного с полем измерения
SNString rubricatorFactsTableFieldRelatedDimensionsID = rubricatorFactsTableField->relatedDimensionsId();
// Выводим в консоль среды разработки информацию об идентификаторе связанного с полем измерения
if(rubricatorFactsTableFieldRelatedDimensionsID != NULL) {
printf("Идентификатор измерения, связанного с полем \"%s\": %s\n", rubricatorFactsTableFieldName->UTF8String(),
rubricatorFactsTableFieldRelatedDimensionsID->UTF8String());
} else {
printf("Идентификатор измерения, связанного с полем \"%s\", отсутствует\n", rubricatorFactsTableFieldName->UTF8String());
}
// Создаем справочник, в котором содержится описание нового поля таблицы базы данных временных рядов
SNMutableDictionary fieldDescription = NMutableDictionary::mutableDictionary();
// Добавляем в справочник название поля
fieldDescription->setObjectForKey(NStr("Комментарии"), NStr("name"));
// Добавляем в справочник тип поля
fieldDescription->setObjectForKey(NStr("INTEGER"), NStr("type"));
// Создаем новое поле таблицы базы данных временных рядов
SPPLRubricatorTableField field = PPLRubricatorTableField::tableField(fieldDescription);
// Получаем наименование нового поля
SNString tableName = field->name();
// Выводим в консоль среды разработки наименование нового поля
printf("Наименование нового поля таблицы базы данных временных рядов: %s\n", tableName->UTF8String());
}
// Возвращает справочник с настройками таблицы данных для базы данных временных рядов
-(SNDictionary)getDescriptionForRubricatorDataTableInfo: (SPPLRubricatorDataTableInfo) rubricatorInfo {
SNMutableDictionary description = NMutableDictionary::mutableDictionary();
description->setObjectForKey(rubricatorInfo->name(), NStr("name"));
description->setObjectForKey(rubricatorInfo->primaryKey(), NStr("primarykey"));
description->setObjectForKey(rubricatorInfo->factsKey(), NStr("facts"));
description->setObjectForKey(rubricatorInfo->dateKey(), NStr("data"));
description->setObjectForKey(rubricatorInfo->valueKey(), NStr("value"));
SNMutableArray fieldDescriptions = NMutableArray::mutableArray();
for (int i = 0; i < rubricatorInfo->fields()->count(); i++) {
SPPLRubricatorTableField field = rubricatorInfo->fields()->objectAtIndex<PPLRubricatorTableField>(i);
fieldDescriptions->addObject([self getDescriptionForRubricatorTableField: field]);
}
description->setObjectForKey(fieldDescriptions, NStr("Fields"));
return description;
}
// Возвращает справочник с настройками таблицы фактов базы данных временных рядов
-(SNDictionary)getDescriptionForRubricatorFactsTableInfo: (SPPLRubricatorFactsTableInfo) rubricatorInfo {
SNMutableDictionary description = NMutableDictionary::mutableDictionary();
description->setObjectForKey(rubricatorInfo->name(), NStr("name"));
description->setObjectForKey(rubricatorInfo->primaryKey(), NStr("primarykey"));
description->setObjectForKey(rubricatorInfo->dataLevelKey(), NStr("datalevel"));
description->setObjectForKey(rubricatorInfo->factorKey(), NStr("factor"));
description->setObjectForKey(rubricatorInfo->mnemo(), NStr("mnemo"));
SNMutableArray fieldDescriptions = NMutableArray::mutableArray();
for (int i = 0; i < rubricatorInfo->fields()->count(); i++) {
SPPLRubricatorTableField field = rubricatorInfo->fields()->objectAtIndex<PPLRubricatorTableField>(i);
fieldDescriptions->addObject([self getDescriptionForRubricatorTableField: field]);
}
description->setObjectForKey(fieldDescriptions, NStr("Fields"));
return description;
}
// Возвращает справочник с настройками поля таблицы
-(SNDictionary)getDescriptionForRubricatorTableField: (SPPLRubricatorTableField) rubricatorField {
SNMutableDictionary description = NMutableDictionary::mutableDictionary();
description->setObjectForKey(rubricatorField->name(), NStr("name"));
description->setObjectForKey(rubricatorField->type(), NStr("type"));
description->setObjectForKey(rubricatorField->relatedDimensionsId(), NStr("dim"));
return description;
}
-(void)getMatrixInfoForRubricatorDataSource: (SPPLRubricatorDataSource) rubricatorDataSource {
// Получаем матрицу данных по отметке и измерениям
SPPLDataSourceMatrix matrix = rubricatorDataSource->obtainMatrix(m_olapReport->selectionSet(), [self allDimensions]);
printf("Количество пар «ключ-значение» в матрице данных: %d\n", matrix->dataCount());
}
В результате выполнения примера в консоли среды разработки было выведено количество пар «ключ-значение» в матрице данных, информация об источнике данных для базы данных временных рядов, а также наименование созданного поля таблицы базы данных временных рядов:
Количество пар «ключ-значение» в матрице данных:
545
Описание базы данных временных рядов:
descriptor: Object:
Key: 112
Object Id: TSDB_WORLD
Name: World Development Indicators
Type: 4
Modified date: NDate: Wed 28 Dec 2011 18:11:09
Data source ref id: NULL
Hidden NO
Size: 427962
Version: 1688197
Dependencies: e9b5a4b9818bd9f9a4ebf63bb27405c3
dimensions: <NMutableArray:
id: CALENDAR_119
name: Calendar
Elements tree:
Elements count: 30
id: FACTS_WDI_COPY_1557
name: Indicators
Elements tree:
Elements count: 3
id: CUT_REGIONS_68045
name: Regions
Elements tree:
Elements count: 4
id: CDW_MEASURES_COPY_1559
name: Measures
Elements tree:
Elements count: 208
id: UNITS_123
name: Units
Elements tree:
Elements count: 478
>
Наименование объекта репозитория, на основе которого создан источник данных для базы данных временных рядов: World Development Indicators
Наименование таблицы данных для базы данных временных рядов: RUB_DATA
Первичный ключ таблицы данных для базы данных временных рядов: D_KEY
Ключ фактов таблицы данных для базы данных временных рядов: F_KEY
Ключ даты таблицы данных для базы данных временных рядов: DT
Ключ значений таблицы данных для базы данных временных рядов: VALUE
Поле таблицы данных:"VALUE", тип REAL
Идентификатор измерения, связанного с полем "VALUE", отсутствует
Наименование таблицы фактов базы данных временных рядов: RUB_FACTS
Первичный ключ таблицы фактов базы данных временных рядов: F_KEY
Ключ уровня данных таблицы фактов базы данных временных рядов: DL
Ключ фактора таблицы фактов базы данных временных рядов: FACTOR
Ключ мнемоники таблицы фактов базы данных временных рядов: MNEMO
Поле таблицы фактов:"DL", тип INTEGER
Идентификатор измерения, связанного с полем "DL", отсутствует
Наименование нового поля таблицы базы данных временных рядов: Комментарии
См. также: