Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приемы работы с источником данных диаграммы. После запуска примера выполняются следующие операции:
создается и извлекается источник данных диаграммы;
извлекается подпись одной из осей диаграммы по текстовому шаблону;
извлекаются данные ряда диаграммы по заданному индексу;
извлекается наименование источника данных;
извлекается количество рядов в источнике данных диаграммы;
извлекается массив ключей рядов данных диаграммы;
извлекается массив заголовков рядов данных диаграммы;
извлекается массив временных отметок;
устанавливается новое значение признака транспонирования данных диаграммы.
Для выполнения примера необходимо разместить в теле метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») следующий код:
// Выбираем диаграмму в качестве текущего представления
[m_controller setDataViewControllerWithIndex: 1];
// Получаем массив контроллеров представлений данных
NSArray *controllers =[m_controller dataViewControllers];
// Перебираем в цикле контроллеры представлений данных
for(NSObject *controller in controllers)
{
// Проверяем, является ли текущий контроллер контроллером представления данных в виде диаграммы
if([controller isMemberOfClass:[MAChartDataViewController class]])
{
// Получаем объект контроллера представления данных в виде диаграммы
MAChartDataViewController *chartController = (MAChartDataViewController *)controller;
// Получаем источник данных диаграммы
ChartDataViewDatasource *chart = [[chartController dataSource] datasource];
// Получаем подпись оси по текстовому шаблону
NSString *axisName = [chart axisNameForMask: @"#fixed"];
// Получаем данные ряда по заданному индексу
NSArray *data = [chart seriesDataWithIndex: 1];
// Получаем значение первого элемента ряда
double valueOfData = [[data objectAtIndex:0] doubleValue];
// Наименование источника данных
NSString *cubeName = [chart cubeName];
// Получаем количество рядов в источнике данных диаграммы
int seriesCount = [chart seriesCount];
// Получаем массив ключей рядов данных
NSArray *seriesKeys = [chart seriesKeys];
// Получаем значение первого ключа в массиве
int valueOfSeriesKeys = [[seriesKeys objectAtIndex:0] longValue];
// Получаем массив заголовков рядов
NSArray *seriesTitles = [chart seriesTitles];
// Получаем массив временных отметок
NSArray *timestamps = [chart timestamps];
// Получаем массив подписей временных отметок
NSArray *timestampTitles = [chart timestampTitles];
// Выводим в консоль среды разработки полученную информацию
NSLog(@"Подпись для фиксированного измерения: %@", axisName);
NSLog(@"Значение первого элемента ряда с индексом 1: %f", valueOfData);
NSLog(@"Наименование источника данных: %@", cubeName);
NSLog(@"Количество рядов в источнике данных диаграммы: %d", seriesCount);
NSLog(@"Значение первого ключа в массиве ключей рядов данных: %d", valueOfSeriesKeys);
NSLog(@"Первый заголовок в массиве заголовков рядов: %@", [seriesTitles objectAtIndex: 0]);
NSLog(@"Первая временная отметка - значение: %@, подпись: %@",[timestamps objectAtIndex:0], [timestampTitles objectAtIndex:0]);
break;
}
}
Также необходимо заменить код в файле статичного примера MAExpressAnalysisReportViewControllerDelegateImpl.mm в методе initWithOlapReport: в блоке:
if (self.isChartEnabled)
на следующий код:
// Проверяем, является ли объект-основа для построения таблицы данных пустым
if (m_gridPivot == NULL)
{
// Получаем настройки отчета
SNDictionary gridOlapPlist = m_olapReport->storageDictionary()->objectForKey<NDictionary>(GRID_OLAP_KEY);
// Создаем отчет
SPPLOlapReport gridOlapReport = NULL;
if (gridOlapPlist != NULL)
{
gridOlapReport = PPLOlapReport::olapReport(m_olapReport->descriptor(), gridOlapPlist);
}
// Создаем объект-основу для построения таблицы данных
m_gridPivot = (gridOlapReport != NULL) ? PPLPivot::pivot(gridOlapReport) : PPLPivot::pivot(m_olapReport);
// Создаем таблицу данных
m_gridPivotTable = PPLPivotTable::pivotTable(m_gridPivot);
// Получаем настройки таблицы данных
SNDictionary gridPivotTablePlist = m_olapReport->storageDictionary()->objectForKey<NDictionary>(GRID_PIVOT_TABLE_KEY);
// Проверяем, является ли объект настроек таблицы пустым
if (gridPivotTablePlist != NULL)
{
// Устанавливаем настройки таблицы
m_gridPivotTable->setupFromPlist(gridPivotTablePlist);
}
else
{
// Применяем настройки таблицы
[self applyGridSettings];
}
}
// Создаем источник данных на основе таблицы данных
m_chartDatasource = [[ChartDataViewDatasource alloc] initWithPivotTable:m_gridPivotTable];
В результате выполнения примера был отображен экспресс-отчет, содержащий диаграмму, построенную на основе созданного источника данных:

Кроме того в консоли среды разработки будет выведена информация об источнике данных диаграммы:
Подпись для фиксированного измерения: Indicators
Значение первого элемента ряда с индексом 1: 12625.619629
Наименование источника данных: World Development Indicators
Количество рядов в источнике данных диаграммы: 2
Значение первого ключа в массиве ключей рядов данных: 44
Первый заголовок в массиве заголовков рядов: Китай
Первая временная отметка - значение: 0, подпись: 1990
Далее в методе executeExample класса ViewController перед оператором break добавим следующий код:
// Устанавливаем признак транспонирования данных источника [chart setTransporateData:NO]; // Обновляем данные диаграммы [chart updateData];
В результате выполнения обновленного примера будет отображен экспресс-отчет, содержащий диаграмму, построенную на основе транспонированного источника данных:

См. также: