Jasper 报告组并计算每组占总数的百分比

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

我有一个如下的数据系列

年份 项目 销售数量
2020 一月 苹果 2
2020 一月 香蕉 3
2020 二月 苹果 1
2020 二月 香蕉 3
2020 三月 苹果 5
2020 三月 香蕉 0
2021 一月 苹果 5
2021 一月 香蕉 3
2021 二月 苹果 2
2021 二月 香蕉 7
2021 三月 苹果 5
2021 三月 香蕉 2

我正在对数据进行分组 按年份 然后 按月 然后 按物品类型

我想将每个商品的销售额百分比显示为每月总额的函数。然而,鉴于我在月份分组上使用变量重置来计算该月的总销售额,这是有问题的。然后我尝试使用

F{SalesCount}/v{Total_Monthly_Sales}/100

作为 v{Percent_of_Total} 但由于该变量仍在内部项目行期间动态计算,基本上第一个项目为 100,然后每个后续项目都是递增计数的百分比......并且无效。每月组生成完成后,总销售额才真正有效。我能看到的唯一解决方案是使用 sql 计算来生成每月总计字段并在我的百分比变量中使用它。

sql jasper-reports
1个回答
0
投票

您需要做的是使用

evaluationTime="Auto"
作为文本字段,该文本字段显示基于当前字段值和每月组总计的百分比公式。

类似这样的:

<variable name="Total_Monthly_Sales" class="java.lang.Integer" resetType="Group" resetGroup="Month" calculation="Sum">
    <variableExpression><![CDATA[$F{SaleCount}]]></variableExpression>
</variable>
...
        <textField evaluationTime="Auto" pattern="#,##0.##">
            <reportElement x="400" y="0" width="100" height="30" uuid="42be2bf2-495e-4ec9-afbe-6ea99bb6ec34"/>
            <textFieldExpression><![CDATA[$F{SaleCount} * 100f / $V{Total_Monthly_Sales}]]></textFieldExpression>
        </textField>

请注意,只有当您直接在文本字段表达式中使用字段和变量时,这才有效,为百分比值创建单独的变量将不允许您使用

evaluationTime="Auto"

© www.soinside.com 2019 - 2024. All rights reserved.