如何在不执行其他查询的情况下使图表中的计数与众不同?

tw

我正在使用jaspersoft studio 6.2。我已将条形图放在摘要区域中,如何设置它以计算值表达式中某个字段的不同之处?例如

我有此查询/数据集:

select 'xx' as UsageDate, 'a' as ProductName, 1 as CustomerKey
    union all select 'xx' as UsageDate, 'b' as ProductName, 1 as CustomerKey
    union all select 'xx' as UsageDate, 'a' as ProductName, 2 as CustomerKey
    union all select 'yy'as UsageDate, 'a' as ProductName, 1 as CustomerKey
    union all select 'yy' as UsageDate, 'b' as ProductName, 3 as CustomerKey

我想要实现的是

select usagedate, productname, count(distinct customerkey) as val from (
    select 'xx' as UsageDate, 'a' as ProductName, 1 as CustomerKey
    union all select 'xx' as UsageDate, 'b' as ProductName, 1 as CustomerKey
    union all select 'xx' as UsageDate, 'a' as ProductName, 2 as CustomerKey
    union all select 'yy'as UsageDate, 'a' as ProductName, 1 as CustomerKey
    union all select 'yy' as UsageDate, 'b' as ProductName, 3 as CustomerKey    
    ) as t
    group by usagedate, productname

usagedate是类别,productname是系列。如何将图表中的值设置为count(distinct customerkey)我知道我可以使用第二个查询作为数据集,并将val字段设置为图表中的值,但是我还需要在报表中显示详细信息,因此只希望使用一个查询/数据集来完成所有操作。

这可能吗?

佩特·弗里伯格

您的图表需要一个数据源,因此毫无疑问,在subdatset中执行另一个查询是最简单的方法。但是,如果您不喜欢重新查询,则另一个解决方案是使用报表scriptlet

创建一个扩展JRDefaultScriptlet的类,以覆盖afterDetailEval从您的字段中获取的值,存储该值及其计数。

然后让您的脚本返回图表JRDataSource

编辑:作为在注释中要求的简单示例

散文集

public class CountScriptlet extends JRDefaultScriptlet {

    private static final String COUNT_FIELD = "fieldNameYouLikeToCount";

    //Map to hold our count and dataset
    private Map<String,CountResult> ds = new HashMap<String, CountResult>(); 

    @Override
    public void afterDetailEval() throws JRScriptletException
    {
        String key = (String)this.getFieldValue(COUNT_FIELD);
        CountResult cr = ds.get(key); //Check if we have it
        if (cr==null){
            cr = new CountResult(key); //No, then create it count = 0
            ds.put(key, cr);
        }
        cr.increment(); //Increment it (new 0-->1, old i-->i+1

    }   
    public JRBeanCollectionDataSource getDataSource(){
        return new JRBeanCollectionDataSource(ds.values()); //Return our class as datasource, if you need to sort'em use Collections
    }
}

保持计数的类

public class CountResult {

    private String description;
    private int count;

    public CountResult(String description) {
        this.description = description;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }

    public void increment(){
        count++;
    }
}

告诉jrxml使用scriplet(您需要指出完整的类名称,包括程序包名称)

jasperReport标签集中scriptletClass="CountScriptlet"

定义子数据集

<subDataset name="countDatasource" uuid="f6b4337c-45f4-4fc6-909a-ffbbef3a1b2f">
    <field name="description" class="java.lang.String"/>
    <field name="count" class="java.lang.Integer"/>
</subDataset>

在需要的地方使用数据源(piechart,表等)

<datasetRun subDataset="countDatasource" uuid="92579588-802b-4073-a5ee-79672c9b6e66">
    <dataSourceExpression><![CDATA[$P{REPORT_SCRIPTLET}.getDataSource()]]></dataSourceExpression>
</datasetRun>

唯一的限制是,该报告需要填写详细信息区域(完计数),所以你可以在使用summary带或reportElementevaluationTime="Report"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Python 2中如何在不继承的情况下重用其他类的方法?

来自分类Dev

如何在不延迟所有其他功能的情况下延迟 Pygame 中的事件?

来自分类Dev

如何在不接触其他元素的情况下更新d3中的单个数据点?

来自分类Dev

如何在不覆盖Codeigniter中其他会话的情况下使用会话向外键插入值?

来自分类Dev

如何在不扭曲该 div 中的其他对象的情况下扩展 div 并插入新文本?

来自分类Dev

如何在不添加其他tspan的情况下重置SVG tspan定位

来自分类Dev

如何在不破坏其他内容的情况下修复“ element.dispatchEvent不是函数”?

