我在網路上看到這個問題:
要在Matrix小計上顯示百分比的話要使用Reportitems
1.先在DATASET上準備好資料
2.在Matrix上面的某一個TEXTBOX上算好總和。
3.隱藏該欄位。
4.在要顯示百分比的欄位的運算式打上類似下圖的語法:
=Iif(reportitems!txtEnvironmentSubTotal.Value is nothing, nothing, Format(SUM(Fields!COUNTS.Value)/reportitems!txtEnvironmentSubTotal.Value, "0.0%"))
5.預覽結果
搞定收工。
2011年8月3日 星期三
2011年7月9日 星期六
ReportViewer範例PART4-ServerReport
ReportViewer設定為ServerReport時顯示報表內容的步驟:
1.佈署報表到ReportServer上:
2.撰寫程式碼:因為是Remote mode,所以不需要準備DataTable,只要設定Report Server的URL和RDL在Report Server的路徑即可:
3.顯示報表:
報表組件(Report Parts)的介紹
問題:我已經建立了一張財務的RDL報表,有一天,天兵阿圜說她想要做一張銷售報表,而她的報表一部分的TABLIX跟我的財務報表的TABLIX是一樣的,那麼我跟如何SHARE 我的TABLIX給她呢?
解決:使用Report Parts可以解決這個問題
1.在原有的報表點選報表(R)後,在點選發行報表組件
2.選擇要分享的報表組件
3.設定報表組件要部署的報表伺服器與目錄
4.部署後可以看到報表組件的目錄
5.點入報表組件的目錄後可以看到要分享的內容
6.點選報表產生器(Report Builder)
7.進入報表產生器(Report Builder)後可以看到報表組件
8.把報表組件拉入編輯頁面
9.預覽報表內容
結論:
報表組件可以重複的使用,透過報表組件的分享可以加速報表的開發,提升報表開發的效率。
解決:使用Report Parts可以解決這個問題
1.在原有的報表點選報表(R)後,在點選發行報表組件
2.選擇要分享的報表組件
3.設定報表組件要部署的報表伺服器與目錄
4.部署後可以看到報表組件的目錄
5.點入報表組件的目錄後可以看到要分享的內容
6.點選報表產生器(Report Builder)
7.進入報表產生器(Report Builder)後可以看到報表組件
8.把報表組件拉入編輯頁面
9.預覽報表內容
結論:
報表組件可以重複的使用,透過報表組件的分享可以加速報表的開發,提升報表開發的效率。
2011年7月7日 星期四
Reporting Service 2008R2 LookupSet的使用
繼上一篇的Lookup與MuliLookUp後,現在要介紹Lookup家族的最後一個成員LookupSet。
我們有兩個Table分別為DimCity與SubCity:
DimCity與SubCity這兩個Table的關係是一對多。
接著我們在設計畫面建立一個table,並且加入DimCity的CityID與CityName到Tablix,接著在另一個Tablix輸入運算式:
我們看到LookupSet的第一個參數為DimCity的Fields!CityID.Value,而第二個參數為SubCity,第三個參數為顯示名稱,最後則是另一個DataSet(資料集)的名稱。
在LookupSet後因為資料是1對多的關係,所以顯示報表會有error,這時候我們使用Join把產生分解後,並且加上,這個符號,最後就可以觀看資料的結果:
我們有兩個Table分別為DimCity與SubCity:
DimCity與SubCity這兩個Table的關係是一對多。
接著我們在設計畫面建立一個table,並且加入DimCity的CityID與CityName到Tablix,接著在另一個Tablix輸入運算式:
我們看到LookupSet的第一個參數為DimCity的Fields!CityID.Value,而第二個參數為SubCity,第三個參數為顯示名稱,最後則是另一個DataSet(資料集)的名稱。
在LookupSet後因為資料是1對多的關係,所以顯示報表會有error,這時候我們使用Join把產生分解後,並且加上,這個符號,最後就可以觀看資料的結果:
Naming Excel Worksheets
問題:在Reporting Service 2008 R2之前我們要把rdl匯出成Excel檔案時常常為Excel的sheet命名而苦惱。
解決方法: 在Reporting Service 2008 R2可以設定屬性PageName達成匯出excel時命名sheet。
我們把PageName設定為想要命名的欄位名稱。
接著將rdl報表匯出成excel,這時候我們就可以看到Excel的sheet是以PageName的值(城市)來命名。
解決方法: 在Reporting Service 2008 R2可以設定屬性PageName達成匯出excel時命名sheet。
我們把PageName設定為想要命名的欄位名稱。
接著將rdl報表匯出成excel,這時候我們就可以看到Excel的sheet是以PageName的值(城市)來命名。
2011年7月6日 星期三
Reporting Service 2008R2 MultiLookup的使用。
繼上一篇LOOKUP的使用之後,這篇是講MultiLookup的用法,MultiLookup與Lookup的使用方法很像,差別在於第一個使用的參數Lookup是單一值而MultiLookup第一個使用的參數可以是多值的。
我們有兩個Table分別為DimSubCity與SubCity:
我們看到DimSubCity的SubCityID是多值的,這時候MultiLookup就派上用場了
我們看第一個參數使用Split切開後再與 SubCity的Fields!SubCityID.Value在關聯,第三個與第四個參數分別為顯示名稱與要結合的DataSet,完成後Table內容如下:
預覽報表內容:
原本的1,2,3已經可以使用SubCityName來顯示資料內容了。
接著下一篇我將會講解LookupSet的使用方法。
我們有兩個Table分別為DimSubCity與SubCity:
我們看到DimSubCity的SubCityID是多值的,這時候MultiLookup就派上用場了
我們看第一個參數使用Split切開後再與 SubCity的Fields!SubCityID.Value在關聯,第三個與第四個參數分別為顯示名稱與要結合的DataSet,完成後Table內容如下:
預覽報表內容:
原本的1,2,3已經可以使用SubCityName來顯示資料內容了。
接著下一篇我將會講解LookupSet的使用方法。
Reporting Service2008 R2 Lookup Function 的使用
我們在做報表的時候通常會遇到一個問題,報表的Table物件只能使用一個DataSet,在Reporting Service 2008 R2新增的Function(Lookup、MultiLookup與LookupSet),可以讓我們在Table物件使用兩個DataSet。
首先看一下兩個DataSet的資料結構:
我們有FactSaleTable與DimCity兩個TABLE,這兩個TABLE是以CityID做關聯。
接下來我們拖拉一個TABLE物件,並且拉入FactSaleTable的CityID與SaleAmount兩個欄位至TABLE物件,這時候TABLE的DataSet為FactSaleTable。
接著我們在城市代號與欄位金額中間增加一個空白欄位,並在該欄位的運算式打上
在Lookup這個FUNCTION,其中第一個Fields!CityID.Value為原來的FactSaleTable的 CityID,第二個Fields!CityID.Value為DimCity的CityID,它會與第一個的 Fields!CityID.Value做比對(Mapping),第三個Fields!CityIDName.Value為顯示的欄位內容,而"DimCity"就是第二個DataSet。
完成後TABLE如下
預覽內容
我們看到中間的程式名稱的是DimCity DataSet的內容,而城市代號與銷售金額是FactSaleTable DataSet的內容,這表示同一個Table可以一次使用兩個DataSet。
下一篇我將講解如何使用MultiLookup。
首先看一下兩個DataSet的資料結構:
我們有FactSaleTable與DimCity兩個TABLE,這兩個TABLE是以CityID做關聯。
接下來我們拖拉一個TABLE物件,並且拉入FactSaleTable的CityID與SaleAmount兩個欄位至TABLE物件,這時候TABLE的DataSet為FactSaleTable。
接著我們在城市代號與欄位金額中間增加一個空白欄位,並在該欄位的運算式打上
在Lookup這個FUNCTION,其中第一個Fields!CityID.Value為原來的FactSaleTable的 CityID,第二個Fields!CityID.Value為DimCity的CityID,它會與第一個的 Fields!CityID.Value做比對(Mapping),第三個Fields!CityIDName.Value為顯示的欄位內容,而"DimCity"就是第二個DataSet。
完成後TABLE如下
預覽內容
我們看到中間的程式名稱的是DimCity DataSet的內容,而城市代號與銷售金額是FactSaleTable DataSet的內容,這表示同一個Table可以一次使用兩個DataSet。
下一篇我將講解如何使用MultiLookup。
2011年7月4日 星期一
Reporting Service的群組分頁之二:如何設定群組頁數與總頁數之頁碼
在Reporting Service 2005,設定群組分頁時常常遇到頁碼不會依群組計算,而是以全部的頁數來計算。譬如說:你的報表總共有八頁,分二個群組,一個群組五頁,一個三頁,但是Reporting Service 2005出來頁碼就是八頁,1/8,2/8,不會依個群組分頁碼,第一個是1/5到5/5,第二個群組是1/3到3/3,如果要做到這種效果,有額外寫code,昨天我在某個老外的bi blog看到在Reporting Service 2008 R2有群組分頁頁碼的設定,阿~真是好物一枚。
這是我做的報表範例
頁尾有兩個textbox,運算式分別為:
Globals!PageNumber/Globals!TotalPages與Globals!OverallPageNumber/Globals!OverallTotalPages
這是我做的報表範例
頁尾有兩個textbox,運算式分別為:
Globals!PageNumber/Globals!TotalPages與Globals!OverallPageNumber/Globals!OverallTotalPages
2011年7月3日 星期日
如何解決SSRS 2008 R2凍結表頭的問題
今天有個可愛的學妹問我這個問題,學妹都開口了身為學長不幫忙好像說不過去。
首先是設定凍結表頭,如何設定凍結表頭呢? 這個問題你知我知就連獨眼龍也知。
首先在資料行群組點選進階模式:
然後在資料列群組上面的FixedData屬性選True:
接著預覽報表內容,發現表頭和資料內容混在一起,這樣表頭內容看的不是很清楚。
怎麼辦呢?很簡單,只要把表頭的背景顏色用深色系的顏色,而表頭文字用白色,這樣表頭就可以把資料內容蓋住,而白色字體在深色系下很顯眼,一眼就可以看得很清楚。
預覽結果如下:
你看看,當移動拖拉BAR時,深色的凍結表頭是不是蓋住資料內容,這樣就不會有表頭內容和資料內容混在一起的困擾。
其實我覺得做報表可以多用一些顏色、字體或字型的小技巧來達到的某些視覺上的效果,重點是使用者一目瞭然,有時候這些小技巧可能替代原本需要做很多的設定或甚至於報表工具設定做不到的效果,我覺得這是很多人包含我本人會忽略的一些小細節。
兩點半了,該去看電影了,收工。
其實凍結表頭這個問題真正的問題點反而不是在凍結表頭的設定,而是設定凍結表頭後,凍結的表頭會跟資料重疊在一起,讓人看不清楚表頭內容。
身為學長的我怎麼不可以多照顧一下學妹呢?哈哈,廢話不多說,趕快給他做下去。首先是設定凍結表頭,如何設定凍結表頭呢?
首先在資料行群組點選進階模式:
然後在資料列群組上面的FixedData屬性選True:
接著預覽報表內容,發現表頭和資料內容混在一起,這樣表頭內容看的不是很清楚。
怎麼辦呢?很簡單,只要把表頭的背景顏色用深色系的顏色,而表頭文字用白色,這樣表頭就可以把資料內容蓋住,而白色字體在深色系下很顯眼,一眼就可以看得很清楚。
預覽結果如下:
你看看,當移動拖拉BAR時,深色的凍結表頭是不是蓋住資料內容,這樣就不會有表頭內容和資料內容混在一起的困擾。
其實我覺得做報表可以多用一些顏色、字體或字型的小技巧來達到的某些視覺上的效果,重點是使用者一目瞭然,有時候這些小技巧可能替代原本需要做很多的設定或甚至於報表工具設定做不到的效果,我覺得這是很多人包含我本人會忽略的一些小細節。
兩點半了,該去看電影了,收工。
2011年6月25日 星期六
如何在SSRS 2008設計ParentChild Hierarchy的報表
首先在資料庫的資料要有兩個欄位用來關聯階層關係
上圖的範例資料表是以EmployeeKey與ParentEmployeeKey兩個欄位作為ParentChild階層關聯。
接著使用sql cte的cte實作出資料表中資料的階層。
然後拉入一個資料表物件,並把EmployeeName、EmployeeLevel與SalesAmount拉入到資料表物件中。
拉入後增加一個以EmployeeKey的群組。
在把之前新增群組的所產生的資料行刪除。
接著在資料列群組刪除詳細資料。
然後在group1的advanced頁面的Recursive parent選擇ParentEmployeeKey。
選完後在SalesAmount這個欄位按右鍵點選運算式
在運算式的頁面輸入=Sum(Fields!SalesAmount.Value,"Group1",Recursive)
然後在EmployeeName屬性方塊設定欄位文字的間距
設定欄位文字的間距
在運算式中輸入=20*Level()+5 & "pt"做為欄位間距規則。
瀏覽一下內容
看起來還真漂亮。不過如果在加上可以drilldwon的效果那就更棒了。為了加上drilldwon的效果我們必需在群組做設定。
我們進入群組屬性的頁面
在可見性的頁籤中點選隱藏(H),並在勾選此報表項目可以切換顯示後,在下拉式選單選擇EmployeeName。
預覽報表,發現有drilldwon的效果。
不過這份報表有一個缺點,就是T1與T2中都是在同一階層,但是T2卻沒有收合的符號,這樣會造成T2的階層筆T1還低的錯覺,除非T2下面也有子階層,這時候T1與T2的對其位置才會相同。
為了解決這個問題,我想了一個折衷的方法,就是除了最底階層外,其他階層的
EmployeeName都給予粗體字,這樣就可以用來識別T2不是最底層的問題。
首先在EmployeeName的欄位點選右鍵進入預留位置屬性編輯頁面
進入後在字型的頁籤點一下粗體的運算式
在運算式輸入判斷欄位是不是最底層的程式碼,如果是的話就不會顯示粗體字,不是的話就會顯示粗體字。
最後瀏覽結果發現T2有粗體字型而TT2沒有,這表示T2不是最底下的階層,這樣就不會有T2的階層是最底層的錯覺。
呼~搞定收工。
上圖的範例資料表是以EmployeeKey與ParentEmployeeKey兩個欄位作為ParentChild階層關聯。
接著使用sql cte的cte實作出資料表中資料的階層。
然後拉入一個資料表物件,並把EmployeeName、EmployeeLevel與SalesAmount拉入到資料表物件中。
拉入後增加一個以EmployeeKey的群組。
在把之前新增群組的所產生的資料行刪除。
接著在資料列群組刪除詳細資料。
然後在group1的advanced頁面的Recursive parent選擇ParentEmployeeKey。
選完後在SalesAmount這個欄位按右鍵點選運算式
在運算式的頁面輸入=Sum(Fields!SalesAmount.Value,"Group1",Recursive)
然後在EmployeeName屬性方塊設定欄位文字的間距
設定欄位文字的間距
在運算式中輸入=20*Level()+5 & "pt"做為欄位間距規則。
瀏覽一下內容
看起來還真漂亮。不過如果在加上可以drilldwon的效果那就更棒了。為了加上drilldwon的效果我們必需在群組做設定。
我們進入群組屬性的頁面
在可見性的頁籤中點選隱藏(H),並在勾選此報表項目可以切換顯示後,在下拉式選單選擇EmployeeName。
預覽報表,發現有drilldwon的效果。
不過這份報表有一個缺點,就是T1與T2中都是在同一階層,但是T2卻沒有收合的符號,這樣會造成T2的階層筆T1還低的錯覺,除非T2下面也有子階層,這時候T1與T2的對其位置才會相同。
為了解決這個問題,我想了一個折衷的方法,就是除了最底階層外,其他階層的
EmployeeName都給予粗體字,這樣就可以用來識別T2不是最底層的問題。
首先在EmployeeName的欄位點選右鍵進入預留位置屬性編輯頁面
進入後在字型的頁籤點一下粗體的運算式
在運算式輸入判斷欄位是不是最底層的程式碼,如果是的話就不會顯示粗體字,不是的話就會顯示粗體字。
最後瀏覽結果發現T2有粗體字型而TT2沒有,這表示T2不是最底下的階層,這樣就不會有T2的階層是最底層的錯覺。
呼~搞定收工。
訂閱:
文章 (Atom)