SAP BO - 如何在每行中每周获得 1/0 个不同的值

SAP BO - how to get 1/0 distinct values per week in each row

我试图解决的问题是让 SAP Business Objects 查询为我计算一个变量,因为在大型 excel 文件中计算它会使进程崩溃。

我有一堆包含 daily/weekly 数据的列。我想在一周内为 Name/Person/Certain Identificator 的第一个实例获得“1”,并为所有其余实例获得“0”。

因此,例如,如果商品 "Glass" 在第 4 周售出 5 次,在这 variable/column 中,第一笔销售将获得“1”,接下来的 4 笔销售将获得“0”。这将使我能够获得特定一周内销售的不同商品的数量。

我知道 Business Objects 中有 Count 和 Count 不同的函数,但是我更愿意为整个原始 table 数据使用这个 1/0 系统,因为我将它用作一个完整的仪表板,并且有很多指标,其中 distinct 将是 part/slicer。

我之前的做法是使用 excel 公式:=IF(SUMPRODUCT(($A$2:$A5000=$A2)*($G$2:$G5000=$G2))> 1,0,1)

这样就可以了,对于 G 列中出现在 A 列特定值范围内的值的第一个实例(A 列是星期)给出“1”,当相同的值再次出现时给出“0” A列中相同的星期值。当星期值改变时,它会再次给出“1”。

由于它是在每行中的 2 个单元格中比较整列数据,因此随着数据变大,这往往会崩溃。

到目前为止,我无法在 Business Objects 中模拟这一点,我想我已经用尽了我的能力和谷歌搜索。

任何人都可以分享他们的两分钱吗?

我想你想要逻辑围绕 row_number():

select t.*,
       (case when 1 = row_number() over (partition by name, person, week, identifier
                                         order by ??
                                        )
             then 1 else 0
         end) as new_indicator
from t;

注意 ??。 SQL table 表示 无序 集合。 table 或一组行中没有 "first" 行,除非列指定了该顺序。 ?? 用于此类列(可能是 date/time 列,可能是 id)。

如果你只想标记一行,你可以在那里放任何东西,比如order by (select null)order by week

假设您在查询中有一个唯一标识一行的对象,您可以通过几个简单的步骤完成此操作。

假设您的查询包含以下对象:

Sale ID
Name
Person
Sale Date
Week #
Price
etc.

您想为每个 Name/Week #.

的第一次出现显示 1

第 1 步:创建具有以下定义的变量。我们称它为 [FirstOne]

=Min([Sale ID]) In ([Name];[Week #])

第 2 步:在报告块中,添加具有以下公式的列:

=If [FirstOne] = [Sale ID] Then 1 Else 0


这应该在表示第 # 周内第一次出现 Name 的行中产生 1。如果你想在第一次出现 Name/Person/Week # 时显示 1,你可以相应地修改 [FirstOne] 变量:

=Min([Sale ID]) In ([Name];[Person];[Week #])