第一篇:2015總結(jié)報表
2015總結(jié)報告
2014已經(jīng)過去,首先感謝領(lǐng)導(dǎo)給我這個機會,讓我有幸成為富邦的一員,2014進入富邦一個多月的時間主要是了解公司及產(chǎn)品的相關(guān)情況,2015年計劃如下:
一、加強對家具銷售專業(yè)知識的學(xué)習(xí):
1)產(chǎn)品知識方面:對于辦公家具產(chǎn)品材料特點、規(guī)格型號包括面料和產(chǎn)品等以及使用方法、保養(yǎng)及維修知識。
2)客戶需求方面:對辦公家具購買者包括潛在客戶的消費心理、消費層次、及對生產(chǎn)產(chǎn)品的基本要求,加深引導(dǎo)。
3)市場知識方面:對家具市場的動向和變化、顧客購買力情況認識,對不同區(qū)域市場分析;工程進度認識。
4)專業(yè)知識方面:對家具有關(guān)的工藝技術(shù)知識學(xué)習(xí),如裝修設(shè)計,空間布局與家具擺放的美觀性沒有概念。5)簽單技巧的培養(yǎng)。
“怎么拿到客戶→跟蹤客戶→業(yè)務(wù)談判→方案設(shè)計→成功簽單→售后安裝→售后維護→人際維護”等這一系列的流程的學(xué)習(xí)。
第二篇:GridView報表總結(jié)
綁定數(shù)據(jù)
1、通過DataReader
string conStr = “Data Source=orcl;User ID=gtzf;Password=gtzf;”;OracleConnection conn = newOracleConnection(conStr);string QueryStr = “ select * from JBAJDJB ”;OracleCommand oraCMD = newOracleCommand(QueryStr, conn);conn.Open();OracleDataReader oraRead = oraCMD.ExecuteReader();GridView1.DataSource = oraRead;GridView1.DataBind();
2、通過DataSet string conStr = “Data Source=orcl;User ID=gtzf;Password=gtzf;”;OracleConnection conn = new OracleConnection(conStr);string sql = “SELECT UsersName FROM users”;OracleDataAdapter adapter = new OracleDataAdapter(QueryStr, conn);DataSet ds = new DataSet();adapter.Fill(ds);GridView1.DataSource = ds.Tables[0];GridView1.DataKeyNames = new string[] { “ID” };GridView1.DataBind();
3、通過DataTable string conStr = “Data Source=orcl;User ID=gtzf;Password=gtzf;”;OracleConnection conn = new OracleConnection(conStr);string sql = “SELECT UsersName FROM users”;OracleDataAdapter adapter = new OracleDataAdapter(QueryStr, conn);DataSet dt = new DataTable();adapter.Fill(dt);GridView1.DataSource = dt;GridView1.DataKeyNames = new string[] { “ID” };GridView1.DataBind();
GridView實現(xiàn)隔行換色
JavaScript代碼:
Body引用
引用GridView在頁面中
1、最簡單的引用
2、嵌入Table的引用
表名 <%--設(shè)置表頭--%>
第1列 第2列 第3列 第4列 第5列/th> 第6列 第7列 <%--設(shè)置表的內(nèi)容--%>
第1列 第2列 第3列 第4列 第5列 第6列 第7列
保存GridView內(nèi)容到EXCEL
1、第一種方式 1.1、添加com組建
1.2、添加引用 using Excel = Microsoft.Office.Interop.Excel;using System.Reflection;using System.Runtime.InteropServices;1.3、實現(xiàn)保存 //判斷數(shù)據(jù)是否為空 if(GvData.Rows.Count <= 1){
Response.Write(”“);
return;} //創(chuàng)建一個Excel應(yīng)用程序
Excel.Application excel = new Excel.Application();//是否顯示導(dǎo)出過程 excel.Visible = false;//定義缺省值
Missing miss = Missing.Value;//創(chuàng)建一個新的工作簿
Excel.Workbooks workbooks = excel.Workbooks;Excel.Workbook workbook = workbooks.Add(miss);Excel.Worksheet sheet = workbook.ActiveSheet as Excel.Worksheet;sheet.Name = ”This is a test Excel“;Excel.Range er;
//獲取列數(shù)
int column = this.GvData.Rows[0].Cells.Count;//獲取行數(shù)
int row = this.GvData.Rows.Count;
//表的名稱
excel.Cells[1, 1] = ”表名“;er = sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[1, column]);//獲取第一行 er.Merge(0);//合并單元格
er.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//設(shè)置居中對齊 er.Font.Size = 11;//設(shè)置字體大小
er.Cells.Interior.ColorIndex = 15;//設(shè)置背景色
//循環(huán)添加表頭
for(int i = 0;i < column;i++){
excel.Cells[2, i + 1] = this.GvData.HeaderRow.Cells[i].Text;}
//添加主體
for(int i = 0;i < row;i++){
for(int j = 0;j < column;j++)
{
excel.Cells[i + 3, j + 1] = this.GvData.Rows[i].Cells[j].Text;} }
//設(shè)置Excel表格屬性
er = sheet.get_Range(sheet.Cells[2, 1], sheet.Cells[row+2, column]);er.Font.Size = 11;er.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;er.EntireColumn.AutoFit();//設(shè)置自動調(diào)整列寬 er.Borders.LineStyle = 1;//添加邊框
string fileName = @Server.MapPath(”“).ToString()+ ”表名稱-“ + DateTime.Now.ToLongDateString()+ ”.xlsx“;sheet.SaveAs(fileName, miss, miss, miss, miss, miss, Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss);//關(guān)閉表格
workbook.Close(false, miss, miss);workbooks.Close();//釋放資源 excel.Quit();//選擇保存路徑進行保存
FileInfo DownloadFile = new FileInfo(fileName);Response.Clear();Response.ClearHeaders();Response.Buffer = false;Response.ContentType = ”application/octet-stream“;Response.AppendHeader(”Content-Disposition“, ”attachment;filename=“ + HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8));Response.AppendHeader(”Content-Length“, DownloadFile.Length.ToString());Response.WriteFile(DownloadFile.FullName);Response.End();
2、第二種方式
protected void BtnExport_Click(object sender, EventArgs e){ string fileName;fileName = System.DateTime.Now.ToString(”yyyy-MM-dd“);Export(”application/ms-excel“, fileName+”.xls“);} ///
///
private void Export(string FileType, string FileName){
Response.Charset = ”GB2312“;
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AppendHeader(”Content-Disposition“, ”attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.ContentType = FileType;
this.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
GrdContent.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();} ///
public override void VerifyRenderingInServerForm(Control control){ }
第三篇:總結(jié)、報表管理辦法
總結(jié)、報表管理辦法
1、主題內(nèi)容與適用范圍
1.1 本辦法補充規(guī)定了部門內(nèi)部各類總結(jié)和報表的匯總部門及內(nèi)容、時間。
1.2本辦法適用于所有科室。2.總結(jié)、報表內(nèi)容及填報單位 2.1業(yè)務(wù)總結(jié)、報表
2.1.1市場營銷科總結(jié)、報表:《電熱氣分析報告》、《大客戶建設(shè)進度表》;
2.1.2信息服務(wù)科總結(jié)、報表:《“95598”業(yè)務(wù)分析》(信息科月度總結(jié));
2.1.3 計量管理科總結(jié)、報表:《電能計量裝置使用情況分析》;
2.1.4 公共類總結(jié)、報表:《各科室周志》 2.2 公司總結(jié)、報表
2.2.1綜合管理科總結(jié)、報表:《周志》、《各營銷單位一周工作匯總》、《月度總結(jié)》、《領(lǐng)導(dǎo)班子月度總結(jié)》、《分、子公司月(季)度指標(biāo)完成情況表》;《營銷工作綜合分析報告》、《公司月度營銷工作報告》、《分、子公司營銷服務(wù)類指標(biāo)考核情況通報》、《電熱費回收情況表》、《電熱費欠費情況統(tǒng)計》、《平均電價變動分析》、《安全監(jiān)察簡報》、《安全生產(chǎn)隱患排查治理情況統(tǒng)計表》。3.報表時間及報表形式
3.1各科每周四必須在上午13:30分前將本周周志以電子郵件形式報綜合管理科馬蘋。
3.2 各科每月25日下午19:30分前(如遇雙休日和法定假日,提前至每月25日前的星期五下午19:30分前)將當(dāng)月工作總結(jié)以電子郵件形式報綜合管理科馬蘋。其它半年總結(jié)和臨時性總結(jié)以具體通知時間為準(zhǔn)。3.3《“95598”業(yè)務(wù)分析》(信息科月度總結(jié))必須在當(dāng)月26日下午19:30前(如遇雙休日和法定假日,提前至每月26日前的星期五下午19:30分前)以電子郵件形式報綜合管理科郭海云;
3.4《電能計量裝置使用情況分析》必須在當(dāng)月27日下午19:30前(如遇雙休日和法定假日,提前至每月27日前的星期五下午19:30分前)以電子郵件形式報綜合管理科郭海云;
3.5《大客戶建設(shè)進度表》必須在當(dāng)月30日下午19:30前(如遇雙休日和法定假日,提前至每月30日前的星期五下午19:30分前)以電子郵件形式報綜合管理科郭海云; 3.6《電熱氣分析報告》必須在次月2日下午18:00前(如遇雙休日和法定假日,必須在次月3日下午18:00前)以電子郵件形式報綜合管理科;但其中供熱量,包括其中蒸汽、采暖數(shù)據(jù)指標(biāo)必須在當(dāng)月30日下午18:00前(如遇雙休日和法定假日,提前至每月30日前的星期五下午18:00分前)以電子郵件形式報綜合管理科郭海云;
3.7向股份公司上報的周志,必須在每周星期四下午18:00前以電子郵件形式報綜合管理科科長;《各營銷單位一周工作匯總》必須在每周五下午18:00前以電子郵件形式報綜合管理科科長。
3.8向股份公司上報的《客戶服務(wù)中心月度總結(jié)》、《客戶服務(wù)中心領(lǐng)導(dǎo)班子月度總結(jié)》、《分、子公司月(季)度指標(biāo)完成情況表》必須在每月27日上午12:00前(如遇雙休日或國家法定休息日,應(yīng)提前在26日或25日下午17:00前)以電子郵件形式報綜合管理科科長。
3.9向股份公司領(lǐng)導(dǎo)報送的《公司月度營銷工作報告》必須在每月2日上午12:30前(如遇雙休日和法定假日,必須在次月4日上午12:30前)以電子郵件形式報綜合管理科科長。
3.10向股份公司上報的《分、子公司營銷服務(wù)類指標(biāo)考核情況通報》必須在每月4日下午18:00前(如遇雙休日或國家法定休息日,應(yīng)提前在2日或3日下午18:00前)以電子郵件形式報綜合管理科科長。
3.11向股份公司領(lǐng)導(dǎo)報送的《營銷工作綜合分析報告》必須在每月7日上午12:00前(如遇雙休日和法定假日,必須在次月8日或9日上午12:00前)以電子郵件形式報綜合管理科科長。
3.12向股份公司領(lǐng)導(dǎo)報送的《平均電價變動分析》必須在每月2日上午12:00前(如遇雙休日和法定假日,必須在次月4日上午12:00前)以電子郵件形式報郭海云,同時報綜合管理科科長。
3.13向股份公司領(lǐng)導(dǎo)報送的《電熱費回收情況表》、《電熱費欠費情況統(tǒng)計》必須在次月4日上午12:00前(如遇雙休日和法定假日,必須在次月5日或6日上午12:30前)以電子郵件形式報郭海云,同時報綜合管理科科長。
3.14向股份公司安監(jiān)部報送的《安全監(jiān)察簡報》和《安全生產(chǎn)隱患排查治理情況統(tǒng)計表》必須在每月27日18點前(如遇雙休日或國家法定休息日,應(yīng)提前在25日或26日下午18:00前)以電子郵件形式或書面形式報綜合管理科《安監(jiān)科》科長。審核后,上報公司安監(jiān)部。
4、工作質(zhì)量
4.1各科室必須按本管理補充辦法規(guī)定的時間,按時上報各科室總結(jié)、報表,同時應(yīng)保證所報總結(jié)、報表內(nèi)容真實、準(zhǔn)確。
4.2本辦法中向股份公司報送的總結(jié)和報表,由辦法中規(guī)定的各工作負責(zé)人必須按規(guī)定的時間和形式上報。因其它單位或部門影響上報時間的,應(yīng)提前一天向科室及中心領(lǐng)導(dǎo)匯報。
4.3負責(zé)上報總結(jié)和報表的負責(zé)人,在其它單位或部門提供的總結(jié)和報表內(nèi)容和數(shù)據(jù)無誤的基礎(chǔ)上,必須對所報總結(jié)和報表中內(nèi)容的真實性、準(zhǔn)確性負責(zé)。
4.4負責(zé)匯總、整理或分析上報的負責(zé)人,發(fā)現(xiàn)其它單位或部門上報內(nèi)容或數(shù)據(jù)有問題,直接影響上報工作的,應(yīng)提前與其它單位或部門負責(zé)人溝通、聯(lián)系,要求對所報內(nèi)容或數(shù)據(jù)進行核對再行上報。如其它單位或部門再次上報的內(nèi)容或數(shù)據(jù)仍有問題,影響總結(jié)或報表上報的,由負責(zé)匯總、整理或分析上報負責(zé)人提出考核建議,在公司營銷會議上進行上報考核。
4.5 負責(zé)整理、匯總總結(jié)、報表負責(zé)人與直接上報總結(jié)、報表負責(zé)人,應(yīng)主動相互核對總結(jié)、報表中內(nèi)容與數(shù)據(jù)的準(zhǔn)確性,相關(guān)的內(nèi)容或相同的項目應(yīng)保證內(nèi)容與數(shù)據(jù)一致性,確有客觀原因,影響數(shù)據(jù)的一致性和唯一性,應(yīng)注明合理原因,說明清楚影響的情況。5.檢查與考核
5.1未按規(guī)定時間上報總結(jié)和報表的,每類總結(jié)、報表每超一天扣責(zé)任人員1分;同時扣責(zé)任科室科長1分; 5.2因工作人員本人原因,直接影響到總結(jié)和報表按時上報的扣責(zé)任人員3分;
5.3 屬于本權(quán)限范圍內(nèi)未發(fā)現(xiàn)其它單位和部門上報的總結(jié)和報表的內(nèi)容或數(shù)據(jù)有問題,直接影響總結(jié)和報表按時上報的扣責(zé)任人員2分;
5.4對中心各科室及專業(yè)人員報送的內(nèi)容和數(shù)據(jù),發(fā)現(xiàn)有不準(zhǔn)確的,扣責(zé)任人員2分。
5.5未按本辦法第4.5條規(guī)定的,發(fā)生相同類項目的內(nèi)容和數(shù)據(jù)結(jié)果不一致,不是唯一性,沒有客觀原因進行明確說明的,整理、匯總負責(zé)人又未積極、及時核對處理的,對整理、匯總負責(zé)人和負責(zé)直接報送總結(jié)、報表負責(zé)人各扣2分; 5.6因其它單位或部門原因,直接影響到總結(jié)和報表上報的,提出考核建議,報中心領(lǐng)導(dǎo)批準(zhǔn)后進行考核。
第四篇:biee報表開發(fā)總結(jié)
biee報表開發(fā)總結(jié)
(一)當(dāng)BI項目已經(jīng)在essbase中搭建好框架之后,接著就要通過biee制作各種報表來展示BI的成果了。
BIEE報表開發(fā)能否成功的關(guān)鍵就在于初期的設(shè)計。首先你必須明確你的需求,你開發(fā)的報表是給哪些人使用的,他們會如何使用,比如他們一般會有些什么輸入,他們希望產(chǎn)生什么樣的輸出以及他們可能會做什么樣的下鉆動作。一張報表往往只是給一類人使用的,你必須精心地為他們挑選合適的維度以及初始粒度。所以同樣的查詢內(nèi)容往往需要做好幾張報表適合不同維度不同方式的數(shù)據(jù)查看(用下鉆的方式可以通過匯總數(shù)據(jù)查詢到詳細數(shù)據(jù),但是效率不高,如果已有足夠的信息可以直接查到詳細數(shù)據(jù)則直接顯示詳細數(shù)據(jù))。這樣做可以減少每次查詢使用到得維度,從而提高查詢效率。一般在一張儀表盤頁中只放一張報表(匯總報表除外)。
一組報表一般由一張匯總報表(給領(lǐng)導(dǎo)查看)和幾張明細查閱報表組成,匯總報表中包含各種圖表,初始粒度大,同時支持很深的下鉆,明細報表針對某個用途提供合適的查詢方式,一般不放圖表。維度是由請求字段控制的,字段越多查詢越慢,所以請求字段不能過多,尤其是大的維度(我遇到過成員好幾千的維度,而且層次很少)不能太多,除非已經(jīng)在篩選器中進行控制,最好不要直接添加時間字段,而使用全局篩選器來控制時間。相反請求提示和相應(yīng)的篩選器越多查詢效率就越高,所以請求提示和篩選器可以多一些(這樣還可以提供便捷的訪問),請求提示使用什么輸入方式也是需要考慮的問題。關(guān)于使用表還是數(shù)據(jù)透視表,兩者各有利弊。表因為其結(jié)構(gòu)就是請求字段的結(jié)構(gòu),所以可操作性強一些,可以實現(xiàn)很多數(shù)據(jù)透視表無法實現(xiàn)的功能(儀表盤排序,條件樣式等),但是數(shù)據(jù)透視表在表現(xiàn)能力上優(yōu)于表,尤其是維度較多的情況,可以通過一些高級的操作來改善數(shù)據(jù)透視表的功能(如修改saw腳本)。
總體來說BIEE報表的設(shè)計要控制好以下3點:
1、匯總和明細分開;
2、控制各種不同的查詢路徑;
3、考慮查詢效率。
biee報表開發(fā)總結(jié)
(二)因為我做的報表的數(shù)據(jù)源是essbase多維數(shù)據(jù)庫,所以在制作報表時不需要在administration tool當(dāng)中添加維度和度量。只要直接導(dǎo)入數(shù)據(jù)源,然后做兩次拖曳就可以了。但是很不幸的是BIEE其實并沒有提供對essbase很好的支持,很多功能都無法實現(xiàn),或需要調(diào)整之后才能實現(xiàn)。
在將文件夾從物理層拖到邏輯層之后,可以看到多維數(shù)據(jù)庫的邏輯結(jié)構(gòu),但是展開的時候有些讓人不知所云,因為biee并不使用essbase大綱中的名稱,而是根據(jù)維度層次來命名的。需要注意的是每個維度實際是從第2層(Gen2)開始的(因為essbase大綱中的實際維度也是從第2層開始算起,第0層是大綱的根,第1層是維度的根),之后的層次可以看到被標(biāo)為藍色,這類似于關(guān)系型的雪花模型。所以在將文件夾從邏輯層拖到展現(xiàn)層之后就可以把第0層和第1層刪了。維度的每一層只有一個key,它到底是維度值還是它的別名呢?答案是別名,而且我到目前為止還沒有發(fā)現(xiàn)顯示維度值的方法(可能是BIEE不支持)。接著修改一下維度和度量的標(biāo)簽就可以在answer里面使用了。但是這樣還是不夠的,當(dāng)使用到聚合的時候就會出現(xiàn)“發(fā)現(xiàn)外部聚合集”的錯誤,原因是BIEE在導(dǎo)入essbase的時候,默認將度量的聚合屬性設(shè)置為外部聚合。只要將外部聚合改為正確的度量即可,注意在物理層和邏輯層都要改,另外所有度量都要指定一種聚合方式,不能為none。
biee報表開發(fā)總結(jié)
(三)在answers中的開發(fā)難點就在于設(shè)計,我在(一)中已經(jīng)介紹了經(jīng)驗。但是顯然不可能一開始就設(shè)計得十分完美,有的時候會遇到功能實現(xiàn)不了或者效率太低,報表根本刷不出來,這時要么修改原先的設(shè)計,要么想辦法解決問題。
關(guān)于如何提高效率,首先是優(yōu)化查詢。在BIEE當(dāng)中,有趣的一點是它首先根據(jù)你的設(shè)計生成一條SQL查詢語句,然后如果判斷出數(shù)據(jù)源是多維數(shù)據(jù)庫,則再將SQL語句在后臺轉(zhuǎn)化為MDX語句去執(zhí)行。轉(zhuǎn)化的邏輯大致是,select子句中放查詢目標(biāo)集(對應(yīng)于MDX中的select字句,但是沒有行列之分),from字句中放cube,where字句中定義如何進行切片。所以在設(shè)計時盡量控制請求字段(對應(yīng)select字句)中的維度字段,不需要的維度不要添加,尤其是大維度,而篩選器(對應(yīng)where字句)則盡可能的多,這樣切片可以切得小一些。另外查詢的邏輯不要太復(fù)雜,不要使用嵌套查詢(篩選器不要使用“根據(jù)其他請求結(jié)果”)。如果這樣還不行,就只能優(yōu)化數(shù)據(jù)源了,對于essbase,可以考慮將一些復(fù)雜的動態(tài)計算轉(zhuǎn)為預(yù)先計算后存儲(雖然這樣做很可能會導(dǎo)致占用的空間增長好幾倍...),可以大大提高效率。
在BIEE中表的樣式控制要比數(shù)據(jù)透視表靈活得多,基本的樣式都是可控的,所以能用表的時候就盡量用表。關(guān)于如何設(shè)置樣式,由于比較繁雜而且在(一)中也介紹了一些經(jīng)驗,所以這里就不一一介紹了,比較重要的就是條件樣式(只用表能用),可以靈活地控制顯示樣式,另外就是列的隱藏,可以控制哪些列在表中不顯示。
BIEE的訪問控制是比較靈活的,可以使用單獨的鏈接,也可以對標(biāo)題設(shè)鏈接,還可以對值設(shè)鏈接,并可以控制是否用于下鉆(在列的交互控制當(dāng)中設(shè)置搜索或鏈接)。BIEE最神奇的就是篩選器中的提示選項,選了這個選項不僅可以使用提示中的選擇還可以用于鏈接的值傳遞。如果一個請求的字段的篩選器使用提示,則通過值鏈接被連接過來的時候,該字段就會被篩選為進行鏈接的那個值。另外使用提示默認是所有值,所以可以靈活的控制提示字段,比如同一個請求在不同地方使用時,需要的查詢條件可能不同,這時可以通過請求提示來控制查詢條件,此時就必須將所有使用到的查詢條件字段加一個使用請求的篩選器。
不過在awnser中提示篩選器是不會被使用的,如果不使用篩選器就會導(dǎo)致查詢過慢的話,建議在設(shè)計報表時先指定一個篩選值,設(shè)計完成后再將篩選器的篩選方式改為請求。對于實在無法實現(xiàn)的功能,最后一條路就是修改saw腳本了,但是有關(guān)BIEE的saw腳本的文檔實在太少...不過通過查看saw腳本倒是可以分析出別人的報表的某些功能是怎么實現(xiàn)的。實施上saw腳本包含了一個請求的一切,包括顯示樣式和SQL查詢,所以如果要備份或者拷貝一個請求,最簡單的方法就是把saw腳本拷貝下來。如果你想直接修改SQL查詢語句,應(yīng)該先看一下SQL查詢語句的各個字句存儲在saw腳本中的什么位置,然后對saw腳本修改,如果直接改下面的SQL框,點了設(shè)置SQL的結(jié)果是,它產(chǎn)生一個最簡單的SQL語句(沒有任何附加內(nèi)容),而且把原來你的一切設(shè)置都重新初始化(要是你之前沒備份的化,趕緊退出重來吧,千萬不要保存了...)
另外介紹一些經(jīng)驗。為了防止字段過多導(dǎo)致一格內(nèi)無法一行顯示,可以在格式化視圖的附加格式中指定一個很大的寬度,然后選擇單元格向左對齊。如果只想修改請求條件的化,最好不要直接雙擊進入,而是先打開所在的文件夾,然后在面板中選擇修改條件,這樣可以避免一次不必要的查詢。查詢?nèi)绻惓V袛?,即使你在后臺取消了請求,甚至刪除會話,essbase仍然會繼續(xù)執(zhí)行,如果你想進入同一個請求就會報錯,這時你能做的就是等待,等essbase執(zhí)行完畢才能繼續(xù)使用(這也是BIEE與essbase不兼容的一個表現(xiàn),它導(dǎo)致了BIEE的不穩(wěn)
定,所以要盡量避免沒有篩選控制的查詢)。
biee報表開發(fā)總結(jié)
(四)本文主要講biee中answers和dashboard的開發(fā)步驟。在administrator tool搭建好框架之后,接著通
過在瀏覽器中操作的answers和dashboard開發(fā)最后的報表顯示。
首先要做的是添加全局篩選器。對每一個維度都設(shè)定一個全局篩選器,每個層次都設(shè)定為請求。
接著開發(fā)請求。按請求在報表中的使用順序一個一個開發(fā)請求。先選擇合適的請求字段,再添加全局
篩選器,接著添加測試篩選條件(因為全局篩選器中的篩選條件都是請求,所以不會在answers中發(fā)揮作
用,所以不會和測試篩選條件沖突),然后在表中查看結(jié)果,如果要用表顯示則調(diào)整字段的順序。如果不
報錯且數(shù)據(jù)無誤,則返回請求條件面板,添加一些需要計算的字段(這些字段可以通過加入一個原始字段
然后用編輯公式輸入計算表達式產(chǎn)生),設(shè)置標(biāo)題和值的樣式,并添加篩選器。然后在結(jié)果面板中開發(fā)需
要用到的數(shù)據(jù)透視表或圖表,同樣需要設(shè)置字段順序和顯示樣式和一些其他小功能(比如計算和排序)。
然后在組合布局中調(diào)整布局,并調(diào)整格式化視圖中的值。最后回到條件面板,在列格式中設(shè)置交互即鏈接
(建議不要現(xiàn)在做,因為鏈接最好鏈接到儀表盤,不過如果鏈接的內(nèi)容很簡單也可以這里做)。
然后開發(fā)提示。提示要考慮到所有可能的篩選,提示可以盡量多(就像篩選要盡量多),但是必須要
關(guān)聯(lián)到篩選器。提示的輸入方式很重要,必須要根據(jù)實際需求精心設(shè)計。提示之間有關(guān)聯(lián)的要勾選約束,這樣可以限制提示的內(nèi)容。但是biee的約束很惡心,你不能限定某幾個提示有約束,一旦勾選了約束,就
會和所有約束關(guān)聯(lián),也就是說如果其他任何一個提示被輸入錯誤的值,它就會報錯。對提示進行分組以防
止一行中提示太多。提示設(shè)計完成后一定要預(yù)覽一下,看看效果如何,尤其是約束關(guān)系。這時可以將所有的測試篩選器刪除了。
然后就可以再dashboard上開發(fā)了。首先建一個儀表盤,然后添加提示和請求,不同的請求放在不同的部分,但是因為部分只能垂直排列,所以如果要水平排列則必須放在同一個部分,并設(shè)置排列方式為水
平排列,排版的時候要注意,各部分的附加格式的寬度必須一致,否則會出現(xiàn)排版錯誤。最后就是甚至權(quán)限了,這個很簡單,這里不介紹了。
整個開發(fā)過程當(dāng)然不可能按上面的步驟一帆風(fēng)順地做下來,在開發(fā)過程中經(jīng)常會遇到需求變更和一些
意外的結(jié)果,所以整個開發(fā)過程應(yīng)該是一個循環(huán)迭代的過程,不斷地完善,最后使得開發(fā)出
來的報表十分
好用而且能夠從各方面反映這個報表應(yīng)該反映的內(nèi)容。
第五篇:報表的學(xué)習(xí)總結(jié)
關(guān)于ActiveReports for.NET 3.0 Setup NET 的一些總結(jié):
1:2010上不能建立該報表文件,需要在2008上建好后,復(fù)制到2010上用;
2:不存在計算列時,點擊detial,將該報表需要連接的數(shù)據(jù)庫的,連接字符串和執(zhí)行的語句在顯示的窗口上寫入,要看清楚所要進行操作的數(shù)據(jù)庫是那種類型的;
3:然后,在相應(yīng)的文本框上設(shè)置氣屬性:dataFile屬性,設(shè)置其對應(yīng)的字段,4:當(dāng)需要計算某列的總值時,需要在設(shè)計代碼界面 將下面的代碼寫在相應(yīng)的位置,然在設(shè)計視圖界面在gfOrderID的框架里面對相應(yīng)的textbox的屬性進行相應(yīng)的操作
//==========
private DataDynamics.ActiveReports.GroupHeader ghOrderID;
private DataDynamics.ActiveReports.Detail detail;
private DataDynamics.ActiveReports.GroupFooter gfOrderID;
//==========
this.ghOrderID = new DataDynamics.ActiveReports.GroupHeader();
this.detail = new DataDynamics.ActiveReports.Detail();
this.gfOrderID = new DataDynamics.ActiveReports.GroupFooter();
//
// ghOrderID
//
this.ghOrderID.CanShrink = true;
this.ghOrderID.GroupKeepTogether = DataDynamics.ActiveReports.GroupKeepTogether.FirstDetail;this.ghOrderID.Height = 0.7708333F;
this.ghOrderID.Name = “ghOrderID”;
//
// detail
//
this.detail.ColumnSpacing = 0F;
this.detail.Height = 2F;
this.detail.Name = “detail”;
//
// gfOrderID
//
this.gfOrderID.CanShrink = true;
this.gfOrderID.Height = 0.2916667F;
this.gfOrderID.Name = “gfOrderID”;
this.Sections.Add(this.ghOrderID);
this.Sections.Add(this.detail);
this.Sections.Add(this.gfOrderID);
5:當(dāng)SQL語句的列不能滿足需求時,需要在現(xiàn)有的基礎(chǔ)上添加某列時,找到報表的DataInitialize 事件中添加某列值對應(yīng)的字段名稱
this.Fields.Add(“列名”);
就添加了一個新列
在報表的FetchData
事件中對該列進行賦值
得到SQL語句產(chǎn)生的某列的值
double zmoney = Convert.ToDouble(this.Fields[“Eat_Number”].Value, CultureInfo.CurrentCulture);double kmoney = Convert.ToDouble(this.Fields[“Eat_Price”].Value, CultureInfo.CurrentCulture);// Now perform the calculation for our added calculated field:
對新列進行賦值
this.Fields[“TotalMoney”].Value = zmoney * kmoney;
在報表的設(shè)計界面對控件進行綁定相應(yīng)的字段,這樣就完成了相應(yīng)數(shù)據(jù)的綁定
6:當(dāng)列是動態(tài)列時,我們首先要要訪問數(shù)據(jù)庫,得到相應(yīng)動態(tài)列的列名,在ReportStart 事件中設(shè)計需要顯示的動態(tài)數(shù)據(jù)綁定相應(yīng)控件的設(shè)置,這樣就完成動態(tài)數(shù)據(jù)的綁定
或者根據(jù)規(guī)定的規(guī)則根據(jù)列名來判斷該字段是否是動態(tài)列,進而來設(shè)置動態(tài)列,詳細的設(shè)置代碼自己可以查找,或者對應(yīng)下面的代碼
#region 表頭
Label lb = new DataDynamics.ActiveReports.Label();
lb.Border.BottomColor = System.Drawing.Color.Black;
lb.Border.BottomStyle = DataDynamics.ActiveReports.BorderLineStyle.None;lb.Border.LeftColor = System.Drawing.Color.Black;
lb.Border.LeftStyle = DataDynamics.ActiveReports.BorderLineStyle.None;lb.Border.RightColor = System.Drawing.Color.Black;
lb.Border.RightStyle = DataDynamics.ActiveReports.BorderLineStyle.None;lb.Border.TopColor = System.Drawing.Color.Black;
lb.Border.TopStyle = DataDynamics.ActiveReports.BorderLineStyle.None;lb.Height = 0.1875F;
lb.HyperLink = null;
lb.Left =(float)(2f + lbLeft * i);
lb.Name = “l(fā)b” + i.ToString();
lb.Style = “ddo-char-set: 0;background-color: LightGrey;font-size: 9.75pt;font-family: Sim” +
“Sun;”;
lb.Text = dt.Rows[i][0].ToString();
lb.Top = 0F;
lb.Width =(float)(lbLeft-0.1f);
this.ghOrderID.Controls.Add(lb);
#endregion
#region 各門店詳細數(shù)據(jù)
TextBox txt = new DataDynamics.ActiveReports.TextBox();
txt.Border.BottomColor = System.Drawing.Color.Black;
txt.Border.BottomStyle = DataDynamics.ActiveReports.BorderLineStyle.None;txt.Border.LeftColor = System.Drawing.Color.Black;
txt.Border.LeftStyle = DataDynamics.ActiveReports.BorderLineStyle.None;txt.Border.RightColor = System.Drawing.Color.Black;
txt.Border.RightStyle = DataDynamics.ActiveReports.BorderLineStyle.None;txt.Border.TopColor = System.Drawing.Color.Black;
txt.Border.TopStyle = DataDynamics.ActiveReports.BorderLineStyle.None;txt.DataField = dt.Rows[i][0].ToString();
txt.Height = 0.25F;
txt.Left =(float)(2f + lbLeft * i);
txt.Name = “txt” + i.ToString();
txt.OutputFormat = “0.00”;
txt.Style = “";
txt.SummaryGroup = ”ghOrderID“;
txt.Text = ”";
txt.Top = 0F;
txt.Width =(float)(lbLeft-0.1f);
this.detail.Controls.Add(txt);
#endregion
7:子報表的設(shè)置
在主報表Detail設(shè)計框中拖入subReport控件,在代碼界面申明對應(yīng)的子報表,然后實例化,并賦值為null(CheckListReport subReport = null;)然后在reportStart事件中寫
if(subReport == null)
{
subReport = new CheckListReport();
this.subReport1.Report = subReport;
}
在ReportEnd事件中寫
subReport.Document.Dispose();
subReport.Dispose();
subReport = null;
在事件detail_Format寫
this.subReport1.Report.ShowParameterUI = false;
this.subReport1.Report.Parameters[0].Type = Parameter.DataType.String;
this.subReport1.Report.Parameters[0].Value = this.textBox1.Text;(主報表和自報表關(guān)聯(lián)的字段對應(yīng)的控件)
子報表中傳遞的參數(shù)(從主報表中)的寫法是cast('<%Eat_Text|Enter Eat_Text|1|S%>' as varchar(300))
將字段替換成相應(yīng)的字段就可以了