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

时间:2017-01-17 21:50:30

标签: sql sap business-intelligence prompt business-objects

我正在运行一系列报告,其中查询中调用的时间窗口正在滚动,并且每个报告都有个人报告..有些报告看起来有400天回来,有些报告看起来是10周前,而其他报告看起来是-40天/ + 80天。 ..等等 - 很多选择。 所有报告都按日运行或每周运行,这意味着设置提示将需要通过调度程序手动重置每个实例的提示。不是最佳的。

我知道Universe设计员可以设计特定的过滤器来使用查询设计器拖入查询,但是有这么多不同的选项,我发现Universe设计师应该为这些特定目的创建特定过滤器的问题,为各种宇宙添加了大量特定用途的特定过滤器。

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

例如,查看今天及之后400天的发票日期看起来像Where DIM_TIME_INV.DAY_DAY >= sysdate -400 - 我可以硬编码到特定报告的SQl中,它将保留在调度程序中并滚动1天报告每天都在运行。但是如果我决定对查询元素进行更改,则SQl会被搞砸,我将不得不再次手动将修改添加到SQL中。

我找到了article reg。使用 @Prompt 并要求Universe设计师在我们的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

整个想法是拥有一个灵活但一致的维度,每次运行报告时都会计算,而不会在新报表添加到报表时丢失代码。

有没有人知道在SAP WEBI 4.2的SQL中使用 @Prompt 的方法? - 或者任何其他方式具有“灵活”的时间维度,可以独立设置一个日期或迄今为止甚至是一个范围,而不需要让Universe设计员创建过滤器和转储到各种宇宙中

谢谢// C

1 个答案:

答案 0 :(得分:1)

关于您的示例代码,我认为您的方法正确,但您的语法存在一些问题:

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 对象,而不是列。两者的语法是:class name\object name。假设DIM_TIME_INV.DAY_DAY与名为Day Day的类中名为Dim Time的Universe对象相关联,则上述代码应为:

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_DAY是一个日期字段。它在@prompt调用中的引用将导致提示显示源自DAY_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)

@select('Dim Time\Day Day') 
BETWEEN sysdate - @prompt('Starting days ago:','N',,mono,free)
    AND sysdate - @prompt('Ending days ago:','N',,mono,free)