Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Archived » BIRT » count group items
count group items [message #511077] Fri, 29 January 2010 17:58 Go to next message
Klaus Meisl is currently offline Klaus MeislFriend
Messages: 90
Registered: July 2009
Member
Hi,

I need to count group items of a table. I want to add a border below
every row, but NOT under the last row of a group.
e.g. ("---" is the border):
GROUP 1
item 1
---
item 2
GROUP 2
item 1
---
item 2
----
item 3

Is this possible through highlighting rules? It is not possible to check
if the next row will change the grouping-expression (1 to 2 e.g.), is it?

Klaus
Re: count group items [message #511511 is a reply to message #511077] Mon, 01 February 2010 15:14 Go to previous messageGo to next message
Jason Weathersby is currently offline Jason WeathersbyFriend
Messages: 9167
Registered: July 2009
Senior Member

Klaus,

This can be done using some script. In the tables onprepare add two
variables like:

grpttl=0;
grpcnt=0;


Then in the oncreate for the group header row add this:
grpcnt =0;

In the detail row add an oncreate like this:
grpcnt++;
grpttl = this.getRowData().getColumnValue("Aggregation_1");

Aggregation_1 is just an aggregation that I added using the binding tab
that counts the number of row by group.

You will need to set the border on the cells, because there is a bug
related to setting borders on the row. In the oncreate for each cell
you could enter the following script:

if( grpcnt != grpttl ){
//this.getStyle().backgroundColor = "red";
this.getStyle().borderBottomColor = "blue";
this.getStyle().borderBottomStyle = "solid";
this.getStyle().borderBottomWidth = "3pt";
}

See attached example.

Jason


<?xml version="1.0" encoding="UTF-8"?>
<report xmlns="http://www.eclipse.org/birt/2005/design" version="3.2.20"
id="1">
<property name="createdBy">Eclipse BIRT Designer Version
2.5.1.v20090903 Build &lt;2.5.1.v20090917-1447></property>
<property name="units">in</property>
<property name="iconFile">/templates/blank_report.gif</property>
<property name="layoutPreference">auto layout</property>
<property name="bidiLayoutOrientation">ltr</property>
<data-sources>
<oda-data-source
extensionID="org.eclipse.birt.report.data.oda.jdbc" name="Data Source"
id="7">
<text-property name="displayName"></text-property>
<property
name="odaDriverClass">org.eclipse.birt.report.data.oda.sampledb.Driver </property>
<property name="odaURL">jdbc:classicmodels:sampledb</property>
<property name="odaUser">ClassicModels</property>
</oda-data-source>
</data-sources>
<data-sets>
<oda-data-set
extensionID="org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet "
name="Data Set" id="8">
<list-property name="columnHints">
<structure>
<property name="columnName">ORDERNUMBER</property>
<text-property
name="displayName">ORDERNUMBER</text-property>
</structure>
<structure>
<property name="columnName">PRODUCTCODE</property>
<text-property
name="displayName">PRODUCTCODE</text-property>
</structure>
<structure>
<property name="columnName">QUANTITYORDERED</property>
<text-property
name="displayName">QUANTITYORDERED</text-property>
</structure>
<structure>
<property name="columnName">PRICEEACH</property>
<text-property
name="displayName">PRICEEACH</text-property>
</structure>
<structure>
<property name="columnName">ORDERLINENUMBER</property>
<text-property
name="displayName">ORDERLINENUMBER</text-property>
</structure>
</list-property>
<structure name="cachedMetaData">
<list-property name="resultSet">
<structure>
<property name="position">1</property>
<property name="name">ORDERNUMBER</property>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="position">2</property>
<property name="name">PRODUCTCODE</property>
<property name="dataType">string</property>
</structure>
<structure>
<property name="position">3</property>
<property name="name">QUANTITYORDERED</property>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="position">4</property>
<property name="name">PRICEEACH</property>
<property name="dataType">float</property>
</structure>
<structure>
<property name="position">5</property>
<property name="name">ORDERLINENUMBER</property>
<property name="dataType">integer</property>
</structure>
</list-property>
</structure>
<property name="dataSource">Data Source</property>
<list-property name="resultSet">
<structure>
<property name="position">1</property>
<property name="name">ORDERNUMBER</property>
<property name="nativeName">ORDERNUMBER</property>
<property name="dataType">integer</property>
<property name="nativeDataType">4</property>
</structure>
<structure>
<property name="position">2</property>
<property name="name">PRODUCTCODE</property>
<property name="nativeName">PRODUCTCODE</property>
<property name="dataType">string</property>
<property name="nativeDataType">12</property>
</structure>
<structure>
<property name="position">3</property>
<property name="name">QUANTITYORDERED</property>
<property name="nativeName">QUANTITYORDERED</property>
<property name="dataType">integer</property>
<property name="nativeDataType">4</property>
</structure>
<structure>
<property name="position">4</property>
<property name="name">PRICEEACH</property>
<property name="nativeName">PRICEEACH</property>
<property name="dataType">float</property>
<property name="nativeDataType">8</property>
</structure>
<structure>
<property name="position">5</property>
<property name="name">ORDERLINENUMBER</property>
<property name="nativeName">ORDERLINENUMBER</property>
<property name="dataType">integer</property>
<property name="nativeDataType">5</property>
</structure>
</list-property>
<xml-property name="queryText"><![CDATA[select *
from orderdetails]]></xml-property>
<xml-property name="designerValues"><![CDATA[<?xml
version="1.0" encoding="UTF-8"?>
<model:DesignValues
xmlns:design="http://www.eclipse.org/datatools/connectivity/oda/design"
xmlns:model="http://www.eclipse.org/birt/report/model/adapter/odaModel">
<Version>1.0</Version>
<design:ResultSets derivedMetaData="true">
<design:resultSetDefinitions>
<design:resultSetColumns>
<design:resultColumnDefinitions>
<design:attributes>
<design:name>ORDERNUMBER</design:name>
<design:position>1</design:position>
<design:nativeDataTypeCode>4</design:nativeDataTypeCode>
<design:precision>10</design:precision>
<design:scale>0</design:scale>
<design:nullability>Nullable</design:nullability>
<design:uiHints>
<design:displayName>ORDERNUMBER</design:displayName>
</design:uiHints>
</design:attributes>
<design:usageHints>
<design:label>ORDERNUMBER</design:label>
<design:formattingHints>
<design:displaySize>11</design:displaySize>
</design:formattingHints>
</design:usageHints>
</design:resultColumnDefinitions>
<design:resultColumnDefinitions>
<design:attributes>
<design:name>PRODUCTCODE</design:name>
<design:position>2</design:position>
<design:nativeDataTypeCode>12</design:nativeDataTypeCode>
<design:precision>15</design:precision>
<design:scale>0</design:scale>
<design:nullability>Nullable</design:nullability>
<design:uiHints>
<design:displayName>PRODUCTCODE</design:displayName>
</design:uiHints>
</design:attributes>
<design:usageHints>
<design:label>PRODUCTCODE</design:label>
<design:formattingHints>
<design:displaySize>15</design:displaySize>
</design:formattingHints>
</design:usageHints>
</design:resultColumnDefinitions>
<design:resultColumnDefinitions>
<design:attributes>
<design:name>QUANTITYORDERED</design:name>
<design:position>3</design:position>
<design:nativeDataTypeCode>4</design:nativeDataTypeCode>
<design:precision>10</design:precision>
<design:scale>0</design:scale>
<design:nullability>Nullable</design:nullability>
<design:uiHints>
<design:displayName>QUANTITYORDERED</design:displayName>
</design:uiHints>
</design:attributes>
<design:usageHints>
<design:label>QUANTITYORDERED</design:label>
<design:formattingHints>
<design:displaySize>11</design:displaySize>
</design:formattingHints>
</design:usageHints>
</design:resultColumnDefinitions>
<design:resultColumnDefinitions>
<design:attributes>
<design:name>PRICEEACH</design:name>
<design:position>4</design:position>
<design:nativeDataTypeCode>8</design:nativeDataTypeCode>
<design:precision>15</design:precision>
<design:scale>0</design:scale>
<design:nullability>Nullable</design:nullability>
<design:uiHints>
<design:displayName>PRICEEACH</design:displayName>
</design:uiHints>
</design:attributes>
<design:usageHints>
<design:label>PRICEEACH</design:label>
<design:formattingHints>
<design:displaySize>22</design:displaySize>
</design:formattingHints>
</design:usageHints>
</design:resultColumnDefinitions>
<design:resultColumnDefinitions>
<design:attributes>
<design:name>ORDERLINENUMBER</design:name>
<design:position>5</design:position>
<design:nativeDataTypeCode>5</design:nativeDataTypeCode>
<design:precision>5</design:precision>
<design:scale>0</design:scale>
<design:nullability>Nullable</design:nullability>
<design:uiHints>
<design:displayName>ORDERLINENUMBER</design:displayName>
</design:uiHints>
</design:attributes>
<design:usageHints>
<design:label>ORDERLINENUMBER</design:label>
<design:formattingHints>
<design:displaySize>6</design:displaySize>
</design:formattingHints>
</design:usageHints>
</design:resultColumnDefinitions>
</design:resultSetColumns>
</design:resultSetDefinitions>
</design:ResultSets>
</model:DesignValues>
]]></xml-property>
</oda-data-set>
</data-sets>
<styles>
<style name="report" id="4">
<property name="fontFamily">sans-serif</property>
<property name="fontSize">10pt</property>
</style>
<style name="crosstab" id="5">
<property name="borderBottomColor">#CCCCCC</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">1pt</property>
<property name="borderLeftColor">#CCCCCC</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">1pt</property>
<property name="borderRightColor">#CCCCCC</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">1pt</property>
<property name="borderTopColor">#CCCCCC</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">1pt</property>
</style>
<style name="crosstab-cell" id="6">
<property name="borderBottomColor">#CCCCCC</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">1pt</property>
<property name="borderLeftColor">#CCCCCC</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">1pt</property>
<property name="borderRightColor">#CCCCCC</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">1pt</property>
<property name="borderTopColor">#CCCCCC</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">1pt</property>
</style>
</styles>
<page-setup>
<simple-master-page name="Simple MasterPage" id="2">
<page-footer>
<text id="3">
<property name="contentType">html</property>
<text-property
name="content"><![CDATA[<value-of>new Date()</value-of>]]></text-property>
</text>
</page-footer>
</simple-master-page>
</page-setup>
<body>
<table id="9">
<property name="dataSet">Data Set</property>
<list-property name="boundDataColumns">
<structure>
<property name="name">ORDERNUMBER</property>
<text-property
name="displayName">ORDERNUMBER</text-property>
<expression
name="expression">dataSetRow["ORDERNUMBER"]</expression >
<property name="dataType">integer</property>
</structure>
<structure>
<property name="name">PRODUCTCODE</property>
<text-property
name="displayName">PRODUCTCODE</text-property>
<expression
name="expression">dataSetRow["PRODUCTCODE"]</expression >
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">QUANTITYORDERED</property>
<text-property
name="displayName">QUANTITYORDERED</text-property>
<expression
name="expression">dataSetRow["QUANTITYORDERED"]</expression >
<property name="dataType">integer</property>
</structure>
<structure>
<property name="name">PRICEEACH</property>
<text-property
name="displayName">PRICEEACH</text-property>
<expression
name="expression">dataSetRow["PRICEEACH"]</expression>
<property name="dataType">float</property>
</structure>
<structure>
<property name="name">ORDERLINENUMBER</property>
<text-property
name="displayName">ORDERLINENUMBER</text-property>
<expression
name="expression">dataSetRow["ORDERLINENUMBER"]</expression >
<property name="dataType">integer</property>
</structure>
<structure>
<property name="name">Aggregation</property>
<property name="dataType">integer</property>
<simple-property-list name="aggregateOn">
<value>NewTableGroup1</value>
</simple-property-list>
<property name="aggregateFunction">COUNT</property>
<list-property name="arguments">
<structure>
<property name="name">Expression</property>
<expression name="value"
type="javascript">row["ORDERNUMBER"]</expression>
</structure>
</list-property>
</structure>
<structure>
<property name="name">Aggregation_1</property>
<property name="dataType">integer</property>
<simple-property-list name="aggregateOn">
<value>NewTableGroup1</value>
</simple-property-list>
<property name="aggregateFunction">COUNT</property>
<list-property name="arguments">
<structure>
<property name="name">Expression</property>
<expression name="value"
type="javascript">row["ORDERLINENUMBER"]</expression>
</structure>
</list-property>
</structure>
</list-property>
<method name="onPrepare"><![CDATA[grpttl=0;
grpcnt=0;]]></method>
<column id="38"/>
<column id="39"/>
<column id="40"/>
<column id="41"/>
<column id="42"/>
<header>
<row id="10">
<cell id="11">
<label id="12">
<text-property
name="text">ORDERNUMBER</text-property>
</label>
</cell>
<cell id="13">
<label id="14">
<text-property
name="text">PRODUCTCODE</text-property>
</label>
</cell>
<cell id="15">
<label id="16">
<text-property
name="text">QUANTITYORDERED</text-property>
</label>
</cell>
<cell id="17">
<label id="18">
<text-property
name="text">PRICEEACH</text-property>
</label>
</cell>
<cell id="19">
<label id="20">
<text-property
name="text">ORDERLINENUMBER</text-property>
</label>
</cell>
</row>
</header>
<group id="43">
<property name="groupName">NewTableGroup1</property>
<property name="interval">none</property>
<property name="sortDirection">asc</property>
<expression name="keyExpr"
type="javascript">row["ORDERNUMBER"]</expression>
<structure name="toc">
<expression name="expressionValue"
type="javascript">row["ORDERNUMBER"]</expression>
</structure>
<property name="repeatHeader">true</property>
<property name="hideDetail">false</property>
<property name="pageBreakAfter">auto</property>
<property name="pageBreakBefore">auto</property>
<property name="pageBreakInside">auto</property>
<header>
<row id="44">
<method name="onCreate"><![CDATA[grpcnt
=0;]]></method>
<cell id="45">
<data id="56">
<property
name="resultSetColumn">ORDERNUMBER</property>
</data>
</cell>
<cell id="46"/>
<cell id="47"/>
<cell id="48"/>
<cell id="49"/>
</row>
</header>
<footer>
<row id="50">
<cell id="51"/>
<cell id="52"/>
<cell id="53"/>
<cell id="54"/>
<cell id="55"/>
</row>
</footer>
</group>
<detail>
<row id="21">
<method name="onCreate"><![CDATA[grpcnt++;
grpttl = this.getRowData().getColumnValue("Aggregation_1");




]]></method>
<cell id="22">
<method name="onCreate"><![CDATA[if( grpcnt !=
grpttl ){
//this.getStyle().backgroundColor = "red";
this.getStyle().borderBottomColor = "blue";
this.getStyle().borderBottomStyle = "solid";
this.getStyle().borderBottomWidth = "3pt";
}]]></method>
<data id="23">
<property
name="resultSetColumn">ORDERNUMBER</property>
</data>
</cell>
<cell id="24">
<data id="25">
<property
name="resultSetColumn">PRODUCTCODE</property>
</data>
</cell>
<cell id="26">
<data id="27">
<property
name="resultSetColumn">QUANTITYORDERED</property>
</data>
</cell>
<cell id="28">
<data id="29">
<property
name="resultSetColumn">PRICEEACH</property>
</data>
</cell>
<cell id="30">
<data id="31">
<property
name="resultSetColumn">ORDERLINENUMBER</property>
</data>
</cell>
</row>
</detail>
<footer>
<row id="32">
<cell id="33"/>
<cell id="34"/>
<cell id="35"/>
<cell id="36"/>
<cell id="37"/>
</row>
</footer>
</table>
</body>
</report>


Klaus Meisl wrote:
> Hi,
>
> I need to count group items of a table. I want to add a border below
> every row, but NOT under the last row of a group.
> e.g. ("---" is the border):
> GROUP 1
> item 1
> ---
> item 2
> GROUP 2
> item 1
> ---
> item 2
> ----
> item 3
>
> Is this possible through highlighting rules? It is not possible to check
> if the next row will change the grouping-expression (1 to 2 e.g.), is it?
>
> Klaus
Re: count group items [message #511560 is a reply to message #511511] Mon, 01 February 2010 20:08 Go to previous messageGo to next message
Klaus Meisl is currently offline Klaus MeislFriend
Messages: 90
Registered: July 2009
Member
Jason,

thanks for your help. I tried using

if( grpcnt == row["Aggregation_1"] )

in JavaScript for highlighting a row. It does not work. Does this relate
to the bug?


Am 01.02.10 21:13, schrieb Jason Weathersby:
> You will need to set the border on the cells, because there is a bug
> related to setting borders on the row. In the oncreate for each cell
> you could enter the following script:
>
> if( grpcnt != grpttl ){
> //this.getStyle().backgroundColor = "red";
> this.getStyle().borderBottomColor = "blue";
> this.getStyle().borderBottomStyle = "solid";
> this.getStyle().borderBottomWidth = "3pt";
> }
Re: count group items [message #511759 is a reply to message #511560] Tue, 02 February 2010 18:20 Go to previous messageGo to next message
Jason Weathersby is currently offline Jason WeathersbyFriend
Messages: 9167
Registered: July 2009
Senior Member

Klaus,

Did you add the Aggregation_1 column to the data binding?

Jason

Klaus Meisl wrote:
> Jason,
>
> thanks for your help. I tried using
>
> if( grpcnt == row["Aggregation_1"] )
>
> in JavaScript for highlighting a row. It does not work. Does this relate
> to the bug?
>
>
> Am 01.02.10 21:13, schrieb Jason Weathersby:
>> You will need to set the border on the cells, because there is a bug
>> related to setting borders on the row. In the oncreate for each cell
>> you could enter the following script:
>>
>> if( grpcnt != grpttl ){
>> //this.getStyle().backgroundColor = "red";
>> this.getStyle().borderBottomColor = "blue";
>> this.getStyle().borderBottomStyle = "solid";
>> this.getStyle().borderBottomWidth = "3pt";
>> }
>
Re: count group items [message #511772 is a reply to message #511759] Tue, 02 February 2010 18:42 Go to previous messageGo to next message
Klaus Meisl is currently offline Klaus MeislFriend
Messages: 90
Registered: July 2009
Member
Jason,

yes, i did.

Klaus

Am 02.02.10 19:22, schrieb Jason Weathersby:
> Klaus,
>
> Did you add the Aggregation_1 column to the data binding?
>
> Jason
>
> Klaus Meisl wrote:
>> Jason,
>>
>> thanks for your help. I tried using
>>
>> if( grpcnt == row["Aggregation_1"] )
>>
>> in JavaScript for highlighting a row. It does not work. Does this relate
>> to the bug?
>>
>>
>> Am 01.02.10 21:13, schrieb Jason Weathersby:
>>> You will need to set the border on the cells, because there is a bug
>>> related to setting borders on the row. In the oncreate for each cell
>>> you could enter the following script:
>>>
>>> if( grpcnt != grpttl ){
>>> //this.getStyle().backgroundColor = "red";
>>> this.getStyle().borderBottomColor = "blue";
>>> this.getStyle().borderBottomStyle = "solid";
>>> this.getStyle().borderBottomWidth = "3pt";
>>> }
>>
Re: count group items [message #511790 is a reply to message #511772] Tue, 02 February 2010 21:27 Go to previous message
Jason Weathersby is currently offline Jason WeathersbyFriend
Messages: 9167
Registered: July 2009
Senior Member

Can you post the modified report?

Klaus Meisl wrote:
> Jason,
>
> yes, i did.
>
> Klaus
>
> Am 02.02.10 19:22, schrieb Jason Weathersby:
>> Klaus,
>>
>> Did you add the Aggregation_1 column to the data binding?
>>
>> Jason
>>
>> Klaus Meisl wrote:
>>> Jason,
>>>
>>> thanks for your help. I tried using
>>>
>>> if( grpcnt == row["Aggregation_1"] )
>>>
>>> in JavaScript for highlighting a row. It does not work. Does this relate
>>> to the bug?
>>>
>>>
>>> Am 01.02.10 21:13, schrieb Jason Weathersby:
>>>> You will need to set the border on the cells, because there is a bug
>>>> related to setting borders on the row. In the oncreate for each cell
>>>> you could enter the following script:
>>>>
>>>> if( grpcnt != grpttl ){
>>>> //this.getStyle().backgroundColor = "red";
>>>> this.getStyle().borderBottomColor = "blue";
>>>> this.getStyle().borderBottomStyle = "solid";
>>>> this.getStyle().borderBottomWidth = "3pt";
>>>> }
>
Previous Topic:Error with standalone app and ODA driver
Next Topic:retrieve param from java
Goto Forum:
  


Current Time: Thu Apr 25 23:39:17 GMT 2024

Powered by FUDForum. Page generated in 0.03470 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top