是否可以在 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