如何使用动态参数在 jaspersoft 中查询域
How to query domain in jaspersoft with Dynamic Parameters
我是 jaspersoft 报告的新手。我目前正在考虑以下要求来设计和开发报告。
我想创建基于模板的报告,其中我需要在 SQL 查询中传递所有动态参数。
我正在浏览 japsersoft 报告,我发现我们可以通过创建域来创建连接视图和缓存数据。从而减少数据库级别的命中。
创建报告时我发现我无法在域对象上执行 SQL 脚本。
请指教我是否在正确的轨道上。
基本上我想查询缓存数据,例如域视图,而不是直接访问数据库。
如果有解决此问题的方法,请提出建议。
请注意,尽管 JasperReports Server 为 Ad Hoc Views 和 Ad 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
我是 jaspersoft 报告的新手。我目前正在考虑以下要求来设计和开发报告。 我想创建基于模板的报告,其中我需要在 SQL 查询中传递所有动态参数。 我正在浏览 japsersoft 报告,我发现我们可以通过创建域来创建连接视图和缓存数据。从而减少数据库级别的命中。
创建报告时我发现我无法在域对象上执行 SQL 脚本。
请指教我是否在正确的轨道上。 基本上我想查询缓存数据,例如域视图,而不是直接访问数据库。
如果有解决此问题的方法,请提出建议。
请注意,尽管 JasperReports Server 为 Ad Hoc Views 和 Ad 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