2013-02-18 81 views
1

我試圖搞清楚這一點,但無濟於事。我所在的數據庫有根據期間顯示總帳科目餘額的字段(例如{GLAF.BAL1}{GLAF.BAL2},{GLAF.BAL3}等)。 我正在尋找一種基於當前日期顯示餘額總和的方法。動態字段名稱的水晶報表公式

我有以下公式來確定當前週期是什麼(我們的財政年度開始8/1:

if month(currentdate) >= 8 then Period := (Month(currentdate)-7) else Period := (Month(currentdate)+5) 

有沒有我可以創建一個公式,基本上會做以下方式二。例子,以確保它是清楚的:

實施例1(當前週期= 4):

Balance =: ({GLAF.BAL1} + {GLAF.BAL2} + {GLAF.BAL3}) 

實施例2(電流週期= 7):

Balance =: ({GLAF.BAL1} + {GLAF.BAL2} + {GLAF.BAL3} + {GLAF.BAL4} + {GLAF.BAL5} + {GLAF.BAL6}) 

回答

0

可以稍微縮短公式是這樣的:

if {?period} >= 1 then {GLAF.BAL1} + 
if {?period} >= 2 then {GLAF.BAL2} + 
if {?period} >= 3 then {GLAF.BAL3} + 
if {?period} >= 4 then {GLAF.BAL4} + 
if {?period} >= 5 then {GLAF.BAL5} + 
if {?period} >= 6 then {GLAF.BAL6} + 
if {?period} >= 7 then {GLAF.BAL7} + 
if {?period} >= 8 then {GLAF.BAL8} + 
if {?period} >= 9 then {GLAF.BAL9} + 
if {?period} >= 10 then {GLAF.BAL10} + 
if {?period} >= 11 then {GLAF.BAL11} + 
if {?period} >= 12 then {GLAF.BAL12} 

然而要小心,沒有值是NULL,因爲這需要更仔細的處理。

+0

謝謝!這工作完美。我知道我必須有一些顯而易見的方式,而且這很好。 – 2013-02-19 12:53:56

+0

更新: 我不得不略微調整公式,以說明會計總是在發佈數字後一個月後工作。所以我只是將每個區間增加1,並在底部放置「if {?period}> = 1」。 – 2013-02-19 13:04:53

1

我不知道的東西完全「動態」的,但我只是這樣做:

local numberVar Balance := 0; 

if {@period} > 1 then 
    Balance := Balance + {GLAF.BAL1}; 

if {@period} > 2 then 
    Balance := Balance + {GLAF.BAL2}; 

if {@period} > 3 then 
    Balance := Balance + {GLAF.BAL3}; 

Balance; 
+0

謝謝!你的答案也產生了正確的數字。我只是因爲公式更短而與其他答案一起去了。 – 2013-02-19 12:53:14

0

使用 SQL表達式或公式字段將NULL轉換爲零。每個數據庫字段需要一個(在您的情況下爲12個)。

SQL表達式語法:

-- {%GLAF.BAL01} 
-- convert NULL to 0 
NVL(GLAF.BAL1,0) 

公式字段語法:

// {@GLAF.BAL01} 
// convert NULL to 0 
If IsNull({GLAF.BAL1}) Then 0 Else {GLAF.BAL1} 

創建一個公式字段來概括這些字段:

// {@Balance} 
// place each field in an array; summarize array 
// use formula fields to convert NULL to 0 
Numbervar Array periods := [{@GLAF.BAL01},{@GLAF.BAL02},...,{@GLAF.BAL12}]; 

Local Numbervar balance:=0; 
Local Numbervar i; 

For i := 1 To {?period} Do (
    balance := balance + periods[i]; 
); 

balance;