来自分类Dev

如何在不导致iTunes /其他音频暂停的情况下播放视频

来自分类Dev

如何在不创建其他样式的情况下居中放置文本

来自分类Dev

如何在不购买其他工具的情况下克隆虚拟机?

来自分类Dev

如何在不覆盖其他文件的情况下将文件提取到“ / usr”目录?

来自分类Dev

Swift:如何在不增强其他对象的情况下创建对它的引用?

来自分类Dev

如何在不添加其他tspan的情况下重置SVG tspan定位

来自分类Dev

Make-如何在不抑制其他输出的情况下抑制make错误消息

来自分类Dev

如何在不更改其他行的情况下将 TableRow 添加到 TableLayout

来自分类Dev

如何在不创建其他类的情况下访问 Dialog 的视图

来自分类Dev

如何在不执行几个连续查询的情况下对其进行解释?

来自分类Dev

如何在不执行数据库查询的情况下创建新记录?

来自分类Dev

如何在不声明XML的情况下执行子查询?

来自分类Dev

如何在不执行几个连续查询的情况下对其进行解释?

来自分类Dev

如何在其他情况下使用Firebase查询

来自分类Dev

如何在聚合后不将其他列包括在GROUP BY中的情况下将其他列添加到SELECT查询中?

来自分类Dev

如何在不运行.exe的情况下从.exe(可执行文件)获取版本,作者,发布者等以及其他元数据

来自分类Dev

如何在不列出表中所有其他列的情况下从选择的不同对象中排除GUID?

来自分类Dev

python:MYSQLdb。如何在不执行大表中的select *的情况下获取列名?

来自分类Dev

如何在不执行mysql db query的情况下从缓存中获取数据

来自分类Dev

如何在不使用其他变量的情况下防止“ useEffect”中无用的更新请求

来自分类Dev

如何在没有其他进程重叠的情况下从进程中打印内容?

来自分类Dev

如何在不删除其他变量的情况下更新Java中的属性值

Related 相关文章

  1. 1

    在Python 2中如何在不继承的情况下重用其他类的方法?

  2. 2

    如何在不延迟所有其他功能的情况下延迟 Pygame 中的事件?

  3. 3

    如何在不接触其他元素的情况下更新d3中的单个数据点?

  4. 4

    如何在不覆盖Codeigniter中其他会话的情况下使用会话向外键插入值?

  5. 5

    如何在不扭曲该 div 中的其他对象的情况下扩展 div 并插入新文本?

  6. 6

    如何在不添加其他tspan的情况下重置SVG tspan定位

  7. 7

    如何在不破坏其他内容的情况下修复“ element.dispatchEvent不是函数”?

  8. 8

    如何在不导致iTunes /其他音频暂停的情况下播放视频

  9. 9

    如何在不创建其他样式的情况下居中放置文本

  10. 10

    如何在不购买其他工具的情况下克隆虚拟机?

  11. 11

    如何在不覆盖其他文件的情况下将文件提取到“ / usr”目录?

  12. 12

    Swift:如何在不增强其他对象的情况下创建对它的引用?

  13. 13

    如何在不添加其他tspan的情况下重置SVG tspan定位

  14. 14

    Make-如何在不抑制其他输出的情况下抑制make错误消息

  15. 15

    如何在不更改其他行的情况下将 TableRow 添加到 TableLayout

  16. 16

    如何在不创建其他类的情况下访问 Dialog 的视图

  17. 17

    如何在不执行几个连续查询的情况下对其进行解释?

  18. 18

    如何在不执行数据库查询的情况下创建新记录?

  19. 19

    如何在不声明XML的情况下执行子查询?

  20. 20

    如何在不执行几个连续查询的情况下对其进行解释?

  21. 21

    如何在其他情况下使用Firebase查询

  22. 22

    如何在聚合后不将其他列包括在GROUP BY中的情况下将其他列添加到SELECT查询中?

  23. 23

    如何在不运行.exe的情况下从.exe(可执行文件)获取版本,作者,发布者等以及其他元数据

  24. 24

    如何在不列出表中所有其他列的情况下从选择的不同对象中排除GUID?

  25. 25

    python:MYSQLdb。如何在不执行大表中的select *的情况下获取列名?

  26. 26

    如何在不执行mysql db query的情况下从缓存中获取数据

  27. 27

    如何在不使用其他变量的情况下防止“ useEffect”中无用的更新请求

  28. 28

    如何在没有其他进程重叠的情况下从进程中打印内容?

  29. 29

    如何在不删除其他变量的情况下更新Java中的属性值

热门标签

归档