Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере демонстрируется работа с итоговыми элементами заголовков таблицы. После запуска примера выполняются следующие операции:
возвращается верхний заголовок таблицы и его элементы;
создаются и удаляются настройки вычисляемых рядов;
создаётся новый элемент и проверяется, является ли он вычисляемым;
создаётся новый итоговый элемент и проверяется, принадлежит ли он верхнему заголовку;
определяется, какие элементы верхнего заголовка являются итоговыми;
возвращается дерево элементов для первого измерения заголовка таблицы, подсчитывается их количество, и определяется первая корневая вершина данного дерева;
выводятся в консоль среды разработки описания элементов заголовка таблицы, отсортированных по убыванию.
Под итоговым элементом заголовка таблицы подразумевается элемент, соответствующий ячейке на пересечении столбца-заголовка и строки, содержащей итоговые данные, и наоборот.
В базовый пример «Анализ данных» необходимо добавить следующий файл:
SortElementsManager.h. Класс для сортировки вершин дерева элементов таблицы.
Для выполнения примера необходимо создать класс, содержащий метод для сортировки вершин дерева элементов таблицы, а также добавить заголовочный файл класса в исходный код класса ViewController (см. раздел «Анализ данных»). Далее необходимо разместить в теле метода executeExample класса ViewController следующий код:
-(void)executeExample {
// Получаем верхний заголовок таблицы
SPPLPivotTableHeader topPivotHeader = m_gridPivotTable->topHeader();
// Выводим информацию о вычисляемом элементе заголовка
[self printCalculatedElementInfo: topPivotHeader->elements() forHeaderElementWithIndex: 0];
// Выводим информацию об итоговом элементе заголовка
[self printTotalsElementsInfo: topPivotHeader->elements()];
if (topPivotHeader->dimensions() > 0) {
// Выводим информацию о вершинах дерева элементов для измерения с указанным индексом
[self printTreeNodesInfo: topPivotHeader ForDimensionWithIndex: 0];
// Выводим описания элементов заголовка, отсортированных по убыванию
[self printSortedHeaderElementsDescriptions: topPivotHeader->elements()];
}
}
// Выводит информацию о вычисляемых элементах заголовка
-(void)printCalculatedElementInfo: (SPPLPivotTableHeaderElements) pivotHeaderElements
forHeaderElementWithIndex: (int) elemIndex {
if (pivotHeaderElements->elementsCount() > 0) {
// Получаем элемент заголовка таблицы по индексу
SPPLPivotTableHeaderElement parentElement = pivotHeaderElements->getElementByIndex(elemIndex);
SPPLPivotTableCalculatorSetting calculatorSetting = new PPLPivotTableCalculatorSetting();
// Создаём вычисляемый элемент на базе полученного элемента заголовка таблицы
SPPLPivotTableHeaderElement calculatedElement = pivotHeaderElements->createCalculatedElement(parentElement, [self getCalculatorSetting]);
// Проверяем, является ли элемент вычисляемым
if (pivotHeaderElements->isElementCalculated(calculatedElement)) {
printf("Элемент с индексом %d является вычисляемым\n", pivotHeaderElements->getIndexOfElement(calculatedElement));
} else {
printf("Новый элемент не является вычисляемым\n");
}
}
}
// Возвращает настройки вычисляемого элемента
-(SPPLPivotTableCalculatorSetting)getCalculatorSetting {
// Создаём контейнер настроек вычисляемых рядов таблицы данных
SPPLPivotTableCalculatorSettings calculatorSettings = new PPLPivotTableCalculatorSettings();
// Добавляем новые настройки
calculatorSettings->addSetting(new PPLPivotTableCalculatorSetting());
calculatorSettings->addSetting(new PPLPivotTableCalculatorSetting());
calculatorSettings->addSetting(new PPLPivotTableCalculatorSetting());
printf("Исходное количество настроек вычисляемых рядов: %d\n", calculatorSettings->settingsCount());
// Оставляем только последнюю настройку
for (int i = 0; i < calculatorSettings->settingsCount(); i++) {
calculatorSettings->removeSetting(calculatorSettings->setting(i));
}
printf("Полученное количество настроек вычисляемых рядов: %d\n", calculatorSettings->settingsCount());
if (calculatorSettings->settingsCount() > 0) {
return calculatorSettings->setting(0);
} else {
return NULL;
}
}
// Выводит информацию об итоговом элементеы заголовка
-(void)printTotalsElementsInfo: (SPPLPivotTableHeaderElements) pivotHeaderElements {
// Получаем все измерения
SNArray dimensions = [self allDimensions];
// Создаём новый элемент итогов
SPPLPivotTableHeaderElement totalsElement =
pivotHeaderElements->createTotalsElement(dimensions, NULL, PPLPivotTableTotalsTypes::kSum);
// Проверяем, принадлежит ли созданный элемент текущему заголовку
if (pivotHeaderElements->checkMembership(totalsElement)) {
int currentIndex = pivotHeaderElements->getIndexOfElement(totalsElement);
printf("Итоговый элемент принадлежит верхнему заголовку и имеет индекс %d \n", currentIndex);
} else {
printf("Новый итоговый элемент не принадлежит текущему заголовку \n");
}
for (int i = 0; i < pivotHeaderElements->elementsCount(); i++) {
SPPLPivotTableHeaderElement element = pivotHeaderElements->getElementByIndex(i);
// Проверяем, является ли элемент заголовка итоговым
if (pivotHeaderElements->isElementInTotals(element)) {
printf("Элемент заголовка с индексом %d является итоговым \n", i);
}
}
}
// Выводит информацию о вершинах дерева элементов для измерения с указанным индексом
-(void)printTreeNodesInfo: (SPPLPivotTableHeader) pivotTableHeader
ForDimensionWithIndex: (int) dimIndex {
// Получаем первое измерение заголовка таблицы
SPPLDimension dimension = pivotTableHeader->dimensions()->objectAtIndex<PPLDimension>(dimIndex);
// Получаем дерево отмеченных элементов заголовка для данного измерения
SPPLCommonTree tree = pivotTableHeader->elements()->getSelectedElementsTreeForDimension(dimension);
printf("Количество вершин в дереве элементов для измерения %s: %d \n", dimension->name()->UTF8String(), tree->count());
if (tree->count() > 0) {
SPPLCommonTreeNode rootNode = tree->rootNodes()->objectAtIndex<PPLCommonTreeNode>(0);
printf("Первая корневая вершина дерева: %s \n", rootNode->description()->UTF8String());
}
}
// Выводит описания элементов заголовка, отсортированных по убыванию
-(void)printSortedHeaderElementsDescriptions: (SPPLPivotTableHeaderElements) pivotHeaderElements {
if (pivotHeaderElements->elementsCount() > 0) {
// Отсортируем элементы заголовка
SortElementsManager *sort = new SortElementsManager();
SNArraySortSelector sortSelector = new NSpecificSelectorMethod2Returns<SortElementsManager, NID, NID, NComparisonResult>(sort, &SortElementsManager::sortSelector);
pivotHeaderElements->sortElementsUsingSelector(sortSelector);
// Выведем в консоль среды разработки вершины дерева
printf("Описания элементов заголовка, отсортированных по убыванию:\n");
for (int i = 0; i < pivotHeaderElements->elementsCount(); i++) {
printf("%s \n", pivotHeaderElements->getElementByIndex(i)->description()->UTF8String());
}
}
}
В результате выполнения примера в консоли среды разработки были выведены индексы всех вычисляемых и итоговых элементов верхнего заголовка таблицы, количество вершин в дереве элементов для первого измерения заголовка, описание первой корневой вершины и описания отсортированных по убыванию элементов заголовка:
Исходное количество настроек вычисляемых рядов:
3
Полученное количество настроек вычисляемых рядов: 1
Элемент с индексом 1 является вычисляемым
Итоговый элемент принадлежит верхнему заголовку и имеет индекс 7
Элемент заголовка с индексом 7 является итоговым
Количество вершин в дереве элементов для измерения Time: 7
Первая корневая вершина дерева: 2006 ,(8, parent: 0)
Описания элементов заголовка, отсортированных по убыванию:
PPLDataSourceMatrixKeyBase parts=1 (16033=>14 )
PPLDataSourceMatrixKeyBase parts=1 (16033=>13 )
PPLDataSourceMatrixKeyBase parts=1 (16033=>11 )
PPLDataSourceMatrixKeyBase parts=1 (120448481=>4294967295 )
PPLDataSourceMatrixKeyBase parts=1 (16033=>12 )
PPLDataSourceMatrixKeyBase parts=1 (16033=>10 )
PPLDataSourceMatrixKeyBase parts=1 (16033=>8 )
PPLDataSourceMatrixKeyBase parts=1 (16033=>9 )
См. также: