這是我之前使用REREPORTVIEWER執行RDLC的程式碼
其中VISIBLE、LocalReport.ReportPath、DataSources.Clear()、DataSources.Add與Refresh這些都會一直重複使用,所以我把它寫成一個常用的FUNCTION,並新增一個CLASS叫RdlFunction.cs,把常用到的FUNCTION都放在這一個CLASS。
建立好CLASS之後,使用這個CLASS改寫之前的程式:
其中的dtGetCustomerByCity的方法來自商業邏輯層,詳細內容在這個連結。
使用商業邏輯層與RdlFunction.cs有二個最大的好處,分別是:
管理:假設業務邏輯有改變,這時候只要改商業邏輯層就好了,其他程式不會動到。
開發:使用之前寫的FUNCITON,下次開發時可以重用,方便省時。
最後顯示報表內容。
搞定收工。
2011年7月28日 星期四
2011年7月27日 星期三
MDX:Ascendants Function
用法:Ascendants(Member_Expression)
範例1:找出2003年4月的所有上層的成員
上面的範例會傳回2003年4月所屬的季、半年、年和All Periods,用維度來看可以看更清楚
通常被用來顯示在不同階層的比例:
範例1:找出2003年4月的所有上層的成員
上面的範例會傳回2003年4月所屬的季、半年、年和All Periods,用維度來看可以看更清楚
通常被用來顯示在不同階層的比例:
MDX:Ancestors Function
如果想要知道某一個member的上層階級使用Ancestors是個不錯的選擇。
範例1:查出產品[Mountain-100 Silver, 38]的Category與Subcategory的member
範例2:範例1的另一種寫法
範例3:同時例出某一產品的父與祖父的成員。
2011年7月26日 星期二
MDX:Rank Function
Rank Function可以依條件顯示排名。
範例1:[Date].[Calendar Year]依照年份排名。
範例2:[Date].[Calendar Year]依照[Internet Sales Amount]排名。
範例3:搭配ORDER,列出[Reseller Sales Amount]的排名後,按照排名做排序。
範例4:依照百分比做排名後使用排名排序。
範例1:[Date].[Calendar Year]依照年份排名。
範例2:[Date].[Calendar Year]依照[Internet Sales Amount]排名。
範例3:搭配ORDER,列出[Reseller Sales Amount]的排名後,按照排名做排序。
範例4:依照百分比做排名後使用排名排序。
2011年7月24日 星期日
三層式架構的實現-商業邏輯層之二
繼之前修改資料存取層(DAL)之後,商業邏輯層(BLL)也做了修改。
之前商業邏輯層主要是依業務流程組合SQL指令,修改DAL後,商業邏輯層主要是依業務流程呼叫DAL。
同樣的還是以Singleton的方式讓外部取用BLL。
接著依業務邏輯呼叫DAL。
這樣在商業邏輯層中只要專注因業務邏輯的不同而改變參數或呼叫DAL其他的方法,完全不用理會SQL指令的組合,這樣商業邏輯層改善的工作也完成了。
之前商業邏輯層主要是依業務流程組合SQL指令,修改DAL後,商業邏輯層主要是依業務流程呼叫DAL。
同樣的還是以Singleton的方式讓外部取用BLL。
接著依業務邏輯呼叫DAL。
這樣在商業邏輯層中只要專注因業務邏輯的不同而改變參數或呼叫DAL其他的方法,完全不用理會SQL指令的組合,這樣商業邏輯層改善的工作也完成了。
三層式架構的實現-資料存取層之二
之前寫的三層式架構的實現-資料存取層這篇文章,再多看別人的BLOG後,我認為可以改善的地方還有很多。
之前設定資料存取層也就是DAL(data access Layer)是建立連線後執行SqlDataAdapter等動作,
但是看了許多人的BLOG後,發現大部分的人把DAL的觀念為將SQL語法組合好後在建立連線後執行SqlDataAdapter等動作。
因為工作上看到的也是如此的觀念,所以我就將DAL重新整理一遍。整理過後的DAL共有兩個Class:SqlHelper.cs與DataAccess.cs。
SqlHelper.cs是微軟官方的SqlHelper,可以免費下載,是用來輔助組合SQL語法並執行SqlDataAdapter等動作的Class。
有關SQLHelper可以在這裡下載。
之前設定資料存取層也就是DAL(data access Layer)是建立連線後執行SqlDataAdapter等動作,
但是看了許多人的BLOG後,發現大部分的人把DAL的觀念為將SQL語法組合好後在建立連線後執行SqlDataAdapter等動作。
因為工作上看到的也是如此的觀念,所以我就將DAL重新整理一遍。整理過後的DAL共有兩個Class:SqlHelper.cs與DataAccess.cs。
SqlHelper.cs是微軟官方的SqlHelper,可以免費下載,是用來輔助組合SQL語法並執行SqlDataAdapter等動作的Class。
有關SQLHelper可以在這裡下載。
2011年7月23日 星期六
MDX:Hierarchy Function
之前在寫MDX時有遇到比重的問題,之前都傻傻的把Measures使用Sum加總後在個別相除,後來無意間發現可以使用Hierarchy Function來處理比重的問題。
範例如下:
短短幾行就完成了,想到之前寫的亂七八糟,現在想想真是Orz,那時後真是年少不懂事阿!呵~
範例如下:
短短幾行就完成了,想到之前寫的亂七八糟,現在想想真是Orz,那時後真是年少不懂事阿!呵~
2011年7月22日 星期五
MDX:ParallelPeriod Function Part3
之前在MDX:ParallelPeriod Function Part2比較過去與目前的數值,搭配PeriodsToDate Function 可以比較過去與目前的累計值。
範例:先使用PeriodsToDate計算2004年1月到2004年7月Internet Sales Amount的累加值,接著使用ParallelPeriod計算2003年1月到2003年7月Internet Sales Amount的累加值。
範例:先使用PeriodsToDate計算2004年1月到2004年7月Internet Sales Amount的累加值,接著使用ParallelPeriod計算2003年1月到2003年7月Internet Sales Amount的累加值。
MDX:ParallelPeriod Function Part2
之前有介紹過ParallelPeriodn Function的特性,而ParallelPeriod Function大多用來比較過去與目前的數值,以下是幾個簡單的範例。
範例1:使用ParallelPeriod Function列出200401到200407去年和前年的Member集合
範例2:列出2004、2003與2002同一時期的[Measures].[Internet Sales Amount]
範例1:使用ParallelPeriod Function列出200401到200407去年和前年的Member集合
範例2:列出2004、2003與2002同一時期的[Measures].[Internet Sales Amount]
MDX:PeriodsToDate Function
PeriodsToDate的用法為PeriodsToDate([«Level»[, «Member»]])
PeriodsToDate會回傳«Level»第一個member到指定的«Member»為止
以PERIODSTODATE([Date].[Calendar].[Calendar Year],[Date].[Calendar].[Month].[MAY 2002])這段mdx
來看,會回傳2002的第一個member:2002年1月開始,在2002年5月結束。
此外PeriodsToDate的用途為累計總合(Accumulating Total):
右邊紅色的區塊為左邊藍色的累計總合
如果有跨年度的話,譬如從200107到200205時,到了2002年時,會從200201累加到200205。
另外也可以做同時段的比較,例如2002年前八月與2003年前八月的Measures比較
PeriodsToDate會回傳«Level»第一個member到指定的«Member»為止
以PERIODSTODATE([Date].[Calendar].[Calendar Year],[Date].[Calendar].[Month].[MAY 2002])這段mdx
來看,會回傳2002的第一個member:2002年1月開始,在2002年5月結束。
此外PeriodsToDate的用途為累計總合(Accumulating Total):
右邊紅色的區塊為左邊藍色的累計總合
如果有跨年度的話,譬如從200107到200205時,到了2002年時,會從200201累加到200205。
紅色部分的[Year Reseller Sales Amount]:200107到200112
藍色部分的[Year Reseller Sales Amount]:200201到200205
另外也可以做同時段的比較,例如2002年前八月與2003年前八月的Measures比較
2011年7月14日 星期四
MDX:ParallelPeriod Function
ParallelPeriod在msdn的解釋是;傳回先前跟特定成員在同樣相對位置上的成員。
不過有看沒有懂,所以做了以下的測試:
1. 先看一下dimension的結構
2.依照ParallelPeriod的語法寫了一段MDX,發現產生出來的值是200401。
在dimension上就是下一個quqrter的第一個member。
3.將上述的mdx語法把-1改成1,顯示的是200307的資料
也就是在dimension上就是上一個quqrter的第一個member。
接著使用mdx找出每一年與當年前一年的資料
也可以在不同的level找到使用ParallelPeriod找到相同的member
從上面的測試可以知道使用ParallelPeriod在比較同期數值時特別有用。
2011年7月13日 星期三
MDX:SUBQUERY
昨天在測試MDX的SUBQUERY發現了一個很特別的現象:
1.首先在MDX中我加入的WHERE條件,可以看到產生出來的數字是700,759.96
2.然後把有WHERE條件的MDX當作SUBQUERY使用,發現數字跟沒有使用WHERE條件的情況下是一樣的,也就是取得的值沒有跟沒有使用WHERE是一樣的。
3. 如果把SUBQUERY中的MDX條件設在ROW上,會發現產生的結果跟SUBQUERY中的MDX是一樣的。
1.首先在MDX中我加入的WHERE條件,可以看到產生出來的數字是700,759.96
2.然後把有WHERE條件的MDX當作SUBQUERY使用,發現數字跟沒有使用WHERE條件的情況下是一樣的,也就是取得的值沒有跟沒有使用WHERE是一樣的。
2011年7月11日 星期一
MDX語法:YTD FUNCTION的介紹
說明:YTD主要是用來計算累加數值。
1.列出200301到200307的SET
2.列出200301到200307的Measures值
3.另一種列出200301到200307的Measures值的寫法
4.計算從2003年1月累加到2003年7月的數值
5.計算2001年7月到2002年10月的累計數值
6.計算產品從2003年1月到2003年8月的累計數值
1.列出200301到200307的SET
2.列出200301到200307的Measures值
3.另一種列出200301到200307的Measures值的寫法
4.計算從2003年1月累加到2003年7月的數值
5.計算2001年7月到2002年10月的累計數值
6.計算產品從2003年1月到2003年8月的累計數值
2011年7月9日 星期六
ReportViewer範例PART4-ServerReport
ReportViewer設定為ServerReport時顯示報表內容的步驟:
1.佈署報表到ReportServer上:
2.撰寫程式碼:因為是Remote mode,所以不需要準備DataTable,只要設定Report Server的URL和RDL在Report Server的路徑即可:
3.顯示報表:
2011年7月8日 星期五
報表組件(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.預覽報表內容
結論:
報表組件可以重複的使用,透過報表組件的分享可以加速報表的開發,提升報表開發的效率。
訂閱:
文章 (Atom)