我正在运行一系列报告,其中查询中调用的时间窗口正在滚动,并且每个报告都有个人报告..有些报告看起来有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
答案 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)