Operating system requirements: iOS 5.0 or later.
Mobile device: iPad.
This example describes some methods of working with a chart data source. After starting the example the following operations are executed:
A chart data source is created and retrieved.
A label of one of chart axes is retrieved by text pattern.
Chart series data is retrieved by specified index.
Data source name is retreived.
The number of series in chart data source is retrieved.
Array of chart data series keys is retrieved.
Array of chart data series titles is retrieved.
Array of timestamps is retrieved.
A new value for chart data transposing indicator is set.
Executing the example requires to place the following code in the body of the executeExample method of the ViewController class (see the Displaying of Express Report section):
// Select chart as the current data view [m_controller setDataViewControllerWithIndex: 1]; // Get array of data view controllers NSArray *controllers =[m_controller dataViewControllers]; // Parse data view controllers in cycle for(NSObject *controller in controllers) { // Check if the current controller is controller of chart data view if([controller isMemberOfClass:[MAChartDataViewController class]]) { // Get data view controller object as a chart MAChartDataViewController *chartController = (MAChartDataViewController *)controller; // Get chart data source ChartDataViewDatasource *chart = [[chartController dataSource] datasource]; // Get axis label by text pattern NSString *axisName = [chart axisNameForMask: @"#fixed"]; // Get series data by specified index NSArray *data = [chart seriesDataWithIndex: 1]; // Get value of the first series element double valueOfData = [[data objectAtIndex:0] doubleValue]; // Data source name NSString *cubeName = [chart cubeName]; // Get the number of series in chart data source int seriesCount = [chart seriesCount]; // Get array of data series keys NSArray *seriesKeys = [chart seriesKeys]; // Get value of the first key in array int valueOfSeriesKeys = [[seriesKeys objectAtIndex:0] longValue]; // Get array of series titles NSArray *seriesTitles = [chart seriesTitles]; // Get array of timestamps NSArray *timestamps = [chart timestamps]; // Get array of timestamp labels NSArray *timestampTitles = [chart timestampTitles]; // Display obtained information in the development environment console NSLog(@"Label for fixed dimension: %@", axisName); NSLog(@"Value of the first series element with the 1 index: %f", valueOfData); NSLog(@"Data source name: %@", cubeName); NSLog(@"Number of series in chart data source: %d", seriesCount); NSLog(@"value of the first key in array of data series keys: %d", valueOfSeriesKeys); NSLog(@"First title in array of series titles: %@", [seriesTitles objectAtIndex: 0]); NSLog(@"First timestamp - value: %@, label: %@",[timestamps objectAtIndex:0], [timestampTitles objectAtIndex:0]); break; } }
It is also required to replace the code in the static example file MAExpressAnalysisReportViewControllerDelegateImpl.mm in the initWithOlapReport: method in the block:
if (self.isChartEnabled)
with the following code:
// Check if pivot object for building data table is empty if (m_gridPivot == NULL) { // Get report settings SNDictionary gridOlapPlist = m_olapReport->storageDictionary()->objectForKey<NDictionary>(GRID_OLAP_KEY); // Create a report SPPLOlapReport gridOlapReport = NULL; if (gridOlapPlist != NULL) { gridOlapReport = PPLOlapReport::olapReport(m_olapReport->descriptor(), gridOlapPlist); } // Create a pivot object for building data table m_gridPivot = (gridOlapReport != NULL) ? PPLPivot::pivot(gridOlapReport) : PPLPivot::pivot(m_olapReport); // Create a data table m_gridPivotTable = PPLPivotTable::pivotTable(m_gridPivot); // Get data table settings SNDictionary gridPivotTablePlist = m_olapReport->storageDictionary()->objectForKey<NDictionary>(GRID_PIVOT_TABLE_KEY); // Check if table settings object is empty if (gridPivotTablePlist != NULL) { // Set table settings m_gridPivotTable->setupFromPlist(gridPivotTablePlist); } else { // Apply table settings [self applyGridSettings]; } } // Create a data source based on data table m_chartDatasource = [[ChartDataViewDatasource alloc] initWithPivotTable:m_gridPivotTable];
After executing the example the express report is displayed containing a chart based on the created data source:
The development environment console also displays information about chart data source:
Fixed dimension label: Indicators
Value of the first element with the 1 index: 12625.619629
Data source name: World Development Indicators
Number of series in chart data source: 2
Value of the first key in the array of data series keys: 44
The first title in the array of series titles: China
The first timestamp - value: 0, label: 1990
Then add the following code in the executeExample method of the ViewController class before the break operator:
// Determine whether source data is transposed [chart setTransporateData:NO]; // Refresh chart data [chart updateData];
After executing the updated example the express report is displayed containing a chart based on the transposed data source:
See also: