Working with Dimension Element Selection

Operating system requirements: iOS 5.0 or later.

Mobile device: iPad.

Description

This example describes some methods of working with data source dimension element selection. After starting the example the following operations are executed:

Source Code

Executing the example requires to place the following code instead of the executeExample method of the ViewController class (see the Data Analysis section):

// Get selection container of data source dimension elements
SPPLDimensionSelectionSet pivotSet = m_olapReport->selectionSet();
// Get description of dimension element selection container
SNString selectionSetDescription = pivotSet->description();
printf("Description of dimension element selection container:\n%s\n", selectionSetDescription->UTF8String());
// Get number of dimension element selections
int selectionsCount = pivotSet->selectionsCount();
printf("Number of dimension element selections: %d\n", selectionsCount);
// Get copy of selection container
SNID copiedSelectionSetObject = pivotSet->copy();
// Get container object from copy
SPPLDimensionSelectionSet copiedSelectionSet = copiedSelectionSetObject->qClass<PPLDimensionSelectionSet>();
// Get dictionary with selection container copy settings
SNDictionary plist = copiedSelectionSet->generatePlist()->qClass<NDictionary>();
printf("Number of settings dictionary elements: %d\n", plist->count());
// Get array of cube dimensions
SNArray allDimensions = [self allDimensions];
if (allDimensions->count() < 1) {
    printf("No dimension is found");
    return;
}
// Get first cube dimension in array
SPPLDimension dimension = allDimensions->objectAtIndex<PPLDimension>(0);
// Get first selection by means of selected dimension key
SPPLDimensionSelection selection = pivotSet->getSelectionByDimensionKey(dimension->key());
// Get array of keys of first selection selected elements
SNInt64Array keys = selection->selectedKeys();
printf("Number of first selection keys: %d\n", keys->count());
// Get selection by index in selection container
SPPLDimensionSelection selection2 = pivotSet->getSelectionByIndex(1);
// Get array of second selection selected elements
SNArray elements = selection2->selectedElements();
printf("Number of second selection selected elements: %d\n", elements->count());
// Get copy of first selection
SPPLDimensionSelection selectionCopy = selection->copy()->qClass<PPLDimensionSelection>();
// Get dimension, for which selection is stored, from first selection copy
SPPLDimension selectionDimension = selectionCopy->dimension();
printf("Name of the dimension, for which selection is stored: %s\n", selectionDimension->name()->UTF8String());
// Get first element key from array of first selection keys
int64 elementKey = keys->objectAtIndex(0);
// Get element by key and check if this element is selected
bool isSelected = selection->isElementSelected(elementKey);
// Display check result message in the development environment console
if(isSelected) printf("First dimension element with the key %lld is selected\n", elementKey);
else printf("First dimension element with the key %lld is not selected\n", elementKey);
// Create a new selection container
SPPLDimensionSelectionSet createdSelectionSet = new PPLDimensionSelectionSet();
// Fill new container in cycle
for(int i = 0; i < pivotSet->selectionsCount(); i++) {
    // Get dimension by index
    SPPLDimension currentDimension = allDimensions->objectAtIndex<PPLDimension>(i);
    // Get selection from existing container by identifier of the dimension, for which selection is stored 
    SPPLDimensionSelection currentSelection = pivotSet->getSelectionByDimensionId(currentDimension->id());
    // Add selection to new container
    createdSelectionSet->addSelection(currentSelection, currentDimension->id());
}
// Get number of new container elements
int createdSelectionSetCount = createdSelectionSet->selectionsCount();
printf("Number of new container elements: %d\n", createdSelectionSetCount);
// Delete first dimension selection from new container
createdSelectionSet->removeSelection(dimension->id());
// Get number of new container elements after deleting selection
createdSelectionSetCount = createdSelectionSet->selectionsCount();
printf("Number of new container elements after deleting selection: %d\n", createdSelectionSetCount);
// Get second cube dimension
SPPLDimension dimension2 = allDimensions->objectAtIndex<PPLDimension>(1);
// Create a new selection for obtained dimension
SPPLDimensionSelection createdSelection = new PPLDimensionSelection(dimension2);
// Get name of the dimension, based on which selection is created
SNString dimensionName = createdSelection->dimension()->name();
printf("Name of the dimension, based on which a new selection is created: %s\n", dimensionName->UTF8String());
printf("Dimension identifier: %s\n", createdSelection->description()->UTF8String());
// Select all new selection elements
createdSelection->selectAll();
printf("Selecting all new selection elements\n");
printf("Number of new selection elements: %d\n", createdSelection->selectedElements()->count());
// Deselect all new selection elements
createdSelection->deselectAll();
printf("Deselecting all new selection elements\n");
printf("Number of new selection elements: %d\n", createdSelection->selectedElements()->count());
// Get array of all keys of second dimension elements
SNInt64Array itemsKeys = dimension2->elements()->itemsKeys();
// Get key of second dimension last element
int64 key = itemsKeys->objectAtIndex(itemsKeys->count() - 1);
// Select second dimension last element
createdSelection->select(key);
printf("Selecting new selection last element\n");
printf("Number of new selection elements: %d\n", createdSelection->selectedElements()->count());
// Deselect second dimension last element
createdSelection->deselect(key);
printf("Deselecting new selection last element\n");
printf("Number of new selection elements: %d\n", createdSelection->selectedElements()->count());
// Delete last object from array of keys
itemsKeys->removeObjectAtIndex(itemsKeys->count() - 1);
// Select all elements by array of keys
createdSelection->selectAll(itemsKeys);
printf("Selecting all elements in array of keys\n");
printf("Number of new selection elements: %d\n", createdSelection->selectedElements()->count());
// Delete last object from array of keys
itemsKeys->removeObjectAtIndex(itemsKeys->count() - 1);
// Deselect all elements by array of keys
createdSelection->deselectAll(itemsKeys);
printf("Deselecting all elements in changed array of keys\n");
printf("Number of new selection elements: %d\n", createdSelection->selectedElements()->count());

After executing the example the development environment console displays information about obtained and created selection containers of data source dimension elements, information about selections retrieved from these containers, name of the dimension, based on which a new selection is created, and also results of operations for selecting and deselecting selection elements:

Description of dimension element selection container:

Selections count: 3

[CUT_REGIONS_68045]

[FACTS_WDI_COPY_1557]

[CALENDAR_Y_ENG_533]

 

Number of dimension element selections: 3

Number of settings dictionary elements: 3

Number of first selection keys: 6

Number of second selection selected elements: 1

Name of the dimension, for which selection is stored: Calendar

First dimension element with the key 16 is selected

Number of new container elements: 3

Number of new container elements after deleting selection: 2

Name of the dimension, based on which a new selection is created: Regions
Dimension identifier: [D_TO_105]

Selecting all new selection elements

Number of new selection elements: 8

Deselecting all new selection elements

Number of new selection elements: 0

Selecting new selection last element

Number of new selection elements: 1

Deselecting new selection last element

Number of new selection elements: 0

Selecting all elements in array of keys

Number of new selection elements: 7

Deselecting all elements in changed array of keys

Number of new selection elements: 1

See also:

Example of pplib++ Library Use