Работа с элементами измерения

Требования к операционной системе: 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

См. также:

Примеры использования библиотеки pplib++