BIRT 报表设计器计算列

问题描述 投票:0回答:1

我想查看 BIRT 报表设计器。如何为下面创建计算列?

A 列值为 A、B 和 C, B 列值为 0.25、0.33 和 0.21

我需要结果

B 列的总和 / A 列的行数,转换为 (0.25+0.33+0.21)/3

我只在 SQL 中尝试过,但不确定如何在 BIRT 中执行此操作

sql mariadb birt
1个回答
0
投票

您可以使用以下表达式作为数据元素的一部分来执行此操作,该数据元素绑定到提供数据的数据集的 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 = "";&#13;
try {&#13;
    result = Total.sum(dataSetRow["B"]) / Total.count(dataSetRow["B"]);&#13;
}&#13;
catch (error) {&#13;
    result = error;&#13;
}&#13;
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>
© www.soinside.com 2019 - 2024. All rights reserved.