如何使用动态参数在 jaspersoft 中查询域

How to query domain in jaspersoft with Dynamic Parameters

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

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

请指教我是否在正确的轨道上。 基本上我想查询缓存数据,例如域视图,而不是直接访问数据库。

如果有解决此问题的方法,请提出建议。

请注意,尽管 JasperReports ServerAd Hoc ViewsAd Hoc Reports[=35 管理缓存=] 运行 在域上,运行 域上的 JRXML 报告(例如在 Jaspersoft Studio 中设计)不能保证命中该缓存。

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

无论如何,Domains 不是关系数据库,因此不支持直接 SQL。 不过,您可以使用 "Domain query language",它提供了 SQL 的一部分功能。编写查询的最简单方法是使用 Jaspersoft Studio 并在 语言 下拉列表中选择 "domain"( 数据集和查询对话框的左上角,由以下来自 Studio 6.4.0 的屏幕截图中的红色箭头指示):

例如,上面的设计(使用 Supermart 域,随示例数据一起提供)将生成此查询和所需的 "dynamic" 参数,如您所请求的——在这种情况下,作为过滤器的集合是 'Is One Of' 可以取多个值:

<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