Bug 125060 Export to CSV should repeat values in each data row
When a user exports content to CSV, they typically do so in order to further manipulate the data using other tools such as Excel. For example, to export the data and then build an Excel Pivot Table around the data. They typically do no want to export the data in it's "visual" format -- they want the raw data so they can work with it. To support this common usage, when exporting to CSV from the viewer, the value for each column should be repeated in each row. That is, we should do a data export rather than trying to approximate the formatted layout of the report. For example, if you export data using BIRT 2.0 from the report design attached to bugzilla entry 125058, you get something like: Classic Cars 1948 Porsche 356-A Roadster Scale: 1:18 ... 1948 Porsche Type 356 Roadster Scale: 1:18 ... 1949 Jaguar XK 120 Scale: 1:24 ... ... This does not support the analysis that users are going to typically want to do. We should export this as: Classic Cars 1948 Porsche 356-A Roadster Scale: 1:18 ... Classic Cars 1948 Porsche Type 356 Roadster Scale: 1:18 ... Classic Cars 1949 Jaguar XK 120 Scale: 1:24 ... ...
engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/data/dte/ReportQueryBuilder.java
* @return the filter
		 */
		private IFilterDefinition createFilter( FilterConditionHandle handle )
		{
			String filterExpr = handle.getExpr( );
			if ( filterExpr == null || filterExpr.length( ) == 0 )
				return null; 
			
			String filterOpr = handle.getOperator( );
			if ( filterOpr == null || filterOpr.length( ) == 0 )
				return new FilterDefinition( new ScriptExpression( filterExpr ) );
			/*
			 * has operator defined, try to convert filter condition to
			 * operator/operand style column filter with 0 to 2 operands
			 */
			String column = filterExpr;
			int dteOpr = ModelDteApiAdapter.toDteFilterOperator( filterOpr );
			String operand1 = handle.getValue1( );
			String operand2 = handle.getValue2( );
			return new FilterDefinition( new ConditionalExpression( column,
					dteOpr, operand1, operand2 ) );
		}
		/**
		 * create a filter array given a filter condition handle iterator
		 * 
		 * @param iter
		 *            the iterator
		 * @return filter array
		 */
		private ArrayList createFilters( Iterator iter )