Oracle Business Intelligence Beans Sample

Using Dimension List

Overview

The OLAP Dimension List Panel sample demonstrates how you can use the OLAPDimensionListPanel bean to modify the member steps of a query, which is embedded within a presentation object, such as a crosstab.

The following figure shows a page from the OLAP Dimension List Panel sample. This page contains the following items:

Sample OLAPDimensionListPanel

Code highlights

Creating a default query

The OLAP Dimension List Panel sample creates a default query, which is applied to a new crosstab, as shown in the following code fragment.

// Create the default query used in the crosstab
m_query = getDefaultQuery();
// Attach the query to the crosstab
newCrosstab.setDataSource(m_query);

Retrieving dimension information

The OLAP Dimension List Panel sample uses information about the dimension whose values it displays in the OLAPDimensionListPanel. In particular, the OLAPDimensionListPanel object requires unique dimension identifiers such as the dimension ID and the default hierarchy ID. The sample implements the getDimensionDetails method, which retrieves information about the dimensions from the MetadataManager.

The strSelectedMeas variable holds the name of the first measure in the default query for which dimension information is being retrieved.

The code loops over all the dimensions for a given measure and retrieves all the required information, which is stored in a multidimensional array for use later. The following code fragment shows how to retrieve dimension information.

// Retrieve the metadata measure unique ID
MDMeasure firstMeasure = getMetadataManager().getMeasure(MM.UNIQUE_ID, strSelectedMeas);
// Cycle over the dimensions of the measure until the required dimension name is found
MDDimension[] mdDimensions = firstMeasure.getDimensions();
// Create an array to hold the dimension short names
String[][] strDimensionInfo = new String[4][mdDimensions.length];
// Cycle over the dimensions for the measure
for (int i = 0; i < mdDimensions.length; i++)
{
// Retrieve the name of the dimension
strDimensionInfo[0][i] = mdDimensions[i].getName();
// Retrieve the ID for the dimension
strDimensionInfo[1][i] = mdDimensions[i].getUniqueID();
// Retrieve the hierarchy ID for the dimension
strDimensionInfo[2][i] = mdDimensions[i].getDefaultHierarchy().getUniqueID();
// Retrieve the short name for the dimension
strDimensionInfo[3][i] = mdDimensions[i].getShortLabel();
if (strDimensionInfo[0][i].equals(m_OLAPDim)) {
// Set the dimension ID once the dimension name is found
m_strCurrentDim = strDimensionInfo[1][i];
// Set the hierarchy ID once the dimension name is found
m_strCurrentDimHier = strDimensionInfo[2][i];
// Set the list index for the dimension selection combo list box
// This ensures the selected dimension is selected in the combo box
selectedComboIndex = i;
}
}

Creating the OLAPDimensionListPanel

The OLAP Dimension List Panel sample implements the OLAPDimensionListPanel class, which instantiates the OLAPDimensionListPanel and specifies what dimension to display, as shown in the following code fragment.

QueryAccess is a class that allows the modification of a query's selections, without changes being reflected immediately in dependent objects e.g. where a presentation object is using the query. This eliminates the need to clone the dimension selection prior to changing any aspect of the query.

QueryAccessDimensionModel is an object that specifies dimension information for the OLAP Dimension List Panel. In this code fragment, the variable for the QueryAccessDimensionModel is qadm. This requires MetadataManager unique IDs for the dimension and hierarchy, which are retrieved and stored in the m_strCurrentDim and m_strCurrentDimHier variables. Both these variables were populated previously when the getDimensionDetails method was called.

OLAPDimensionListPanel newDimList = null;
// Retrieve the query object embedded in the crosstab
Query query = (Query) m_activeView.getDataSource();
// Grant access to the query using the QueryAccess class
QueryAccess queryAccess = query.createQueryAccess();
// Retrieve the unique ID for both the selected dimension and the hierarchy
MetadataManager mdm = getMetadataManager();
// The QueryAccessDimensionModel specifies the dimension information for the OLAPDimensionListPanel
QueryAccessDimensionModel qadm = new QueryAccessDimensionModel(queryAccess, null, null, m_strCurrentDim,m_strCurrentDimHier, mdm);
// Create the OLAPDimensionListPanel by passing the QueryAccessDimensionModel
newDimList = new OLAPDimensionListPanel(qadm);

Applying dimension selections as query steps

A query is comprised of a series of Select, Add, Keep, and Remove steps. The OLAPDimensionListPanel contains a list of selected members that are used to create a member step. If the user is replacing the existing selection, then all the existing steps are removed and replaced with a new member step. If the user is adding to a selection, then the member step is added to the existing list of steps.

The OLAP Dimension List Panel sample implements the applyDimListSelection method, which is called when the user chooses the Add or Replace button. The sample code adds the dimension values that were selected in the OLAPDimensionListPanel as a member step in the query and applies the updated query to the crosstab.

The following code fragment shows how to apply dimension selections as query steps.

// Retrieve the query object for the crosstab
Query query = (Query) m_activeView.getDataSource();
// Retrieve the selection object for the selected dimension
Selection selection = query.findSelection(m_strCurrentDim);
// Retrieve the member step for the selected dimension for the list
MemberStep step = m_dimList.getSelectedMemberStep();
if (action == ADD_ITEM)
// Add to the selection step
step.setAction(Step.ADD);
else {
// Replace selection steps
selection.removeAllSteps();
// Add new selection steps
step.setAction(Step.SELECT);
}
// Add the selection step to the list of steps and apply the selection to the query
selection.addStep(step);


Copyright © 2004 Oracle Corporation.
All Rights Reserved.