我有一个如下的数据系列
年份 | 月 | 项目 | 销售数量 |
---|---|---|---|
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 计算来生成每月总计字段并在我的百分比变量中使用它。
您需要做的是使用
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"
。