Работа с источником данных диаграммы

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

В результате выполнения обновленного примера будет отображен экспресс-отчет, содержащий диаграмму, построенную на основе транспонированного источника данных:

См. также:

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