使用SAP BO WEBI 4.2 SP3在sql中使用@Prompt

使用SAP BO WEBI 4.2 SP3在sql中使用@Prompt,sql,sap,business-intelligence,prompt,business-objects,Sql,Sap,Business Intelligence,Prompt,Business Objects,我正在运行一系列报告,其中查询中调用的时间窗口正在滚动,每个报告都有一个单独的时间窗口。。一些报告回顾了400天,另一些报告回顾了10周,而另一些报告再次回顾了-40天/+80天。。。等等——有很多选择。 所有报告都安排在每日或每周运行,这意味着设置提示将需要通过调度程序手动重置每个实例的提示。不是最优的 我知道universe designer可以设计特定的过滤器,以便使用查询设计器将其拖到查询中,但由于有这么多不同的选项,我发现universe designer应该为这些特定目的创建特定的过

我正在运行一系列报告,其中查询中调用的时间窗口正在滚动,每个报告都有一个单独的时间窗口。。一些报告回顾了400天,另一些报告回顾了10周,而另一些报告再次回顾了-40天/+80天。。。等等——有很多选择。 所有报告都安排在每日或每周运行,这意味着设置提示将需要通过调度程序手动重置每个实例的提示。不是最优的

我知道universe designer可以设计特定的过滤器,以便使用查询设计器将其拖到查询中,但由于有这么多不同的选项,我发现universe designer应该为这些特定目的创建特定的过滤器有点问题,为各种宇宙添加大量特定用途的特定过滤器

我想要的是一个选项,可以将计算分配给日期字段,该字段在每个计划实例的报告中保持固定

例如,查看今天之前400天及以后的发票日期,看起来就像DIM_TIME_INV.DAY_DAY>=sysdate-400-我可以将其硬编码到特定报表的SQl中,它将通过调度程序运行,并在报表运行的每一天滚动1天。但是,如果我决定对查询元素进行更改,那么SQl就完蛋了,我将不得不再次手动添加对SQl的修改

我找到了一个注册。@Prompt和的使用将要求universe designer尝试在我们的BO版本中对此进行沙箱处理。 当我不耐烦时,我试着使用以下基于链接文章示例4的代码

SELECT
  @select('DIM_TIME_INV.DAY_DAY') >= sysdate -(@prompt('Invoiced, days before today:','N',[DIM_TIME_INV.DAY_DAY],mono,free))
FROM
  DIM_TIME_INV
测试SQL会出现以下错误: ORA-00936 SAP kba 2054721

整个想法是拥有一个灵活但一致的维度,该维度将在每次运行报表时进行计算,而不会在向报表中添加新项时丢失代码

有人知道在SQL for SAP WEBI 4.2中使用@Prompt的方法吗或任何其他具有“灵活”时间维度的方式,其中可以独立设置起始日期或截止日期,甚至可以设置范围,而无需universe designer在各种universe中创建s**t过滤器和转储负载


谢谢//C

关于您的示例代码,我认为您的思路是正确的,但是您的语法有一些问题:

SELECT
  @select('DIM_TIME_INV.DAY_DAY') >= sysdate -(@prompt('Invoiced, days before today:','N',[DIM_TIME_INV.DAY_DAY],mono,free))
FROM
  DIM_TIME_INV
首先,@Select和@Prompt都必须引用universe对象,而不是列。两者的语法都是:类名\对象名。假设DIM_TIME_INV.DAY_DAY与名为DIM TIME的类中名为DAY DAY的宇宙对象相关联,则上述代码应为:

SELECT
  @select('Dim Time\Day Day') >= sysdate -(@prompt('Invoiced, days before today:','N','Dim Time\Day Day',mono,free))
FROM
  DIM_TIME_INV
还要注意,@prompt调用中的对象引用由单引号分隔,而不是括号

接下来,我假设DAY\u DAY是一个日期字段。它在@prompt调用中的引用将导致提示符显示一个值列表,源于DAY\u DAY。但是您需要的是提示中的数值,而不是日期,因此我将省略该选项,这将允许用户输入数值:

SELECT
  @select('Dim Time\Day Day') >= sysdate -(@prompt('Invoiced, days before today:','N',,mono,free))
FROM
  DIM_TIME_INV
接下来,即使使用了正确的语法,使用现有代码也会出现问题。调试@prompt问题的一个好方法是在出现错误后在WebI报告中查看SQL—SQL将显示呈现的结果,并扩展所有函数@select和@prompt。对于以上内容,您可能会得到如下SQL:

SELECT
  DIM_TIME_INV.DAY_DAY >= sysdate -(400)
FROM
  DIM_TIME_INV
当然,这是无效的-SELECT子句中不能有条件。如果这真的是一个条件,我认为它是,根据你的目标,那么它应该是一个预定义的条件,而不是一个维度

话虽如此,我认为你在做你想做的事情的正确轨道上。通过上述更正,您将拥有一个预定义的条件,可以将其放入报告中,这将使用户能够按报告的天数选择开始期间。您可以使用不同的逻辑创建其他提示,例如:

@select('Dim Time\Day Day') >= sysdate -(@prompt('Invoiced, weeks before today:','N',,mono,free) * 7)


谢谢!这是朝着正确方向的巨大推动。我已经咨询了我们的宇宙设计师,并要求他在宇宙层面上创建我需要的过滤器/预定义条件。SQL看起来是这样的:“DIM_TIME_INV.DAY_-DAY介于sysdate-1+@Prompt'invoited之间的日期,在今天之前的几天:'、'N'、、Mono、free和sysdate-1'-用于提示询问从今天到前天的x个天数。
@select('Dim Time\Day Day') 
BETWEEN sysdate - @prompt('Starting days ago:','N',,mono,free)
    AND sysdate - @prompt('Ending days ago:','N',,mono,free)