Loop statement (foreach)

BI# is built for data-heavy applications and its foreach statement allows easy iteration over large sets of data. This example of a function uses the foreach statement to loop over the result set of an SQL query:

void Process(SQLConnection connection)
{ 
	SQLData resultData = SQLExecuteQuery(
 	connection,
		"Select * from employees"
	);
	foreach (SQLDataRow row in resultData)
	{ 
		string name = SQLDataRowGetString(row,"name");
		WriteLine("Name: " + name); 
	}
}

When iterating over lists of data you often must filter elements. You can use if statements for this purpose, but foreach supports a where clause that solves this problem more elegantly:

void Process(OLAPConnection con)
{ 
	OLAPElementList list = OLAPGetElementList(con,"DACOUNT", true);
	foreach (OLAPElement account in list
		where OLAPGetStringAttribute(account, "ALRE") == "A")
	{ 
		// Do something with account. 
	}
}

The foreach statement has this structure:

foreach (<type> <name> in <list expression>
[where <condition>]) <block>

The statement creates a local variable named name of the specified type. For each iteration, BI# fills this variable with the next item from the list expression. For every list type, BI# allows a certain set of iterator variable types. This table lists possible combinations of iterator variable types and list types:

List Type Iterator Variable Type
OLAPElementList OLAPElement
OLAPDataArea OLAPCell
SQLData SQLDataRow
StringArray String
OLAPElementNativeArray OLAPElementNative
OLAPElementXMLAArray OLAPElementXMLA
CompanyJournalList CompanyJournal
CompanySegmentJournalList CompanySegment
GroupJournalList GroupJournal
GroupSegmentJournalList GroupSegmentJournal
GroupJournalLineList GroupJournalLine
CompanyJournalLineList CompanyJournalLine
OLAPAttributeTable OLAPAttribute
OLAPCubeList OLAPCube
OLAPDimensionList OLAPDimension
OLAPAttributeTableList OLAPAttributeTable

If you do not specify a where clause or if the where clause's condition is true, BI# runs the loop's block. Otherwise, it starts the next iteration.