2013-01-19 33 views
1

我工作的一個數據庫,它看起來像這樣(在最簡單的形式)上:SUMIFS水晶

{階段} {代碼} {}數量

例子:

{數量}的{階段} = 「R」 和{代碼} = 「納特」= 0

{數量}的{階段} = 「F」 和{代碼} = 「納特」= 5

{數量} for {Phase} =「R」and {Code} =「Int」= 10

{數量}的{階段} =「F」和{代碼} =「詮釋」 = 15

我試圖得到一個結果,以顯示我的數量爲相「R」和代碼「納特」 (其中R是<> 0),否則給我階段「F」的數量。所以對於上面的例子,我會得到Nat的答案= 5(因爲階段R的數量爲0)並且答案爲10,其中代碼是Int(因爲階段R的數量爲<> 0)

我已經使用3個公式字段做到這一點:

1:如果({PHASE} = 「F」 和{CODE} = 「NAT」),則{QTY}否則0

2:如果({PHASE} =」 R」和{代碼} = 「NAT」),則{QTY}否則0

3:如果{2} = 0,那麼{1}否則{2}

公式字段1 & 2拿出正確的金額。然而公式字段{3}返回兩個階段。例如代碼「Int」Phase「R」顯示爲qty = 25而不是qty = 10.

如何解決此問題?

回答

0
  1. 你需要組由{table.code},因爲這不是一列計算,但需要將超過爲2+相位(意思2+行數據)的每個碼的計算。

  2. 創建一個帶有兩個變量的公式,這兩個變量將存儲每個階段的值F和R.此公式需要進入報表的「詳細信息」部分。

    whileprintingrecords; 
    numbervar Fqty; 
    numbervar Rqty; 
    
    if {table.phase}="F" then Fqty:={table.qty} 
    else Rqty:={table.qty};
  3. 現在,在組頁腳中,您可以通過變量引用兩個數量值。

    whileprintingrecords; 
    numbervar Fqty; 
    numbervar Rqty; 
    
    if Fqty=0 then Rqty else Fqty

大功告成。不要忘記重置組頭中的兩個變量,以免在不同代碼之間傳遞數量。