如何在 Jaspersoft 中为非空字段创建一个计数器?

How to create a counter for non empty fields in Jaspersoft?

我有一些文本字段使用字符串变量,它用 "getAndIncrement()" 递增一个原子整数,我用它作为我的脚注,在字符串变量的文本之后我在我的 Report_Parameters_Map 中放置了一些映射,供将来使用。

问题是有时文本字段是空白的,但即使它们没有显示,我的原子整数也在递增,因为变量正在执行递增。所以我有这样的东西:

text 1 text.
text 2 text.
(third is blank)
text 4 text.

这是错误的,因为当我要引用脚注时,它显示的是根本不存在的脚注注释,就像那样:

WRONG                                         RIGHT
text 1.                                       text 1.
(second is blank)                             (second is blank)
text 3.                                       text 2.

note 1...                                     note 1...
note 2... (this one should not appear)        (second is ignored, but third has its number)
note 3...                                     note 2...

我需要变量不执行,或类似的东西。

您可以在 jrxml 中定义一个变量来为您计数。假设您的字段名称是类型 Stringfield1 并且您只希望在字段值不为 null 且不为空时递增计数器,则三元表达式将为。

<variable name="CntNonEmpty" class="java.lang.Integer" calculation="Sum">
  <variableExpression><![CDATA[$F{field1}!=null&&!$F{field1}.isEmpty()?1:0]]></variableExpression>
</variable>

完整 jrxml

<?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="Blank_A4_1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="149d63d1-922f-4b19-a2c4-ee1805064f26">
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="field1" class="java.lang.String"/>
    <variable name="CntNonEmpty" class="java.lang.Integer" calculation="Sum">
        <variableExpression><![CDATA[$F{field1}!=null&&!$F{field1}.isEmpty()?1:0]]></variableExpression>
    </variable>
    <detail>
        <band height="32" splitType="Stretch">
            <printWhenExpression><![CDATA[$F{field1}!=null && !$F{field1}.isEmpty()]]></printWhenExpression>
            <textField>
                <reportElement x="0" y="0" width="250" height="30" uuid="5f65fa92-ba25-4aba-a728-9b14e72572f4"></reportElement>
                <textElement verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{field1} + " " + $V{CntNonEmpty}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

输出

数据源包含 3 行(2 行为空)

textA

textB