是否可以在 Jasper ReportServer 中使用 SQL 窗口函数?

Posted

技术标签:

【中文标题】是否可以在 Jasper ReportServer 中使用 SQL 窗口函数?【英文标题】:Is it possible to use SQL window functions with Jasper ReportServer? 【发布时间】:2013-06-16 13:50:51 【问题描述】:

关于 Jasper ReportServer 5.1 及其 DomEL(域表达式语言)的问题。

我有一个只有一张表的域。 T 是一个表,(day 日期,value 数字)是 Oracle 中的列及其类型。

所以,如果我尝试使用表达式在我的域中创建新的“计算字段”:

first_value(value) over (order by day)

出现错误消息:

Found 'over' after end of expression

我认为的主要原因:

http://community.jaspersoft.com/documentation/sql-functions

引用:

您可以在 DomEL 表达式中使用 SQL 函数,但仅限于有限的情况:

• 数据库必须支持这些功能。有关可用函数及其语法,请参阅供应商文档。 • 函数必须遵循逗号分隔参数约定。例如,您可以使用 TRIM(person.name),但不能使用 TRIM('Jr' FROM person.name) • 返回值的类型必须合适,无论是在表达式中还是对于计算字段的类型。 • SQL 上下文必须适合函数。例如,您不能在计算字段中使用 COUNT 等聚合函数,因为没有 GROUP BY 子句。 除了逗号分隔的参数模式,DomEL 验证不能强制这些标准。您必须确保任何 SQL 函数都满足这些条件,否则表达式在使用域创建报告时会导致错误。

我的问题是这种“强制”的结果吗?

如何使用 SQL 窗口函数构造计算字段?

Jasper 有什么方法可以实现 first_value/last_value/lead/lag 效果?

谢谢!

【问题讨论】:

我不熟悉 Jasper,但我认为作为最后的手段,您总是可以将逻辑放在视图中。 谢谢你,jonearles,但我不能这样做,因为日期范围取决于用户输入。如果我决定将逻辑放在视图中,我必须同意结果不取决于用户选择的时间段。因此,使用 last_value 或任何窗口函数根本没有任何好处。 【参考方案1】:

这是绝对不可能的。很伤心。

【讨论】:

以上是关于是否可以在 Jasper ReportServer 中使用 SQL 窗口函数?的主要内容,如果未能解决你的问题,请参考以下文章

使用 T-SQL 的 ReportServer 数据库中的 s-s-rS 站点 URL

如何将 Jasper Report 输出直接存储在数据库表中,中间没有任何步骤

ReportServer中的字符无效

如何查找特定报告的上次运行时间

ReportServer中提供的程序调用的导出报告功能

Dynamics 365 安装Reporting Extension报没有找到服务ReportServer$SSRS