2013年9月30日 星期一

[SQL Server 2008R2][SSRS] 互動式排序

使用資料集查詢語法加入 Order By 的方式,或是在資料表物件屬性中的「排序」功能指定資料排序都屬於固定式的排序。為了方便使用者用隨時改變欄位排序規則,可使用互動式排序功能。

[SQL Server 2008R2][SSRS] 參照函數 Lookup、MultiLookup、LookupSet

在 SSRS 中,一張報表內可以包含多個資料集,但在一個資料區域就僅限於一個資料集,如果希望同時參考多個資料表,其概念類似 JOIN 是透過鍵值的對應,以傳回一個值或一組值。
一般會使用這種方式是因為不同的資料集來自不同的資料來源 ( SQL、Oracle....),所以無法在資料集的 SQL 語法中使用 JOIN 方式把要的值合併在同一個資料集中。

2013年9月24日 星期二

[SQL Server 2008R2][SSRS] 指定行數分頁

在設計報表時,使用者可能希望資料列可以以每 20 筆一頁的方式呈現。即會使用到 Rownumber 函數。可以在群組對象的運算式方格中輸入

= Rownumber (Nothing) \ 20 以除以 20 取整數的方式來分群組。

[SQL Server 2008R2][SSRS] 隔行換色

為了方便檢視報表,常用使用者有需要隔行換色的需求。先準備好要用的資料表後,先將要處理的儲存格一次選取。

再點選屬性視窗 BackgroundColr 中的運算式...

[SQL Server 2008R2][SSRS] 其他函數 RowNumber

RowNumber 函數,傳回指定範圍中資料列數的執行計數。其語法如下:

RowNumber( Scope )

RowNumber 函數可以做出自動編號的功能 ( RunningValue 也可以做到 ),也可以應用在資料儲存格根據序號進行隔行換色的效果。

2013年9月4日 星期三

[SQL Server 2008R2][SSRS] 彙總函數 RunningValue

RunningValue 函數可以用來處理累積計算的功能,包含累加、移動平均等,其語法如下:

RunningValue( 運算式 , 彙總函數 , Scope )

2013年9月3日 星期二

[SQL Server 2008R2][SSRS] 群組頁碼

SSRS 2008 R2 之後,PageNumber 和 TotalPage 這兩個內建欄位的意義與舊版不同。在以前的版本中,只有 PageNumber 和 TotalPage 用於頁碼計算,當時最因擾的問題在於無法產生群組內頁碼,為了解決這個問題,在 SSRS 2008 R2 中加入了 OverallPageNumber 和 OverallTotalPage 這兩個內建欄位表示總體頁碼,因此 PageNumber 和 TotalPage 在此就表示群組內頁碼的意思。

[SQL Server 2008R2][SSRS] 分頁設定 PageBreak

Tablix 資料區 (資料表、矩陣和清單)、群組和矩形支援分頁。
分頁包含下列屬性:

  1. BreakLocation 會針對啟用分頁的報表元素,提供分頁的位置:開頭、結尾,或開頭和結尾。 若是群組,BreakLocation 可以位於群組之間。
  2. Disabled 會指出是否將分頁套用至報表元素。 如果這個屬性評估為 True,則會忽略分頁。 如果使用這個屬性,可以根據報表執行時的運算式,以動態方式停用分頁。
  3. ResetPageNumber 會指出分頁時,是否應該將頁碼重設為 1。 如果這個屬性評估為 True,則會重設頁碼。

[SQL Server 2008R2][SSRS] 空值補零

在 SSRS 設計報表時,常會遇到空值的問題,為了美觀或使用者閱讀,會將空值欄位補零。在一般的 SQL 語法查詢可以使用以下方式來補零

SQL : Select ProductName, IsNull(SaleAmount, 0) From OrderDetail

Oracle : Select ProductName, Decode(SaleAmount,null,0)

2013年9月2日 星期一

[SQL Server 2008R2][SSRS] 邏輯函數 IIf、Choose、Switch

用於流程判斷可以使用 IIf、Choose、Switch 這三個函數。

IIF ( boolean_expression, true_value, false_value )  : 根據布林運算式評估為 true 或 false 而傳回兩值之一。

例如年收入大於 60,000 時,顯示達成,反之則顯示未達成。
=IIf(Fields!YearlyIncome.Value >= 60000,"達成","未達成")

也可以使用巢狀 IIF,例如設定儲存格背景色 BackgroundColor ,當 PctComplete 的值大於等於 10 時,設定為 Green ,小於 10 但大於等於 1 時,則設定為 Blue ,其餘 (值小於 1 ) 設定為 Red。

=IIF(Fields!PctComplete.Value >= 10, "Green", IIF(Fields!PctComplete.Value >= 1, "Blue", "Red"))

太多層的巢狀 IIF 會增加判別的複雜度,因此可以使用 Choose 或 Switch 來取代。


Choose ( index , val_1, val_2 [, val_n ] ) : 從數值清單傳回指定之索引的項目。

例如生日是星期幾的顯示

=Choose(Datepart("w",Fields!BirthDate.Value),"星期日"、"星期一"、"星期二"、"星期三"、"星期四"、"星期五"、"星期六")

第一個參數必須傳回數值的資料。


Switch( boolean_expression_1, true_value_1, boolean_expression_2, true_value_2,[ boolean_expression_n, true_value_n]) : 評估運算式清單,並傳回清單中第一個為 True 之運算式的對應 Object 值。

例如設定儲存格背景色 BackgroundColor ,當 PctComplete 的值大於等於 10 時,設定為 Green ,小於 10 但大於等於 1 時,則設定為 Blue ,等於 1 時,則設定為 Yellow ,小於等於 0 設定為 Red。

=Switch(Fields!PctComplete.Value >= 10, "Green", Fields!PctComplete.Value >= 1, "Blue", Fields!PctComplete.Value = 1, "Yellow", Fields!PctComplete.Value <= 0, "Red")