Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приемы работы с элементами измерения источника данных. После запуска примера выполняются следующие операции:
извлекаются элементы выбранного измерения;
извлекается дерево элементов и массив ключей элементов выбранного измерения;
создаются новые элементы измерения на основе полученного дерева;
извлекается текстовое описание элементов измерения;
извлекается один из элементов измерения с помощью ключа, полученного из массива ключей элементов;
извлекаются наименование, описание, хэш-код, ключ, родительский элемент и ключ родительского элемента для выбранного элемента;
извлекается связанное измерение выбранного элемента;
извлекаются идентификатор и значение одного из атрибутов элемента с помощью наименования атрибута, полученного из массива атрибутов связанного измерения.
Для выполнения примера необходимо разместить взамен метода executeExample класса ViewController (см. раздел «Анализ данных») следующий код:
-(void)executeExample {
// Получаем массив измерений куба
SNArray allDimensions = [self allDimensions];
// Получаем в массиве измерение куба c индексом 1
SPPLDimension dimension = allDimensions->objectAtIndex<PPLDimension>(1);
// Получаем элементы текущего измерения
SPPLDimensionElements dimensionElements = dimension->elements();
// Получаем дерево элементов измерения
SPPLCommonTree dimensionElementsItemsTree = dimensionElements->itemsTree();
// Создаем новый объект элементов измерения на основе полученного дерева
SPPLDimensionElements createdElements = new PPLDimensionElements(dimensionElementsItemsTree);
// Получаем описание элементов измерения
SNString elementsDescription = createdElements->description();
printf("Описание элементов измерения:\n%s\n", elementsDescription->UTF8String());
// Получаем массив всех ключей элементов измерения
SNInt64Array elementsItemsKeys = createdElements->itemsKeys();
// Получаем ключ элемента с индексом 0
int64 elementKey = elementsItemsKeys->objectAtIndex(0);
// Получаем элемент измерения по ключу
SPPLDimensionElement baseElement = createdElements->getElementByKey(elementKey);
SPPLDimensionElement element = new PPLDimensionElement::PPLDimensionElement(dimensionElementDescription(baseElement), baseElement->relatedDimension());
// Получаем наименование выбранного элемента
printf("Элемент измерения: %s\n", baseElement->name()->UTF8String());
printf("Описание элемента:\n%s\n", baseElement->description()->UTF8String());
printf("Хэш-код элемента измерения: %d\n", baseElement->hash());
printf("Ключ элемента измерения: %lld\n", element->key());
// Получаем родительский элемент
SPPLDimensionElement parentElement = createdElements->getParentElement(element);
if(parentElement != NULL) {
printf("Родительский элемент: %s\n", parentElement->name()->UTF8String());
} else printf("Родительский элемент отсутствует\n");
// Получаем ключ родительского элемента
printf("Ключ родительского элемента: %lld\n", element->parentKey());
// Получаем связанное измерение элемента
printf("Связанное измерение: %s\n", baseElement->relatedDimension()->name()->UTF8String());
// Получаем атрибуты выбранного измерения
SPPLDimensionAttributes attributes = baseElement->relatedDimension()->attributes();
// Получаем массив атрибутов
SNArray attributesArray = attributes->items();
if (attributesArray->count() > 0) {
// Получаем атрибут с индексом 0
SPPLDimensionAttribute attribute = attributesArray->objectAtIndex<PPLDimensionAttribute>(0);
printf("Атрибут связанного измерения: %s\n", attribute->name()->UTF8String());
// Получаем идентификатор атрибута элемента по наименованию атрибута
SNID valueId = baseElement->valueByAttributeName(attribute->name());
if (valueId != NULL) {
// Получаем атрибут элемента по наименованию атрибута
NSmartPtr<NNumber> value = baseElement->valueByAttributeName<NNumber>(attribute->name());
printf("Идентификатор атрибута элемента: %s\n", valueId->description()->UTF8String());
printf("Значение атрибута элемента: %d\n", value->integerValue());
}
}
}
// Возвращает справочник с настройками указанного элемента измерения
SNDictionary dimensionElementDescription(SPPLDimensionElement element) {
SNMutableDictionary dimensionElementDescription = NMutableDictionary::mutableDictionary();
SPPLDimensionTableInfo tableInfo = element->relatedDimension()->tableInfo();
dimensionElementDescription->setObjectForKey(NNumber::numberWithLongLong(element->key()), tableInfo->primaryKey());
dimensionElementDescription->setObjectForKey(NNumber::numberWithLongLong(element->parentKey()), tableInfo->parentKey());
return dimensionElementDescription;
}
В результате выполнения примера в консоли среды разработки было выведено описание элементов измерения, информация о выбранном элементе измерения, информация о связанном измерении элемента, а также идентификатор и значения выбранного атрибута элемента:
Описание элементов измерения:
Elements count: 173
Элемент измерения: Мир
Описание элемента:
Мир ,(1, parent: 0)
Хэш-код элемента измерения: 1
Ключ элемента измерения: 1
Родительский элемент отсутствует
Ключ родительского элемента: 0
Связанное измерение: Regions
Атрибут связанного измерения: TOPO_ID
Идентификатор атрибута элемента: <NNumber:318106>
Значение атрибута элемента: 318106
См. также: