2017-03-09 43 views
0

我試圖解決是有一個SAP的Business Objects查詢計算變量對我來說,因爲它計算在一個大的excel文件崩潰過程中的問題,每週1/0不同的值。SAP BO - 如何讓每一行

我有每天/每週數據一堆列。我想在一週內爲「名稱/人員/某些標識符」的第一個實例獲得「1」,其餘爲「0」。

因此,舉例來說,如果項目「玻璃」在這個變量/列售出4每週5次首賣會得到「1」和明年4周的銷售將得到「0」。這將使我能夠在特定的一週內銷售不同的物品。

我知道在Business Objects中有Count和Count不同的函數,但是我寧願將這個1/0系統用於整個數據表的原始表,因爲我將它用作整個儀表板的源代碼,是很多的指標,其中明顯將是部分/切片機。

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

這是卓有成效的,並提供了一個「1」的列G值出現在某一值範圍在列A(列A爲周),並給出「0」時相同的值重新出現第一個實例A列中的同一周價值。當週價值變化時,它將再次給出「1」。

由於它是在每行中進行比較2個細胞爲整個數據列作爲數據變大這趨向於崩潰。

我至今無法在Business Objects公司仿效這一點,我想我用盡我的能力和谷歌上搜索。

任何人都可以分享他們的兩美分嗎?

+0

請編輯您的問題,並提供樣本數據和預期的結果。 –

回答

1

假設你已經在唯一標識一行查詢的對象,你可以在幾個簡單的步驟,做到這一點。

讓我們假設你的查詢中包含下列對象:

Sale ID 
Name 
Person 
Sale Date 
Week # 
Price 
etc. 

你想顯示各1名/周#第一次出現。

第1步:用下面的定義創建一個變量。讓我們把它[FirstOne]

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

第2步:

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


這應該是代表該行中產生1:報告塊,用下面的公式中添加一列一週內第一次出現名稱#。然後,如果您想顯示的名稱/人/周#1次一個第一次出現,你可以只修改相應的[FirstOne]變量:

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

+0

喬,這工作。非常感謝。 什麼樣的竊聽我 - 我的配方比你的BO解決方案有更小的區別。 我檢查了它,似乎你的準確和公式不是。 非常感謝您爲我們提供了一個非常乾淨且質量非常好的解決方案。 非常感謝Gordon爲了尋找並提供良好的解決方案。 – drLecter

1

我想你想的邏輯周圍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表格代表無序集合。在表或行組中沒有「第一個」行,除非列指定了排序。 ??是用於這樣一個列(也許是日期/時間列,也許是一個id)。

如果您只想要標記一行,則可以在其中放入任何內容,例如order by (select null)order by week

+0

謝謝戈登! – drLecter