Dimension queries
OLAPElement instances stored in the OLAPElementList object.
    When you are working with an OLAP database, a
                common practice is to retrieve elements from a dimension. Then you apply the same
                action to each of its elements. The BI# language offers the OLAPElementList data type and the foreach loop statement to support this practice. The workflow to
                implement such a processing logic follows these steps: 
- Instantiate an 
			 
OLAPElementListobject and populate it with the dimension elements that must be processed. - Loop over the collection
			 of 
			 
OLAPElementinstances and perform the required action on every element in the body of the loop. 
The first step of the workflow can be simplified by selecting elements from a dimension in a form of a declarative statement. Instead of defining a procedure that retrieves the elements, you can declare a list of criteria upon which the elements must be retrieved. This is exactly the purpose of dimension queries. Dimension queries enable you to retrieve elements from a single dimension by defining selection criteria. You can also filter and sort the selected elements. You avoid to write the code that selects all possible candidates and finds the ones among them that qualify for a given list of criteria.
If you use dimension queries, the workflow to implement the processing logic changes in this way:
- Define a dimension query
			 with a list of criteria upon which the elements of a given dimension must be
			 selected. The query evaluates an 
			 
OLAPElementListobject. - Loop over the collection
			 of 
			 
OLAPElementinstances and perform the required action on every element in the body of the loop. 
To write a dimension query, this information is required:
- A valid 
			 
OLAPConnectioninstance - The name of the dimension
			 to retrieve elements from or a valid 
			 
OLAPDimensioninstance - The names of the elements and their attributes
 - The values of the attributes
 
This example demonstrates how to use dimension queries:
	OLAPConnection connection = OLAPCreateNamedConnection("");
	string errorMessage = "";
	int errorCode = 0;
	try
	{
		string dim = "Unit";
		
		// Print all elements with their attributes
		OLAPElementList a = on connection select all from dim;
		foreach(OLAPElement el in a)
		{
			WriteLine(el + "\t[\"English\"]=" + OLAPGetStringAttribute(connection, el, "English"));
		}
		WriteLine("");
		// Select leaves from the Unit dimension with the name not "C1100"
		// and English attribute either GENESIS Italy SA or not Dummy
		string value = "Dummy";
		string attrName = "English";
		OLAPElementList lst1 =
			on connection select leaves from dim
			where @()!="C1100" and (@(attrName)=="GENESIS Italy SA" or @("English")!=value);
		foreach(OLAPElement el1 in lst1)
		{
			WriteLine(el1);
		}
		WriteLine("");
		// Select parents from the Units dimension with the name "greater" than "E000"
		OLAPElementList lst2 =
			on connection select parents from dim
			where @()>="E000";
		foreach(OLAPElement el1 in lst2)
		{
			WriteLine(el1);
		}
	}
	catch (errorMessage, errorCode)
	{
		WriteLine("Exception: " + errorMessage);
	}
	OLAPDisconnect(connection); 
		       In these examples, dimension queries are used as the right side of an
                    OLAPElementList variable declaration. To define
                a criterion upon an attribute's value or an element's name, you must use any
                expression that returns the string type. Specify the function in the left side of a
                predicate, where clause. It expects either a string
                parameter, a variable or a hardcoded string literal, or no parameter at all. In the
                first case, for example, @("Currency")!=value the
                parameter is used to evaluate the name of an attribute. In the second case, for
                example, @()>="Name" no parameter indicates that
                the predicate is equal to the name of an element.