我想查看 BIRT 报表设计器。如何为下面创建计算列?
A 列值为 A、B 和 C, B 列值为 0.25、0.33 和 0.21
我需要结果
B 列的总和 / A 列的行数,转换为 (0.25+0.33+0.21)/3
我只在 SQL 中尝试过,但不确定如何在 BIRT 中执行此操作
您可以使用以下表达式作为数据元素的一部分来执行此操作,该数据元素绑定到提供数据的数据集的 B 行:
Total.sum(dataSetRow["B"]) / Total.count(dataSetRow["B"]);
报告将使用您的示例数据将该表达式计算为 0,263。下面是一个最小的 BIRT 报告模板,其中包含提供示例数据的脚本数据源,可以将其保存为 .rptdesign 文件并在 BIRT 报告设计器中打开。
<?xml version="1.0" encoding="UTF-8"?>
<report xmlns="http://www.eclipse.org/birt/2005/design" version="3.2.24" id="1">
<property name="createdBy">Eclipse BIRT Designer Version 4.13.0.v202303021806</property>
<property name="units">in</property>
<property name="iconFile">/templates/blank_report.gif</property>
<property name="bidiLayoutOrientation">ltr</property>
<property name="imageDPI">96</property>
<data-sources>
<script-data-source name="scriptedDataSource" id="4525"/>
</data-sources>
<data-sets>
<script-data-set name="getSampleData" id="4543">
<list-property name="resultSetHints">
<structure>
<property name="position">1</property>
<property name="name">A</property>
<property name="dataType">string</property>
</structure>
<structure>
<property name="position">2</property>
<property name="name">B</property>
<property name="dataType">decimal</property>
</structure>
</list-property>
<list-property name="columnHints">
<structure>
<property name="columnName">A</property>
<text-property name="displayName">A</text-property>
</structure>
<structure>
<property name="columnName">B</property>
<text-property name="displayName">B</text-property>
</structure>
</list-property>
<structure name="cachedMetaData">
<list-property name="resultSet">
<structure>
<property name="position">1</property>
<property name="name">A</property>
<property name="dataType">string</property>
</structure>
<structure>
<property name="position">2</property>
<property name="name">B</property>
<property name="dataType">decimal</property>
</structure>
</list-property>
</structure>
<property name="dataSource">scriptedDataSource</property>
<method name="open"><![CDATA[count = 0;
colA = ["A","B","C"];
colB = [0.25, 0.33, 0.21];]]></method>
<method name="fetch"><![CDATA[if(count < 3){
row["A"] = colA[count];
row["B"] = colB[count];
count++;
return true;
}
return false;
]]></method>
</script-data-set>
</data-sets>
<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>
<data id="4562">
<property name="dataSet">getSampleData</property>
<list-property name="boundDataColumns">
<structure>
<property name="name">A</property>
<text-property name="displayName">A</text-property>
<expression name="expression" type="javascript">dataSetRow["A"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">B</property>
<text-property name="displayName">B</text-property>
<expression name="expression" type="javascript">dataSetRow["B"]</expression>
<property name="dataType">decimal</property>
</structure>
<structure>
<property name="name">SumA_div_by_countB</property>
<text-property name="displayName">SumB_div_by_countB</text-property>
<expression name="expression" type="javascript">result = "";
try {
result = Total.sum(dataSetRow["B"]) / Total.count(dataSetRow["B"]);
}
catch (error) {
result = error;
}
result;</expression>
<property name="dataType">string</property>
<property name="allowExport">true</property>
</structure>
</list-property>
<property name="resultSetColumn">SumA_div_by_countB</property>
</data>
</body>
</report>