0

当输入参数为空时,我想显示所有数据。

我可以在计算视图的过滤器表达式中使用以下代码。但是,当我在输入参数中传递一个值时,它不起作用。

if('$$CTUSER$$' = '',match("USER",'*'),in("USER", '$$CTUSER$$'))

请注意,$$IP_DE_CTUSER$$ 周围有单引号。

当我如下删除 $$ IP_DE_CTUSER $$ 周围的单引号时,传递的值被正确过滤,但是当参数留空时,它不起作用。

if($$CTUSER$$ = '',match("USER",'*'),in("USER", $$CTUSER$$))

我究竟做错了什么?我怎样才能使它工作?

下面是我的测试数据:

CREATE COLUMN TABLE TEST_IP_FILTER (
RESQTSN VARCHAR(30),COL1 VARCHAR(1),COL2 VARCHAR(1),COL3 VARCHAR(1),COL4 VARCHAR(1),COL5 VARCHAR(1),COL6 VARCHAR(1),COL7 VARCHAR(1),COL8 VARCHAR(10),USER VARCHAR(10));

INSERT INTO TEST_IP_FILTER VALUES ('00000000000000000000000', 'E', 'E', 'R', 'R', 'E', 'R', 'R', 'SD_000456', 'JACK');
INSERT INTO TEST_IP_FILTER VALUES ('00000000000000000000000', 'N', 'N', 'R', 'N', 'N', 'N', 'N', 'SFD_000486', 'HENRY');
INSERT INTO TEST_IP_FILTER VALUES ('00000000000000000000000', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'SFD_000489', 'PAUL');

计算视图:

输入参数

过滤器表达式

计算视图

4

2 回答 2

2

输入参数名称周围的单引号需要保留以使它们正常工作。

我使用 HANA 2 SP04 测试了您的场景,发现它适用于所有三种参数规范情况:

  • 带有实际过滤器值的参数,例如 ('PLACEHOLDER' = ('$$ProductID$$', 'DB-1081'))

  • 以空字符串提供的参数(表示没有选择),例如('PLACEHOLDER' = ('$$ProductID$$', ''))

  • 未提供参数值

所有这些都按预期工作。

为了使过滤条件更有弹性,我把它改成了这个(注意我过滤了ProductID,但你明白了):

if( '$$ProductID$$'= '' or isNULL('$$ProductID$$')
   , 1=1
   , in("PRODUCTID", '$$ProductID$$')
  )

我没有使用条件,而是match()使用常量1=1表达式使其更清楚,这应该始终解决TRUE(并减少计算工作量)。

(请注意,可以在表达式编辑器中包含换行符,我强烈建议这样做以保持表达式的可读性。
另一条评论:IP_输入参数或值的符号不是强制性的。因为没有办法混淆那些有列名的,我看不到使用这样的前缀有任何价值。)。

我还检查NULL了参数,因为空字符串和 NULL 是两个不同的“空”值。


感谢您提供复制信息。“不幸的是”,这个例子对我来说很好。

select current_timestamp, * from m_database;
/*
CURRENT_TIMESTAMP           SYSTEM_ID   DATABASE_NAME   HOST    START_TIME                  VERSION                 USAGE      
29/11/2019 2:51:53.03 PM    HXE         HXE             hxehost 29/11/2019 2:44:08.561 PM   2.00.040.00.1553674765  DEVELOPMENT
*/

SELECT
    *
FROM "_SYS_BIC"."sp/CTUSER" 
      ('PLACEHOLDER' = ('$$CTUSER$$','JACK'));
/*
RESQTSN                 COL1    COL2    COL3    COL4    COL5    COL6    COL7    COL8        USER
00000000000000000000000 E       E       R       R       E       R       R       SD_000456   JACK

*/     

SELECT
  *
FROM "_SYS_BIC"."sp/CTUSER"
    ('PLACEHOLDER' = ('$$CTUSER$$', ''));

/*
RESQTSN                 COL1    COL2    COL3    COL4    COL5    COL6    COL7    COL8        USER 
00000000000000000000000 E       E       R       R       E       R       R       SD_000456   JACK 
00000000000000000000000 N       N       R       N       N       N       N       SFD_000486  HENRY
00000000000000000000000 E       E       E       E       E       E       E       SFD_000489  PAUL 

*/    

SELECT
   *
FROM "_SYS_BIC"."sp/CTUSER";
/*
RESQTSN                 COL1    COL2    COL3    COL4    COL5    COL6    COL7    COL8        USER 
00000000000000000000000 E       E       R       R       E       R       R       SD_000456   JACK 
00000000000000000000000 N       N       R       N       N       N       N       SFD_000486  HENRY
00000000000000000000000 E       E       E       E       E       E       E       SFD_000489  PAUL 
*/  

既然您写到此示例在您的系统上重现,可以肯定地说,它不是由某些 SAP BW 特殊情况引起的。

在这一点上,我建议为此向 SAP 开一个支持案例。

于 2019-11-27T00:56:15.370 回答
0

我遇到了同样的问题,并试图给输入参数一个默认值,然后似乎工作。我使用下面的代码和测试用例。

if(in('*',$$IP$$)
  ,1=1,
  in("FIELD",$$IP$$)
)

测试用例:一个输入:

  1. '' --> 获取所有结果,这里是删除默认的'*' 并将其留空
  2. '*' --> 获取所有结果
  3. 像'A'这样的实际值->根据值'A'获得预期结果

多个输入:

  1. '*' 和 '' --> 获取所有结果
  2. '*' 和 'A' --> 获取所有结果
  3. '' 和 'A' --> 得到由 'A' 过滤的结果,而不是所有结果
于 2021-01-06T02:34:35.190 回答