Получение настроек источника данных пузырьковой диаграммы

Требования к операционной системе: iOS 5.0 и выше.

Мобильное устройство: iPad.

Описание

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

Исходный код

Для выполнения примера необходимо разместить в теле метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») следующий код:

// Получаем контроллер представления данных в виде пузырьковой диаграммы
MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController*)m_controller;
NSArray *controllers = [contr dataViewControllers];
MABubbleDataViewController *bubbleDataViewController;
for (int i = 0; i < controllers.count; i++){
    if([controllers[i] isKindOfClass:[MABubbleDataViewController class]]){
        bubbleDataViewController = controllers[i];
        // Отображаем пузырьковую диаграмму
        [contr setDataViewMode:kViewModeBubble];
        // Получаем источник данных пузырьковой диаграммы
        BubbleDataViewDatasource *bubbleDataSource = bubbleDataViewController.bubbleDataSource;
        // Получаем источник данных для пузырьковой диаграммы и выводим значение временной оси
        id<ChartDataSource> chartDataSource = bubbleDataViewController.dataSource;
        printf("Значение временной оси: %d\n", [chartDataSource currentTimestamp]);
        // Выводим имя файла с настройками пузырьковой диаграммы
        printf("Имя файла с настройками пузырьковой диаграммы: %s\n", [[bubbleDataViewController settingsPlistName] UTF8String]);
        // Выводим имя и ключ метрики, определяющей цвет пузырьков
        if(bubbleDataSource.getColorMetricName != NULL) {
            printf("Имя метрики, определяющей цвет пузырьков: %s\n", [[bubbleDataSource getColorMetricName] UTF8String]);
            printf("ключ метрики, определяющей цвет пузырьков: %lld\n", [bubbleDataSource colorMetricKey]);
        }
        // Выводим имя и ключ метрики, определяющей размер пузырьков
        if(bubbleDataSource.getSizeMetricName != NULL) {
            printf("Имя метрики, определяющей размер пузырьков: %s\n", [[bubbleDataSource getSizeMetricName] UTF8String]);
            printf("Ключ метрики, определяющей размер пузырьков: %lld\n", [bubbleDataSource sizeMetricKey]);
        }
        // Выводим имя и ключ метрики, определяющей значения по оси X
        if(bubbleDataSource.getXMetricName != NULL) {
            printf("Имя метрики, определяющей значения по оси X: %s\n", [[bubbleDataSource getXMetricName] UTF8String]);
            printf("Ключ метрики, определяющей значения по оси X: %lld\n", [bubbleDataSource xMetricKey]);
        }
        // Выводим имя и ключ метрики, определяющей значения по оси Y
        if(bubbleDataSource.getYMetricName != NULL) {
            printf("Имя метрики, определяющей значения по оси Y: %s\n", [[bubbleDataSource getYMetricName] UTF8String]);
            printf("Ключ метрики, определяющей значения по оси Y: %lld\n", [bubbleDataSource yMetricKey]);
        }
        // Выводим количество настроек пузырьковой диаграммы
        SNDictionary settings = [bubbleDataSource dumpSettings];
        printf("Количество настроек пузырьковой диаграммы: %d\n", settings->count());
        // Выводим количество значений рядов данных для цвета, размера, осей X и Y
        if(bubbleDataSource.hasColorData)
        printf("Количество значений рядов данных для цвета: %d\n", bubbleDataSource.colorValues.count);
        if(bubbleDataSource.hasSizeData)
        printf("Количество значений рядов данных для размера: %d\n", bubbleDataSource.sizeValues.count);
        printf("Количество значений рядов данных для оси X: %d\n", bubbleDataSource.xValues.count);
        printf("Количество значений рядов данных для оси Y: %d\n", bubbleDataSource.yValues.count);
        // Получаем идентификатор ряда данных и выводим его подпись
        NSString *seriesID = bubbleDataSource.seriesIDs[0];
        NSString *seriesTitle = [bubbleDataSource seriesTitleWithID:seriesID];
        printf("Подпись ряда с идентификатором %s: %s\n", [seriesID UTF8String], [seriesTitle UTF8String]);
        // Выводим значение ряда данных для цвета
        printf("%s %f\n", "Значение ряда данных для цвета", [[bubbleDataSource colorSeriesWithID: seriesID][0] doubleValue]);
        // Выводим значение ряда данных для размера
        printf("%s %f\n", "Значение ряда данных для размера", [[bubbleDataSource sizeSeriesWithID: seriesID][1] doubleValue]);
        // Выводим значение ряда данных для оси X
        printf("%s %f\n", "Значение ряда данных для оси X", [[bubbleDataSource xSeriesWithID: seriesID][2] doubleValue]);
        // Выводим значение ряда данных для оси Y
        printf("%s %f\n", "Значение ряда данных для оси Y", [[bubbleDataSource ySeriesWithID: seriesID][3] doubleValue]);
        // Выводим ключ измерения метрик, используемого в данный момент, и количество фиксированных измерений
        printf("ключ измерения метрик, используемого в данный момент: %lld\n", [bubbleDataSource currentMetricsDimensionKey]);
        printf("Количество фиксированных измерений: %d \n", bubbleDataSource.fixedDimensions->count());
        // Выводим наименования измерений источника данных
        printf("Наименование территориального измерения: %s\n", [bubbleDataSource observationDimension]->name()->UTF8String());
        printf("Наименование объектов наблюдения: %s\n", [bubbleDataSource metricsDimension]->name()->UTF8String());
        printf("Наименование календарного измерения: %s\n", [bubbleDataSource timelineDimension]->name()->UTF8String());
        // Выводим подписи временной оси
        NSArray *timeAxisTitles = [bubbleDataSource timeAxisTitles];
        printf("Подписи временной оси: ");
        for (int i = 0; i < timeAxisTitles.count; i++) {
            printf("%s; ", [timeAxisTitles[i] UTF8String]);
        }
        // Выводим значение первого элемента справочника названий измерений метрик
        NSDictionary *dimKeys = [bubbleDataSource metricsDimensionsKeys];
        printf("\nЗначение первого элемента справочника названий измерений метрик: %s\n", [[[dimKeys allValues] objectAtIndex:0] UTF8String]);
        // Выводим значение первого элемента справочника названий элементов измерения метрик
        NSDictionary *elDimKeys = [bubbleDataSource metricsDimensionElementsKeys];
        printf("Значение первого элемента справочника названий элементов измерения метрик: %s\n", [[[elDimKeys allValues] objectAtIndex:0] UTF8String]);
        return;
    }
}
NSLog(@"Представление данных в виде пузырьковой диаграммы недоступно");

Также необходимо заменить код в файле статичного примера MAExpressAnalysisReportViewControllerDelegateImpl.mm в методе initWithOlapReport: в блоке:

if (self.isBubbleEnabled)

на следующий код:

// Получаем настройки отчета
SNDictionary bubbleOlapPlist = m_olapReport->storageDictionary()->objectForKey<NDictionary>(BUBBLE_OLAP_KEY);
// Создаем отчет
SPPLOlapReport bubbleOlapReport = NULL;
if (bubbleOlapPlist != NULL) {
    bubbleOlapReport = PPLOlapReport::olapReport(m_olapReport->descriptor(), bubbleOlapPlist);
}
// Создаем таблицу данных
m_bubblePivot = (bubbleOlapReport != NULL) ? PPLPivot::pivot(bubbleOlapReport) : PPLPivot::pivot(m_olapReport);
// Создаем источник данных
m_bubbleDatasource = [[BubbleDataViewDatasource alloc] initWithPivot:m_bubblePivot];
// Создаем контроллер выбора метрик
m_bubbleElementRoleSelector = [[MAElementDataSourceRoleSelectorViewController alloc] initWithBubbleDataSource:m_bubbleDatasource];
// Получаем настройки пузырьковой диаграммы
SNDictionary bubbleSettings = m_olapReport->bubblesSettings();
// Получаем настройки отметок элементов измерения
SNDictionary selectionSetings = m_olapReport->selectionDictionary();
// Получаем настройки источника данных пузырьковой диаграммы
SNDictionary bubbleDSSettings = m_olapReport->storageDictionary()->objectForKey<NDictionary>(BUBBLE_DS_KEY);
// Загружаем настройки
[m_bubbleDatasource loadSettings:bubbleSettings dataStorageSettings:bubbleDSSettings indicatorEmptySettings:selectionSetings];

И в файле MAExpressAnalysisReportViewControllerFactory.mm в методе createReport: в блоке:

if (delegate.isBubbleEnabled)

на следующий код:

// Создаем контроллер представления данных в виде пузырьковой диаграммы
MABubbleDataViewController *controller = [[MABubbleDataViewController alloc] initWithDatasource:(BubbleDataViewDatasource *)delegate.bubbleDatasource];
// Устанавливаем видимость заголовка
controller.isDataViewTitleVisible = !!delegate.olapReport->title();
// Устанавливаем делегат контроллера
controller.delegate = report;
// Устанавливаем тэг контроллера
controller.tag = kViewModeBubble;
// Устанавливаем значение коэффициента соотношения размера области пузырьковой диаграммы к размерам её элементов, при котором следует скрывать элементы
controller.contentOptimizationFactor = 1;
// Скрываем элементы пузырьковой диаграммы, не помещающиеся в ней
controller.optimizeOn = YES;
// Разрешаем использования жеста масштабирования
controller.zoomEnabled = YES;
// Устанавливаем имя файла с настройками
controller.settingsPlistName = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? @"settings_ea_ipad.plist" : @"settings_ea_iphone.plist");
// Добавляем контроллер в массив контроллеров
[controllers addObject:controller];
// Добавляет контроллер в пул объектов, для которых производится автоматический подсчет ссылок
[controller autorelease];

В результате выполнения примера будет отображена пузырьковая диаграмма со скрытой легендой:

Также в консоли браузера будут выведены значения настроек пузырьковой диаграммы и её источника данных:

Значение временной оси: 0

Имя файла с настройками пузырьковой диаграммы: settings_ea_ipad.plist

Имя метрики, определяющей цвет пузырьков: GDP per capita, PPP (constant 2005 international $)

Ключ метрики, определяющей цвет пузырьков: 513

Имя метрики, определяющей значения по оси X: GDP per capita, PPP (constant 2005 international $)

Ключ метрики, определяющей значения по оси X: 513

Имя метрики, определяющей значения по оси Y: GDP per capita, PPP (constant 2005 international $)

Ключ метрики, определяющей значения по оси Y: 513

Количество настроек пузырьковой диаграммы: 6

Количество значений рядов данных для цвета: 30

Количество значений рядов данных для размера: 30

Количество значений рядов данных для оси X: 30

Количество значений рядов данных для оси Y: 30

Подпись ряда с идентификатором South Africa: ЮАР

Значение ряда данных для цвета 7974.707562

Значение ряда данных для размера 7732.457170

Значение ряда данных для оси X 7410.955176

Значение ряда данных для оси Y 7345.606990

Ключ измерения метрик, используемого в данный момент: 1557

Количество фиксированных измерений: 0

Наименование территориального измерения: Regions

Наименование объектов наблюдения: Indicators

Наименование календарного измерения: Календарь

Подписи временной оси: 1990; 1991; 1992; 1993; 1994; 1995;

Значение первого элемента справочника названий измерений метрик: Indicators

Значение первого элемента справочника названий элементов измерения метрик: GDP per capita, PPP (constant 2005 international $)

См. также:

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