基于变量

时间:2018-05-11 16:25:07

标签: jasper-reports

我试图根据计算的数据在报告中对JasperReports中的数据进行分组。

我有一组活动数据。下面是一个高度简化的数据设置。 Step只是按字段排序(在我的实际数据中,它是一个开始时间)。 Phase(此处简化为3,但实际上更多)表示活动是离开(D),途中(E)还是到达(A)。 IdealBlock是我想要对活动进行分组的内容,但数据库中没有实际字段。如您所见,出发指示一个新块,并且所有后续行具有相同的块编号,直到下一次出发(实际业务逻辑更复杂)。

 Step  Phase  IdealBlock
  1      D        1
  2      E        1
  3      E        1
  4      A        1
  5      D        2
  6      E        2
  7      E        2
  8      A        2

由于没有真正的IdealBlock字段,我希望能够计算块并具有块页脚。我已经制作了一个报告版本,该报告使用$F{IdealBlock}表示群组表达式,而看起来很好与预期的2个群组。

但是,我的实际数据没有该字段。我试图创建一个" Block"变量来计算它:

Initial Value Expression: 1
Variable Expression: $V{Block} + ("D".equalsIgnoreCase($F{Phase}) ? 1 : 0)

或者如果您更喜欢JRXML:

    <variable name="Block" class="java.lang.Integer">
        <variableExpression><![CDATA[$V{Block} +
("D".equalsIgnoreCase($F{Phase}) ? 1 : 0)]]></variableExpression>
        <initialValueExpression><![CDATA[0]]></initialValueExpression>
    </variable>

当我使用$V{Block}作为群组表达时,每行都会成为自己的群组。我希望它与我使用$F{IdealBlock}时的工作方式相同(或几乎相同)。

所以我想知道:

  • 为什么?这是由于某些报告生命周期中的组表达式是在某个时间计算的,而不是我想的时候吗?或者,在两种情况下,Group Expression的结果以某种方式使用不同。
  • 有没有更好的方法来动态计算价值?

这是示例JRXML文件,其中包含查询的SELECT部分​​中包含的数据。我使用的是JasperReports 5.6和SQL Server 2014,不过我也在JasperReports 6.3上尝试过相同的行为。

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TestGroupWithVariable" language="groovy" pageWidth="612" pageHeight="792" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="765c6d1b-f59c-42c7-93a2-834625a91271">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <queryString>
        <![CDATA[SELECT 1 as Step, 'D' AS Phase, 1 as IdealBlock
UNION SELECT 2, 'E', 1
UNION SELECT 3, 'E', 1
UNION SELECT 4, 'A', 1
UNION SELECT 5, 'D', 2
UNION SELECT 6, 'E', 2
UNION SELECT 7, 'E', 2
UNION SELECT 8, 'A', 2]]>
    </queryString>
    <field name="Step" class="java.lang.Integer"/>
    <field name="Phase" class="java.lang.String"/>
    <field name="IdealBlock" class="java.lang.Integer"/>
    <variable name="Block" class="java.lang.Integer">
        <variableExpression><![CDATA[$V{Block} +
("D".equalsIgnoreCase($F{Phase}) ? 1 : 0)]]></variableExpression>
        <initialValueExpression><![CDATA[0]]></initialValueExpression>
    </variable>
    <group name="Block">
        <groupExpression><![CDATA[$F{IdealBlock}]]></groupExpression>
        <groupHeader>
            <band height="22">
                <textField>
                    <reportElement x="451" y="0" width="57" height="20" uuid="f4620cd3-77ee-45e8-ad7e-d171e84b45ad"/>
                    <textFieldExpression><![CDATA[$V{Block}]]></textFieldExpression>
                </textField>
                <staticText>
                    <reportElement x="400" y="0" width="51" height="20" uuid="452d3259-ce0d-44d7-9b31-744612dc68f4"/>
                    <text><![CDATA[Block Var]]></text>
                </staticText>
                <line>
                    <reportElement x="0" y="15" width="570" height="1" uuid="e220ec89-82c3-40fb-ba74-a5c55987e810"/>
                    <graphicElement>
                        <pen lineWidth="2.0"/>
                    </graphicElement>
                </line>
                <textField>
                    <reportElement x="51" y="0" width="100" height="20" uuid="3036504c-a816-4692-9bda-d4a35ca62d5a"/>
                    <textFieldExpression><![CDATA[$F{IdealBlock}]]></textFieldExpression>
                </textField>
                <staticText>
                    <reportElement x="0" y="0" width="51" height="20" uuid="a8c7ad92-af7b-4e86-8666-56ca0a91ed71"/>
                    <text><![CDATA[Ideal Blk]]></text>
                </staticText>
            </band>
        </groupHeader>
        <groupFooter>
            <band height="25">
                <textField>
                    <reportElement x="188" y="0" width="100" height="20" uuid="7f7ecb95-3178-467c-b13f-058dfcd122fd"/>
                    <textFieldExpression><![CDATA["END BLK " + $V{Block}]]></textFieldExpression>
                </textField>
                <line>
                    <reportElement x="0" y="0" width="570" height="1" uuid="52270f1e-069c-4684-a546-37acdea2def4"/>
                </line>
            </band>
        </groupFooter>
    </group>
    <detail>
        <band height="25" splitType="Stretch">
            <staticText>
                <reportElement x="110" y="0" width="40" height="20" uuid="02df6d93-4270-4edd-9540-b48a64173a22"/>
                <text><![CDATA[Phase]]></text>
            </staticText>
            <textField>
                <reportElement x="150" y="0" width="70" height="20" uuid="12983d11-44af-4d11-9528-f87794056c8c"/>
                <textFieldExpression><![CDATA[$F{Phase}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="21" y="0" width="30" height="20" uuid="c8ea21cc-b260-4e93-bf1d-3ce293ee63e8"/>
                <text><![CDATA[Step]]></text>
            </staticText>
            <textField>
                <reportElement x="51" y="0" width="54" height="20" uuid="d8e93236-f7a4-48ed-8174-fe2fcb51bcbc"/>
                <textFieldExpression><![CDATA[$F{Step}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="222" y="0" width="62" height="20" uuid="8edc5a1c-120c-4186-bbe6-f5adfc155209"/>
                <text><![CDATA[IdealBlock]]></text>
            </staticText>
            <textField>
                <reportElement x="284" y="0" width="62" height="20" uuid="d6ef4317-9aa2-449e-bb42-35c30ea80a5f"/>
                <textFieldExpression><![CDATA[$F{IdealBlock}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="451" y="2" width="57" height="20" uuid="368be047-58c3-432d-b5bd-ea0653aa5b06"/>
                <textFieldExpression><![CDATA[$V{Block}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="400" y="2" width="51" height="20" uuid="f70c15a3-be06-4205-abe9-a657620ba700"/>
                <text><![CDATA[Block Var]]></text>
            </staticText>
        </band>
    </detail>
</jasperReport>

0 个答案:

没有答案