SAP BO – 如何在每一行中每周得到1/0不同的值

我试图解决的问题是有一个SAP Business Objects查询为我计算一个variables,因为在一个大的Excel文件中计算它崩溃的过程。

我有一堆每日/每周数据的列。 我想在一个星期内得到一个名字/人物/某个标识符的第一个“1”,其余的都是“0”。

因此,例如,如果“玻璃”项目在第4周在此variables/列中第一次销售将获得“1”,并且接下来的4个销售将变为“0”。 这将允许我在一个特定的星期内销售不同物品的数量。

我知道Business Objects中有Count和Count不同的函数,但是我更希望将这个1/0系统用于整个原始数据表,因为我将它用作整个仪表板的源代码,并且有很多指标其中不同的将是部分/切片机。

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

这就做了这个诀窍,并且列A中出现在特定值范围(列A是星期)的列G中的值的第一个实例给出“1”,并且当相同的值再次出现在相同的星期值时给出“0” A列。当星期值变化时,它会再次给出“1”。

由于数据越大,每行数据中的2个单元格就会比较整个数据列,因此往往会导致崩溃。

我很难在Business Objects中效仿,我想我已经耗尽了自己的能力和Googlesearchfunction。

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

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

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

Sale ID Name Person Sale Date Week # Price etc. 

你想为每个Name / Week#的第一个出现显示1。

第一步:用下面的定义创build一个variables。 我们称之为[FirstOne]

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

步骤2:在报告块中添加一个具有以下公式的列:

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

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

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

我想你想要在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表格表示无序集合。 在表或行组中没有“第一个”行,除非列指定了sorting。 ?? 是为这样一个列(也许是一个date/时间列,也许是一个ID)。

如果您只想要标记一行,则可以在其中放置任何内容,如按order by (select null)order by week