点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我正在从CPI-DS任务的IBP计算方案中提取数据。 如您所知,在从IBP提取数据时,我们需要小心,因为错误的选择查询会影响性能。 想象一下,我想使用" CUSTOMERID"上的where条件查询表。 该客户ID将通过全局变量$ CUSTOMERID作为CPI-DS任务的输入。 如果业务用户提供客户ID作为输入,则此方法很好。 将where条件下推到IBP,但是如果业务用户未对此参数输入,则无论customerid为null还是customerid不为null,cpi-ds仍应从IBP提取所有数据。 如何在CPI-DS中实现这一目标?
当然,当$ customerid为空时,我可以初始化标志$ inputgiven = 0,并使用以下where条件。
(0 = $ inputgiven或ibp.customerid = $ customerid)
但是这种情况不会将 ibp.customerid = $ customerid 下推到IBP,这会影响性能,因为IBP必须先查询所有数据并将其发送到CPI-DS,然后再发送到CPI-DS 应该在数据集上应用where过滤器。
创建多个数据流不是一个选择,因为我可能有很多其他情况,而且我无法为这些过滤器的每个组合都创建数据流。 它只是不可操纵的。
有什么想法吗?
关于,
砂纸
最简单的方法是定义两个全局变量$ G_CUSTOMER_FROM和$ G_CUSTOMER_TO,其默认值为'A'和'ZZZ'(或'0'和'99999999')。 它们都可以被特定的客户ID覆盖。 筛选条件为CUSTID> = $ G_CUSTOMER_FROM和CUSTID <= $ G_CUSTOMER_TO。 我假设此过滤条件已下推到IBP。
或者,您也可以添加第三个全局参数$ G_CUSTOMER,如果$ G_CUSTOMER为$ G_CUSTOMER_FROM和$ G_CUSTOMER_TO的值,则覆盖它们 填充。 在那种情况下,所有三个参数对于计划作业的用户都是可见的。
我还尝试在Filter中进行以下操作:
ibp.customerid = nvl($ customerid,ibp.customerid)
这有效,但过滤器未下推至IBP。 对我而言,将此过滤器推至IBP非常重要,因为真正的计算在那里发生。
任何想法 Jeff Kresse 吗?
嗨,Sandesh,
您可以在过滤条件下使用IS NULL函数。
选中此链接。
谢谢
Manoj
我正在考虑,但可能有 下推的局限性。 CPI-DS中的许多功能(包括nvl)在IBP/HANA中将不可用。 我认为它将只需要在指定值和列值(=,<等)或IN语句之间进行in/相等比较。 可能最好向IBP专家咨询一下,我可以在内部进行提高。
能否在预加载脚本中使用变量设置过滤器字符串,然后将该变量输入为(或部分) 的过滤条件? 例如:
假定您有一个默认的$ CUSTOMERID 空字符串,它将作为过滤器通过空字符串,从而使IBP的查询结果不受限制。 如果$ CUSTOMERID具有某个值,则可以使用ifthenelse的最后一个参数中内置的字符串。 然后,将字符串打印在跟踪日志中,以便您每次都知道如何处理作业逻辑。
我期望IBP最有可能将HANA作为数据库,因此将nvl函数转换为 下推期间为ISNULL。 的确,与此同时,我也引发了一次SAP事件。 感谢您在内部进行检查!
一周热门 更多>