如何使用动态参数

时间:2018-05-18 07:47:10

标签: jasper-reports jasperserver

我是jaspersoft报道的新手。我目前正在考虑以下要求设计和开发报告。 我想创建基于模板的报告,其中我需要在SQL查询中传递所有动态参数。 我正在浏览japsersoft报告,我发现我们可以通过创建域来创建连接视图和缓存数据。这样就可以减少db级别的命中率。

在创建报告时,我发现我无法在Domain对象上执行SQL脚本。

请告知我是否正确。 基本上我想查询域视图等缓存数据,而不是直接命中DB。

请建议是否有针对此问题的解决方法。

1 个答案:

答案 0 :(得分:2)

请注意,虽然 JasperReports Server 管理域上运行的 Ad Hoc Views Ad Hoc Reports 的缓存,但运行JRXML报告( (例如,在Jaspersoft Studio中设计)在域上并不保证能够访问该缓存。

您还可以选择使用在JasperReports Server和数据库之间提供缓存的图层。例如,最近在第7版中为TIBCO Data Virtualization(非免费产品)添加了支持,请参阅https://www.jaspersoft.com/introducing-jaspersoft-7

在任何情况下,域都不是关系数据库,因此不支持直接SQL。 您可以使用“域查询语言”,它提供SQL的一部分功能。编写查询的最简单方法是使用Jaspersoft Studio并在 Language 下拉列表中选择“domain”(数据集和查询对话框的左上角,由红色表示) Studio 6.4.0中截图中的箭头:

Screenshot of Dataset and Query Dialog in Jaspersoft Studio

例如,上面的设计(使用Supermart Domain,随样本数据提供)将生成此查询和您请求的所需“动态”参数 - 在这种情况下,作为过滤器的集合是'其中之一'这可能需要多个值:

<query>
    <queryFields>
        <queryField id="sales_fact_ALL.sales__product.sales__product__product_name"/>
        <queryField id="sales_fact_ALL.sales_fact_ALL__store_sales_2013"/>
    </queryFields>
    <queryFilterString>sales_fact_ALL.sales__store.sales__store__region.sales__store__region__sales_country in sales__store__region__sales_country_0</queryFilterString>
</query>

请参阅此处查看另一个查询示例(基于7.1.0版本的当前版本的文档),在本例中与REST API一起使用:https://community.jaspersoft.com/documentation/tibco-jasperreports-server-rest-api-reference/v710/queryexecutor-service

queryFilterString标记遵循此处记录的DomEL语法(也适用于7.1.0):https://community.jaspersoft.com/documentation/tibco-jasperreports-server-user-guide/v71/domel-syntax