如何在 Business Objects 中重现相当于 Countif excel 函数的功能?

问题描述

我来自法国(抱歉我的英语不好),我目前正在开发最新版本的 Business Objects(来自 SAP 的商业智能套件)。 我想将 Excel 公式转换为 Business Objects,但我不能。有人能回答我如何重现相当于 Countif 函数的问题吗? 在我的示例中,我有一个完整的重复社会安全号码列表,我在其中附加了一个从另一个字段中获取的可变号码。我想对每个安全号码进行计数,并知道其中有多少在我的另一个字段中附加了“2”值。

示例:
对于1741111111100 | 17411111111001,新字段中的结果将为2。
对于1741111111100 | 17411111111001,新字段中的结果将为2。
对于1741111111100 | 17411111111002,新字段中的结果将为2。
对于1741111111100 | 17411111111002,新字段中的结果将为2。
对于1741111111100 | 17411111111003,新字段中的结果将为2。
为1751111111100 | 17511111111001,新字段中的结果将为1。
为1751111111100 | 17511111111002,新字段中的结果将为1。
为1751111111100 | 17511111111003,新字段中的结果将为1。
为1761111111100 | 17611111111001,新字段中的结果将为0。
为1761111111100 | 17611111111001,新字段中的结果将为0。
为1761111111100 | 17611111111003,新字段中的结果将为0。
在 excel 中,使用 Countif 函数很容易做到,但我怎么能在 Business Objects 中做到这一点? 提前谢谢你,因为我白费了整个下午。

重新编辑
这是与 excel 相同的示例:

1741111111100|1|17411111111001|2|
1741111111100|1|17411111111001|2|
1741111111100|2|17411111111002|2|
1741111111100|2|17411111111002|2|
1741111111100|3|17411111111003|2|
1751111111100|1|17511111111001|1|
1751111111100|2|17511111111002|1|
1751111111100|3|17511111111003|1|
1761111111100|1|17611111111001|0|
1761111111100|1|17611111111001|0|
1761111111100|3|17611111111003|0|

一栏:
有我的安全号码(1741111111100重复5次,1751111111100重复3次,1761111111100重复3次)
B栏:
它是一个介于 1 和 3 之间的数字。
C栏:
我像=CONCATENATE(A1;B1)一样连接A列+B列
D栏:
这是我的countif函数,如下所示:
=COUNTIF(C$1:C$11;CONCATENATE(A1;"2")) 给出的数量为“2”。
=COUNTIF(C$1:C$11;CONCATENATE(A2;"2")) 给出的数量为“2”。
=COUNTIF(C$1:C$11;CONCATENATE(A3;"2")) 给出的数量为“2”。
=COUNTIF(C$1:C$11;CONCATENATE(A4;"2")) 给出的数量为“2”。
=COUNTIF(C$1:C$11;CONCATENATE(A5;"2")) 给出的数量为“2”。
=COUNTIF(C$1:C$11;CONCATENATE(A6;"2")) 给出数量“1”。
=COUNTIF(C$1:C$11;CONCATENATE(A7;"2")) 给出的数量为“1”。
=COUNTIF(C$1:C$11;CONCATENATE(A8;"2")) 给出数量“1”。
=COUNTIF(C$1:C$11;CONCATENATE(A9;"2")) 给出的数量为“0”。
=COUNTIF(C$1:C$11;CONCATENATE(A10;"2")) 给出的数量为“0”。
=COUNTIF(C$1:C$11;CONCATENATE(A11;"2")) 给出的数量为“0”。
我对附加在安全号码上的“2”值和此附件所涉及的安全号码数量感兴趣。
所以,用excel做起来很容易,但用B.I做起来就那么难。 !
感谢您的帮助。

解决方法

背景: 上下文运算符:

  • ForEach
  • ForAll

对数据的“集合”进行操作,允许您将数据解析为子集并聚合。在 SQL 中,这类似于“Over Partition By”(如果您熟悉的话)。

答案: 如果我们假设您在报告 [Concat] 中创建一个变量,如下所示:

=Concatenation([A];"2")

那么我们可以使用公式:

=Sum(If([C]=[Concat];1;0)) ForEach([Concat]) In ([C])

其中 [C] 是连接的 A+B 列。

说明 上面基本上是说如果 [C] = [Concat] 返回 1 否则返回 0,然后将这些评估的结果相加。

这发生在 [Concat] 中 ForEach 唯一值;在 [C] 中找到。

从逻辑上讲,系统会在 [Concat] 中找到所有唯一值,然后通过 [C] 进行迭代,评估每种情况是否 [C]=[Concat]。然后对每个 [concat] 的结果求和,然后为每个 [C] 呈现这些结果

附加点: 在我的示例中,报告数据由于重复值而被“合并”,因此您的示例中的第 1 行、第 2 行被合并。我不得不关闭 BO 对这些行数据的组合,否则我的结果会出现偏差。这可以通过格式化结果表并选中顶部复选框“避免重复行聚合”来完成。如果您有其他值使每行唯一,则不会出现此问题。您可以在查询级别以及在编辑数据提供程序的查询属性中关闭此功能。我认为这取决于您使用哪种来源,必须使用哪种方法......但我并不积极。

因此,您可以在下面看到 [Cnt] 的结果与您在 D 列中使用上述公式的预期结果相匹配。

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...