如何在 Web Intelligence 报表中支持相对日期参数

How to support relative date parameters in Web Intelligence Report

我们有许多 Crystal Reports 2011 报告,这些报告当前由自定义 .Net Winforms 计划应用程序自动执行和导出。这些报告都使用 SQL 命令和手工制作的 SQL 来针对我们无法修改的第三方架构获得最佳性能。

许多报告包含日期参数,这些参数通常设置为前一个工作日或上个月的开始等,执行报告时要应用于这些参数的值由根据当前日期安排应用程序。这些参数是SQL级参数,目的是减少从DB返回的结果集。

我们现在必须将 Crystal 报告迁移到 Business Objects。为了保持报表 SQL 的性能,我们希望在 Web Intelligence 报表或最小 Universe 中的派生表中重新使用来自 Crystal 报表的 Freehand SQL -我们不想针对目标模式创建 Universe。

我们需要能够每天自动安排 Webi 报告,计算并传入基于日期的参数,并以 Excel 和 PDF 格式导出结果,因为它们是今天(用户将无法通过 Web 界面访问 - 他们只会从网络驱动器中获取导出文件)。理想情况下,我们希望保留参数,以便报告可以 运行 临时针对不同的日期范围。

我想知道的是,BI技术应该如何最好地支持这种参数化和自动默认值计算?我似乎无法使用 @Prompt() 函数获得默认值,并且当每天刷新报告时,无论如何都不会有用户响应提示。这里最好的方法是什么?

我最终设法确定了一种做我需要的方法。

使用 BO4.2 信息设计工具,我执行了以下步骤来支持 Start Of Last Month 和 End Of Last Month 动态报表参数:

1) 在数据基础中,创建一个名为 StartOfLastMonth 的新参数,勾选 "Prompt to users" 复选框(这允许在需要时手动覆盖默认值)。

2) 勾选参数选项选项卡底部的 "Set default values" 复选框,然后单击 "Formula" 单选按钮。

3) 单击公式栏右侧的省略号,输入表达式:

RelativeDate(RelativeDate(RelativeDate(CurrentDate();-DayNumberOfMonth(CurrentDate()));1);-1;MonthPeriod)

4) 根据我的 Crystal 报告命令 SQL 创建派生 Table,并在 Where 子句中引用此参数:

where l.datetime >= @Prompt(StartOfLastMonth)

5) 将我的报表的派生 Table 添加到业务层并将业务层发布到存储库。

6) 在 Webi 中针对已发布的 Universe 创建一个新报表,并在报表查询中使用 Derived Table。执行报表时,会弹出开始日期提示,其中动态计算的日期等于上个月的开始。这可以手动更改为任何其他日期,或保持原样。安排报告时,默认使用此动态日期值。