Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приемы работы с отметкой элементов измерения источника данных. После запуска примера выполняются следующие операции:
извлекается контейнер отметок элементов измерения источника данных;
извлекается описание контейнера и количество отметок элементов измерения в контейнере;
создается копия контейнера отметок;
создается справочник с настройками контейнера отметок;
извлекается отметка измерения из контейнера с помощью ключа измерения;
извлекается массив ключей выделенных элементов для полученной отметки;
извлекается отметка измерения с помощью индекса в контейнере отметок;
извлекается массив выделенных элементов для полученной отметки;
создается копия первой отметки;
извлекается измерение, для которого хранится полученная отметка;
для одного из элементов измерения проверяется признак того, что элемент является выделенным;
создается новый контейнер отметок на основе существующего контейнера;
удаляется одна из отметок нового контейнера;
создается новая отметка на основе полученного измерения источника данных;
осуществляется выделение и снятие выделения элементов новой отметки различными способами.
Для выполнения примера необходимо разместить взамен метода executeExample класса ViewController (см. раздел «Анализ данных») следующий код:
// Получаем контейнер отметок элементов измерения источника данных
SPPLDimensionSelectionSet pivotSet = m_olapReport->selectionSet();
// Получаем описание контейнера отметок элементов измерения
SNString selectionSetDescription = pivotSet->description();
printf("Описание контейнера отметок элементов измерения:\n%s\n", selectionSetDescription->UTF8String());
// Получаем количество отметок элементов измерения
int selectionsCount = pivotSet->selectionsCount();
printf("Количество отметок элементов измерения: %d\n", selectionsCount);
// Получаем копию контейнера отметок
SNID copiedSelectionSetObject = pivotSet->copy();
// Получаем объект контейнера из копии
SPPLDimensionSelectionSet copiedSelectionSet = copiedSelectionSetObject->qClass<PPLDimensionSelectionSet>();
// Получаем справочник с настройками из копии контейнера отметок
SNDictionary plist = copiedSelectionSet->generatePlist()->qClass<NDictionary>();
printf("Количество элементов справочника настроек: %d\n", plist->count());
// Получаем массив измерений куба
SNArray allDimensions = [self allDimensions];
if (allDimensions->count() < 1) {
printf("Не найдено ни одного измерения");
return;
}
// Получаем в массиве первое измерение куба
SPPLDimension dimension = allDimensions->objectAtIndex<PPLDimension>(0);
// Получаем первую отметку с помощью ключа выбранного измерения
SPPLDimensionSelection selection = pivotSet->getSelectionByDimensionKey(dimension->key());
// Получаем массив ключей отмеченных элементов первой отметки
SNInt64Array keys = selection->selectedKeys();
printf("Количество ключей первой отметки: %d\n", keys->count());
// Получаем отметку по индексу в контейнере отметок
SPPLDimensionSelection selection2 = pivotSet->getSelectionByIndex(1);
// Получаем массив выделенных элементов второй отметки
SNArray elements = selection2->selectedElements();
printf("Количество выделенных элементов второй отметки: %d\n", elements->count());
// Получаем копию первой отметки
SPPLDimensionSelection selectionCopy = selection->copy()->qClass<PPLDimensionSelection>();
// Получаем измерение, для которого хранится отметка, из копии первой отметки
SPPLDimension selectionDimension = selectionCopy->dimension();
printf("Наименование измерения, для которого хранится первая отметка: %s\n", selectionDimension->name()->UTF8String());
// Получаем ключ первого элемента из массива ключей первой отметки
int64 elementKey = keys->objectAtIndex(0);
// Получаем элемент по ключу и проверяем, является ли этот элемент выделенным
bool isSelected = selection->isElementSelected(elementKey);
// Выводим в консоль среды разработки сообщение о результате проверки
if(isSelected) printf("Элемент первого измерения с ключом %lld является выделенным\n", elementKey);
else printf("Элемент первого измерения с ключом %lld не является выделенным\n", elementKey);
// Создаем новый контейнер отметок
SPPLDimensionSelectionSet createdSelectionSet = new PPLDimensionSelectionSet();
// Заполняем в цикле новый контейнер
for(int i = 0; i < pivotSet->selectionsCount(); i++) {
// Получаем измерение по индексу
SPPLDimension currentDimension = allDimensions->objectAtIndex<PPLDimension>(i);
// Получаем отметку из существующего контейнера по идентификатору измерения, для которого хранится отметка
SPPLDimensionSelection currentSelection = pivotSet->getSelectionByDimensionId(currentDimension->id());
// Добавляем отметку в новый контейнер
createdSelectionSet->addSelection(currentSelection, currentDimension->id());
}
// Получаем количество элементов нового контейнера
int createdSelectionSetCount = createdSelectionSet->selectionsCount();
printf("Количество элементов нового контейнера: %d\n", createdSelectionSetCount);
// Удаляем из нового контейнера отметку для первого измерения
createdSelectionSet->removeSelection(dimension->id());
// Получаем количество элементов нового контейнера после удаления отметки
createdSelectionSetCount = createdSelectionSet->selectionsCount();
printf("Количество элементов нового контейнера после удаления отметки: %d\n", createdSelectionSetCount);
// Получаем второе измерение куба
SPPLDimension dimension2 = allDimensions->objectAtIndex<PPLDimension>(1);
// Создаем новую отметку для полученного измерения
SPPLDimensionSelection createdSelection = new PPLDimensionSelection(dimension2);
// Получаем наименование измерения, на основе которого создана отметка
SNString dimensionName = createdSelection->dimension()->name();
printf("Наименование измерения, на основе которого создана новая отметка: %s\n", dimensionName->UTF8String());
printf("Идентификатор измерения: %s\n", createdSelection->description()->UTF8String());
// Выделяем все элементы новой отметки
createdSelection->selectAll();
printf("Выделение всех элементов новой отметки\n");
printf("Количество элементов новой отметки: %d\n", createdSelection->selectedElements()->count());
// Снимаем выделение всех элементов новой отметки
createdSelection->deselectAll();
printf("Снятие выделения всех элементов новой отметки\n");
printf("Количество элементов новой отметки: %d\n", createdSelection->selectedElements()->count());
// Получаем массив всех ключей элементов второго измерения
SNInt64Array itemsKeys = dimension2->elements()->itemsKeys();
// Получаем ключ последнего элемента второго измерения
int64 key = itemsKeys->objectAtIndex(itemsKeys->count() - 1);
// Выделяем последний элемент второго измерения
createdSelection->select(key);
printf("Выделение последнего элемента новой отметки\n");
printf("Количество элементов новой отметки: %d\n", createdSelection->selectedElements()->count());
// Снимаем выделение последнего элемента второго измерения
createdSelection->deselect(key);
printf("Снятие выделения последнего элемента новой отметки\n");
printf("Количество элементов новой отметки: %d\n", createdSelection->selectedElements()->count());
// Удаляем из массива ключей последний объект
itemsKeys->removeObjectAtIndex(itemsKeys->count() - 1);
// Выделяем все элементы по массиву ключей
createdSelection->selectAll(itemsKeys);
printf("Выделение всех элементов в массиве ключей\n");
printf("Количество элементов новой отметки: %d\n", createdSelection->selectedElements()->count());
// Удаляем из массива ключей последний объект
itemsKeys->removeObjectAtIndex(itemsKeys->count() - 1);
// Снимаем выделение всех элементов по массиву ключей
createdSelection->deselectAll(itemsKeys);
printf("Снятие выделения всех элементов в измененном массиве ключей\n");
printf("Количество элементов новой отметки: %d\n", createdSelection->selectedElements()->count());
В результате выполнения примера в консоли среды разработки была выведена информация о полученном и созданном контейнерах отметок элементов измерения источника данных, информация об отметках, извлеченных из этих контейнеров, наименование измерения, на основе которого была создана новая отметка, а также результаты выполнения операций по снятию и выделению элементов отметки:
Описание контейнера отметок элементов измерения:
Selections count: 3
[CUT_REGIONS_68045]
[FACTS_WDI_COPY_1557]
[CALENDAR_Y_ENG_533]
Количество отметок элементов измерения: 3
Количество элементов справочника настроек: 3
Количество ключей первой отметки: 6
Количество выделенных элементов второй отметки: 1
Наименование измерения, для которого хранится первая отметка: Календарь
Элемент первого измерения с ключом 16 является выделенным
Количество элементов нового контейнера: 3
Количество элементов нового контейнера после удаления отметки: 2
Наименование измерения, на основе которого создана
новая отметка: Regions
Идентификатор измерения: [D_TO_105]
Выделение всех элементов новой отметки
Количество элементов новой отметки: 8
Снятие выделения всех элементов новой отметки
Количество элементов новой отметки: 0
Выделение последнего элемента новой отметки
Количество элементов новой отметки: 1
Снятие выделения последнего элемента новой отметки
Количество элементов новой отметки: 0
Выделение всех элементов в массиве ключей
Количество элементов новой отметки: 7
Снятие выделения всех элементов в измененном массиве ключей
Количество элементов новой отметки: 1
См. также: