Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере происходит отображение пузырьковой диаграммы экспресс-отчёта, для которой скрыта легенда. После запуска примера в консоль среды разработки выводится следующая информация:
значение временной оси;
имя файла с настройками пузырьковой диаграммы;
имена и ключи метрик по цвету, размеру, осям X и Y;
количество настроек пузырьковой диаграммы;
количество значений рядов данных и конкретное значения ряда для цвета, размера, осей X и Y;
подпись ряда с указанным идентификатором;
ключ измерения метрик, используемого в данный момент;
количество фиксированных измерений;
наименование территориального и календарного измерений;
наименование объектов наблюдения.
Для выполнения примера необходимо разместить в теле метода 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 $)
См. также: