一.公式欄位使用樣本:
A.計量單位轉換
這是一個非常簡單的例子,主要是為了示範在公式中進行不同變數類型的轉換和計算。
有時資料庫欄位的單位和報表中顯示的單位不同,我們需要進行計量單位之間的轉換,這時就離不開公式的使用。比如,我們的資料庫中有一個Length欄位,它記錄以米為單位的長度,而在列印時需要以厘米為單位,我們就可以使用下面的函數。
ToText({Order Details.Length} *100) + "厘米"
這裡的ToText函數就是轉換數字型為字元型。常用的轉換函式還有ToNumber等。
B.中文星期
在這個例子中我們將示範如何進行字串操作。
我們在列印報表時經常會遇到顯示中文星期的問題。Crystal Reports有DateOfWeek函數可以判斷一個日期是星期幾,比如DateOfWeek返回4時表示星期三。我們可以使用下面的公式來顯示中文星期。這裡的Today函數只是一個樣本,你可以將其修改為你所需的日期函數或欄位。
StringVar x;
NumberVar n;
x:="日一二三四五六";
n:=DayOfWeek (Today);
x:="星期"+x[2*n-1 to 2*n]
前兩行,我們定義了字串變數x和數字變數n。一個公式可以有很多行,但只有最後一行的計算結果才會作為整個公式的結果列印在報表中。
C.條件計算
在這個例子中我們重點示範如何使用If-Then-Else操作符。
條件計算在報表中使用得非常普遍。例如,我們要根據使用者購買的總價格決定折扣的多少。我們假定使用者購買200元以下的產品,不打折;200元到1000元提供5%的折扣;1000元以上提供7%的折扣。我們可以使用下面的公式計算終端使用者需要付多少錢。
CurrencyVar cValue;
cValue := {Order Details.UnitPrice} *{Order Details.Quantity}; //計算總價格
If cValue < 200 Then
cValue
Else If cValue < 1000 Then
cValue * 0.95
Else
cValue * 0.93
D.條件統計
Crystal Reports提供了一些基本的統計功能,可以按分組進行統計。但是實際應用中的統計往往更為複雜。比如,我們需要根據一定的條件進行統計。假定我們要統計每組中單價超過10元的商品的銷售數量。我們可以先在報表的Detail部分插入一個公式。假定該公式名字為ConditionSum,在公式內輸入如下內容:
If {Order Details.UnitPrice} < 10 Then
0
Else
{Order Details.Quantity}
二.公式欄位文法:
公式欄位的文法比較簡單,但支援的操作符和函數非常多。在公式中可以使用變數、常量。也可以引用資料庫欄位,其格式為:{庫名.欄位名}
A.操作符
水晶報表支援大量的操作符,有些是常見的,也有些是Crystal Reports特有的。
B.算術操作符
水晶報表支援+、-、*、/,還支援%(百分比)操作符,如100 % 500 = 20。
C.轉換操作符
轉換操作符為$,它將數字轉換為貨幣型,這樣水晶報表會按照報表中的貨幣格式設定列印資料。
D.比較操作符
水晶報表支援的比較操作符與Visual Basic相同:=、<>、<、>、>=、<=。
E.字串操作符
字串串連的操作符為“+”。
從字串中取指定的字元使用“[]”操作符,相當於Visual Basic的Mid函數。“[]”內為字元的位置,第一個字元的編號為1。如:{file.ItemNumber} [4 to 5]
判斷一個字串是否包括在另一個字串使用in操作符。比如:"c" in "pcc"返回True。
F.範圍操作符
水晶報表允許使用者建立一個範圍,並判斷資料是否包括在指定範圍內。如“100.00 to 250.00”包括100到250之間的資料,而使用“50 in (100 to 250)”可以判斷50是否在指定的範圍內。
G.布爾操作符
布爾操作符包括And、Not和Or。
H.數組操作符
水晶報表支援數組,比如[100,200,300,400]是一個由4個元素組成的數組。可以使用in操作符判定資料是否是一個數組的元素,如:{file.State} in ["CA", "HI", "AK"]。
I.匹配操作符
匹配操作符包括StartsWith和Like。StartsWith判斷一個字串是否以指定的字串開頭,如"PCC" startwith "P"返回True。Like操作符的用法類似Visual Basic,也是將字串運算式和萬用字元運算式中的樣式做比較。
J.其他動作符
另一個重要的操作符是If…Then … Else …,就是我們所熟悉的條件判斷,在我們後面得樣本部分可以看到這個操作符的威力。
如果要為變數賦值,需要使用“:=”符號,這是與Visual Basic不同的。
在公式中也可以加上注釋以方便閱讀。注釋符號為“//”,“//”符號後面的內容將被忽略。
公式中也可以包括多個語句行,行尾使用“;”分割。
K.函數
水晶報表支援大量函數,包括數學函數、統計函數、日期函數、字串函數、數組函數等等。在水晶報表的協助檔案對每個函數都有詳細的介紹。
備忘:部分參考有藍色深海匯總和修改!部分是項目實戰經驗!