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

Using @Prompt in sql using SAP BO WEBI 4.2 SP3

我正在 运行 收集一系列报告,其中查询中调用的时间 window 是滚动的,每个报告都是单独的。有些报告看起来是 400 天前,其他报告是 10 周前,而其他人再次查看 -40 天/+80 天...等等 - 许多选项。 所有报告都安排在每日或每周 运行 秒,这意味着设置提示将需要通过调度程序为每个实例手动重置提示。不是最优的。

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

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

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

我找到了一个 article 注册。 @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 的方法吗? - 或者任何其他具有 'flexible' 时间维度的方式,可以独立设置起始日期或截止日期甚至范围,而无需 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 都必须引用宇宙 对象 ,而不是列。两者的语法是:class name\object name。假设 DIM_TIME_INV.DAY_DAY 与名为 Dim Time 的 class 中的一个名为 Day Day 的 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 子句中包含条件。如果这真的是一个条件(我认为它是,基于你的objective),那么它应该是一个预定义条件而不是一个维度。

话虽如此,我认为您的目标是正确的。通过上述更正,您将拥有一个可以放入报告中的预定义条件,这将使用户能够 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)