第一篇:报表的学习总结
关于ActiveReports for.NET 3.0 Setup NET 的一些总结:
1:2010上不能建立该报表文件,需要在2008上建好后,复制到2010上用;
2:不存在计算列时,点击detial,将该报表需要连接的数据库的,连接字符串和执行的语句在显示的窗口上写入,要看清楚所要进行操作的数据库是那种类型的;
3:然后,在相应的文本框上设置气属性:dataFile属性,设置其对应的字段,4:当需要计算某列的总值时,需要在设计代码界面 将下面的代码写在相应的位置,然在设计视图界面在gfOrderID的框架里面对相应的textbox的属性进行相应的操作
//==========
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:当SQL语句的列不能满足需求时,需要在现有的基础上添加某列时,找到报表的DataInitialize 事件中添加某列值对应的字段名称
this.Fields.Add(“列名”);
就添加了一个新列
在报表的FetchData
事件中对该列进行赋值
得到SQL语句产生的某列的值
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;
在报表的设计界面对控件进行绑定相应的字段,这样就完成了相应数据的绑定
6:当列是动态列时,我们首先要要访问数据库,得到相应动态列的列名,在ReportStart 事件中设计需要显示的动态数据绑定相应控件的设置,这样就完成动态数据的绑定
或者根据规定的规则根据列名来判断该字段是否是动态列,进而来设置动态列,详细的设置代码自己可以查找,或者对应下面的代码
#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 = “lb” + 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 各门店详细数据
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:子报表的设置
在主报表Detail设计框中拖入subReport控件,在代码界面申明对应的子报表,然后实例化,并赋值为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;(主报表和自报表关联的字段对应的控件)
子报表中传递的参数(从主报表中)的写法是cast('<%Eat_Text|Enter Eat_Text|1|S%>' as varchar(300))
将字段替换成相应的字段就可以了
第二篇:2015总结报表
2015总结报告
2014已经过去,首先感谢领导给我这个机会,让我有幸成为富邦的一员,2014进入富邦一个多月的时间主要是了解公司及产品的相关情况,2015年计划如下:
一、加强对家具销售专业知识的学习:
1)产品知识方面:对于办公家具产品材料特点、规格型号包括面料和产品等以及使用方法、保养及维修知识。
2)客户需求方面:对办公家具购买者包括潜在客户的消费心理、消费层次、及对生产产品的基本要求,加深引导。
3)市场知识方面:对家具市场的动向和变化、顾客购买力情况认识,对不同区域市场分析;工程进度认识。
4)专业知识方面:对家具有关的工艺技术知识学习,如装修设计,空间布局与家具摆放的美观性没有概念。5)签单技巧的培养。
“怎么拿到客户→跟踪客户→业务谈判→方案设计→成功签单→售后安装→售后维护→人际维护”等这一系列的流程的学习。
第三篇:GridView报表总结
绑定数据
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实现隔行换色
JavaScript代码:
Body引用
引用GridView在页面中
1、最简单的引用
2、嵌入Table的引用
表名 <%--设置表头--%>
第1列 第2列 第3列 第4列 第5列/th> 第6列 第7列 <%--设置表的内容--%>
第1列 第2列 第3列 第4列 第5列 第6列 第7列
保存GridView内容到EXCEL
1、第一种方式 1.1、添加com组建
1.2、添加引用 using Excel = Microsoft.Office.Interop.Excel;using System.Reflection;using System.Runtime.InteropServices;1.3、实现保存 //判断数据是否为空 if(GvData.Rows.Count <= 1){
Response.Write(”“);
return;} //创建一个Excel应用程序
Excel.Application excel = new Excel.Application();//是否显示导出过程 excel.Visible = false;//定义缺省值
Missing miss = Missing.Value;//创建一个新的工作簿
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;
//获取列数
int column = this.GvData.Rows[0].Cells.Count;//获取行数
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;//设置居中对齐 er.Font.Size = 11;//设置字体大小
er.Cells.Interior.ColorIndex = 15;//设置背景色
//循环添加表头
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;} }
//设置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();//设置自动调整列宽 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);//关闭表格
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){ }
第四篇:总结、报表管理办法
总结、报表管理办法
1、主题内容与适用范围
1.1 本办法补充规定了部门内部各类总结和报表的汇总部门及内容、时间。
1.2本办法适用于所有科室。2.总结、报表内容及填报单位 2.1业务总结、报表
2.1.1市场营销科总结、报表:《电热气分析报告》、《大客户建设进度表》;
2.1.2信息服务科总结、报表:《“95598”业务分析》(信息科月度总结);
2.1.3 计量管理科总结、报表:《电能计量装置使用情况分析》;
2.1.4 公共类总结、报表:《各科室周志》 2.2 公司总结、报表
2.2.1综合管理科总结、报表:《周志》、《各营销单位一周工作汇总》、《月度总结》、《领导班子月度总结》、《分、子公司月(季)度指标完成情况表》;《营销工作综合分析报告》、《公司月度营销工作报告》、《分、子公司营销服务类指标考核情况通报》、《电热费回收情况表》、《电热费欠费情况统计》、《平均电价变动分析》、《安全监察简报》、《安全生产隐患排查治理情况统计表》。3.报表时间及报表形式
3.1各科每周四必须在上午13:30分前将本周周志以电子邮件形式报综合管理科马苹。
3.2 各科每月25日下午19:30分前(如遇双休日和法定假日,提前至每月25日前的星期五下午19:30分前)将当月工作总结以电子邮件形式报综合管理科马苹。其它半年总结和临时性总结以具体通知时间为准。3.3《“95598”业务分析》(信息科月度总结)必须在当月26日下午19:30前(如遇双休日和法定假日,提前至每月26日前的星期五下午19:30分前)以电子邮件形式报综合管理科郭海云;
3.4《电能计量装置使用情况分析》必须在当月27日下午19:30前(如遇双休日和法定假日,提前至每月27日前的星期五下午19:30分前)以电子邮件形式报综合管理科郭海云;
3.5《大客户建设进度表》必须在当月30日下午19:30前(如遇双休日和法定假日,提前至每月30日前的星期五下午19:30分前)以电子邮件形式报综合管理科郭海云; 3.6《电热气分析报告》必须在次月2日下午18:00前(如遇双休日和法定假日,必须在次月3日下午18:00前)以电子邮件形式报综合管理科;但其中供热量,包括其中蒸汽、采暖数据指标必须在当月30日下午18:00前(如遇双休日和法定假日,提前至每月30日前的星期五下午18:00分前)以电子邮件形式报综合管理科郭海云;
3.7向股份公司上报的周志,必须在每周星期四下午18:00前以电子邮件形式报综合管理科科长;《各营销单位一周工作汇总》必须在每周五下午18:00前以电子邮件形式报综合管理科科长。
3.8向股份公司上报的《客户服务中心月度总结》、《客户服务中心领导班子月度总结》、《分、子公司月(季)度指标完成情况表》必须在每月27日上午12:00前(如遇双休日或国家法定休息日,应提前在26日或25日下午17:00前)以电子邮件形式报综合管理科科长。
3.9向股份公司领导报送的《公司月度营销工作报告》必须在每月2日上午12:30前(如遇双休日和法定假日,必须在次月4日上午12:30前)以电子邮件形式报综合管理科科长。
3.10向股份公司上报的《分、子公司营销服务类指标考核情况通报》必须在每月4日下午18:00前(如遇双休日或国家法定休息日,应提前在2日或3日下午18:00前)以电子邮件形式报综合管理科科长。
3.11向股份公司领导报送的《营销工作综合分析报告》必须在每月7日上午12:00前(如遇双休日和法定假日,必须在次月8日或9日上午12:00前)以电子邮件形式报综合管理科科长。
3.12向股份公司领导报送的《平均电价变动分析》必须在每月2日上午12:00前(如遇双休日和法定假日,必须在次月4日上午12:00前)以电子邮件形式报郭海云,同时报综合管理科科长。
3.13向股份公司领导报送的《电热费回收情况表》、《电热费欠费情况统计》必须在次月4日上午12:00前(如遇双休日和法定假日,必须在次月5日或6日上午12:30前)以电子邮件形式报郭海云,同时报综合管理科科长。
3.14向股份公司安监部报送的《安全监察简报》和《安全生产隐患排查治理情况统计表》必须在每月27日18点前(如遇双休日或国家法定休息日,应提前在25日或26日下午18:00前)以电子邮件形式或书面形式报综合管理科《安监科》科长。审核后,上报公司安监部。
4、工作质量
4.1各科室必须按本管理补充办法规定的时间,按时上报各科室总结、报表,同时应保证所报总结、报表内容真实、准确。
4.2本办法中向股份公司报送的总结和报表,由办法中规定的各工作负责人必须按规定的时间和形式上报。因其它单位或部门影响上报时间的,应提前一天向科室及中心领导汇报。
4.3负责上报总结和报表的负责人,在其它单位或部门提供的总结和报表内容和数据无误的基础上,必须对所报总结和报表中内容的真实性、准确性负责。
4.4负责汇总、整理或分析上报的负责人,发现其它单位或部门上报内容或数据有问题,直接影响上报工作的,应提前与其它单位或部门负责人沟通、联系,要求对所报内容或数据进行核对再行上报。如其它单位或部门再次上报的内容或数据仍有问题,影响总结或报表上报的,由负责汇总、整理或分析上报负责人提出考核建议,在公司营销会议上进行上报考核。
4.5 负责整理、汇总总结、报表负责人与直接上报总结、报表负责人,应主动相互核对总结、报表中内容与数据的准确性,相关的内容或相同的项目应保证内容与数据一致性,确有客观原因,影响数据的一致性和唯一性,应注明合理原因,说明清楚影响的情况。5.检查与考核
5.1未按规定时间上报总结和报表的,每类总结、报表每超一天扣责任人员1分;同时扣责任科室科长1分; 5.2因工作人员本人原因,直接影响到总结和报表按时上报的扣责任人员3分;
5.3 属于本权限范围内未发现其它单位和部门上报的总结和报表的内容或数据有问题,直接影响总结和报表按时上报的扣责任人员2分;
5.4对中心各科室及专业人员报送的内容和数据,发现有不准确的,扣责任人员2分。
5.5未按本办法第4.5条规定的,发生相同类项目的内容和数据结果不一致,不是唯一性,没有客观原因进行明确说明的,整理、汇总负责人又未积极、及时核对处理的,对整理、汇总负责人和负责直接报送总结、报表负责人各扣2分; 5.6因其它单位或部门原因,直接影响到总结和报表上报的,提出考核建议,报中心领导批准后进行考核。
第五篇:biee报表开发总结
biee报表开发总结
(一)当BI项目已经在essbase中搭建好框架之后,接着就要通过biee制作各种报表来展示BI的成果了。
BIEE报表开发能否成功的关键就在于初期的设计。首先你必须明确你的需求,你开发的报表是给哪些人使用的,他们会如何使用,比如他们一般会有些什么输入,他们希望产生什么样的输出以及他们可能会做什么样的下钻动作。一张报表往往只是给一类人使用的,你必须精心地为他们挑选合适的维度以及初始粒度。所以同样的查询内容往往需要做好几张报表适合不同维度不同方式的数据查看(用下钻的方式可以通过汇总数据查询到详细数据,但是效率不高,如果已有足够的信息可以直接查到详细数据则直接显示详细数据)。这样做可以减少每次查询使用到得维度,从而提高查询效率。一般在一张仪表盘页中只放一张报表(汇总报表除外)。
一组报表一般由一张汇总报表(给领导查看)和几张明细查阅报表组成,汇总报表中包含各种图表,初始粒度大,同时支持很深的下钻,明细报表针对某个用途提供合适的查询方式,一般不放图表。维度是由请求字段控制的,字段越多查询越慢,所以请求字段不能过多,尤其是大的维度(我遇到过成员好几千的维度,而且层次很少)不能太多,除非已经在筛选器中进行控制,最好不要直接添加时间字段,而使用全局筛选器来控制时间。相反请求提示和相应的筛选器越多查询效率就越高,所以请求提示和筛选器可以多一些(这样还可以提供便捷的访问),请求提示使用什么输入方式也是需要考虑的问题。关于使用表还是数据透视表,两者各有利弊。表因为其结构就是请求字段的结构,所以可操作性强一些,可以实现很多数据透视表无法实现的功能(仪表盘排序,条件样式等),但是数据透视表在表现能力上优于表,尤其是维度较多的情况,可以通过一些高级的操作来改善数据透视表的功能(如修改saw脚本)。
总体来说BIEE报表的设计要控制好以下3点:
1、汇总和明细分开;
2、控制各种不同的查询路径;
3、考虑查询效率。
biee报表开发总结
(二)因为我做的报表的数据源是essbase多维数据库,所以在制作报表时不需要在administration tool当中添加维度和度量。只要直接导入数据源,然后做两次拖曳就可以了。但是很不幸的是BIEE其实并没有提供对essbase很好的支持,很多功能都无法实现,或需要调整之后才能实现。
在将文件夹从物理层拖到逻辑层之后,可以看到多维数据库的逻辑结构,但是展开的时候有些让人不知所云,因为biee并不使用essbase大纲中的名称,而是根据维度层次来命名的。需要注意的是每个维度实际是从第2层(Gen2)开始的(因为essbase大纲中的实际维度也是从第2层开始算起,第0层是大纲的根,第1层是维度的根),之后的层次可以看到被标为蓝色,这类似于关系型的雪花模型。所以在将文件夹从逻辑层拖到展现层之后就可以把第0层和第1层删了。维度的每一层只有一个key,它到底是维度值还是它的别名呢?答案是别名,而且我到目前为止还没有发现显示维度值的方法(可能是BIEE不支持)。接着修改一下维度和度量的标签就可以在answer里面使用了。但是这样还是不够的,当使用到聚合的时候就会出现“发现外部聚合集”的错误,原因是BIEE在导入essbase的时候,默认将度量的聚合属性设置为外部聚合。只要将外部聚合改为正确的度量即可,注意在物理层和逻辑层都要改,另外所有度量都要指定一种聚合方式,不能为none。
biee报表开发总结
(三)在answers中的开发难点就在于设计,我在(一)中已经介绍了经验。但是显然不可能一开始就设计得十分完美,有的时候会遇到功能实现不了或者效率太低,报表根本刷不出来,这时要么修改原先的设计,要么想办法解决问题。
关于如何提高效率,首先是优化查询。在BIEE当中,有趣的一点是它首先根据你的设计生成一条SQL查询语句,然后如果判断出数据源是多维数据库,则再将SQL语句在后台转化为MDX语句去执行。转化的逻辑大致是,select子句中放查询目标集(对应于MDX中的select字句,但是没有行列之分),from字句中放cube,where字句中定义如何进行切片。所以在设计时尽量控制请求字段(对应select字句)中的维度字段,不需要的维度不要添加,尤其是大维度,而筛选器(对应where字句)则尽可能的多,这样切片可以切得小一些。另外查询的逻辑不要太复杂,不要使用嵌套查询(筛选器不要使用“根据其他请求结果”)。如果这样还不行,就只能优化数据源了,对于essbase,可以考虑将一些复杂的动态计算转为预先计算后存储(虽然这样做很可能会导致占用的空间增长好几倍...),可以大大提高效率。
在BIEE中表的样式控制要比数据透视表灵活得多,基本的样式都是可控的,所以能用表的时候就尽量用表。关于如何设置样式,由于比较繁杂而且在(一)中也介绍了一些经验,所以这里就不一一介绍了,比较重要的就是条件样式(只用表能用),可以灵活地控制显示样式,另外就是列的隐藏,可以控制哪些列在表中不显示。
BIEE的访问控制是比较灵活的,可以使用单独的链接,也可以对标题设链接,还可以对值设链接,并可以控制是否用于下钻(在列的交互控制当中设置搜索或链接)。BIEE最神奇的就是筛选器中的提示选项,选了这个选项不仅可以使用提示中的选择还可以用于链接的值传递。如果一个请求的字段的筛选器使用提示,则通过值链接被连接过来的时候,该字段就会被筛选为进行链接的那个值。另外使用提示默认是所有值,所以可以灵活的控制提示字段,比如同一个请求在不同地方使用时,需要的查询条件可能不同,这时可以通过请求提示来控制查询条件,此时就必须将所有使用到的查询条件字段加一个使用请求的筛选器。
不过在awnser中提示筛选器是不会被使用的,如果不使用筛选器就会导致查询过慢的话,建议在设计报表时先指定一个筛选值,设计完成后再将筛选器的筛选方式改为请求。对于实在无法实现的功能,最后一条路就是修改saw脚本了,但是有关BIEE的saw脚本的文档实在太少...不过通过查看saw脚本倒是可以分析出别人的报表的某些功能是怎么实现的。实施上saw脚本包含了一个请求的一切,包括显示样式和SQL查询,所以如果要备份或者拷贝一个请求,最简单的方法就是把saw脚本拷贝下来。如果你想直接修改SQL查询语句,应该先看一下SQL查询语句的各个字句存储在saw脚本中的什么位置,然后对saw脚本修改,如果直接改下面的SQL框,点了设置SQL的结果是,它产生一个最简单的SQL语句(没有任何附加内容),而且把原来你的一切设置都重新初始化(要是你之前没备份的化,赶紧退出重来吧,千万不要保存了...)
另外介绍一些经验。为了防止字段过多导致一格内无法一行显示,可以在格式化视图的附加格式中指定一个很大的宽度,然后选择单元格向左对齐。如果只想修改请求条件的化,最好不要直接双击进入,而是先打开所在的文件夹,然后在面板中选择修改条件,这样可以避免一次不必要的查询。查询如果异常中断,即使你在后台取消了请求,甚至删除会话,essbase仍然会继续执行,如果你想进入同一个请求就会报错,这时你能做的就是等待,等essbase执行完毕才能继续使用(这也是BIEE与essbase不兼容的一个表现,它导致了BIEE的不稳
定,所以要尽量避免没有筛选控制的查询)。
biee报表开发总结
(四)本文主要讲biee中answers和dashboard的开发步骤。在administrator tool搭建好框架之后,接着通
过在浏览器中操作的answers和dashboard开发最后的报表显示。
首先要做的是添加全局筛选器。对每一个维度都设定一个全局筛选器,每个层次都设定为请求。
接着开发请求。按请求在报表中的使用顺序一个一个开发请求。先选择合适的请求字段,再添加全局
筛选器,接着添加测试筛选条件(因为全局筛选器中的筛选条件都是请求,所以不会在answers中发挥作
用,所以不会和测试筛选条件冲突),然后在表中查看结果,如果要用表显示则调整字段的顺序。如果不
报错且数据无误,则返回请求条件面板,添加一些需要计算的字段(这些字段可以通过加入一个原始字段
然后用编辑公式输入计算表达式产生),设置标题和值的样式,并添加筛选器。然后在结果面板中开发需
要用到的数据透视表或图表,同样需要设置字段顺序和显示样式和一些其他小功能(比如计算和排序)。
然后在组合布局中调整布局,并调整格式化视图中的值。最后回到条件面板,在列格式中设置交互即链接
(建议不要现在做,因为链接最好链接到仪表盘,不过如果链接的内容很简单也可以这里做)。
然后开发提示。提示要考虑到所有可能的筛选,提示可以尽量多(就像筛选要尽量多),但是必须要
关联到筛选器。提示的输入方式很重要,必须要根据实际需求精心设计。提示之间有关联的要勾选约束,这样可以限制提示的内容。但是biee的约束很恶心,你不能限定某几个提示有约束,一旦勾选了约束,就
会和所有约束关联,也就是说如果其他任何一个提示被输入错误的值,它就会报错。对提示进行分组以防
止一行中提示太多。提示设计完成后一定要预览一下,看看效果如何,尤其是约束关系。这时可以将所有的测试筛选器删除了。
然后就可以再dashboard上开发了。首先建一个仪表盘,然后添加提示和请求,不同的请求放在不同的部分,但是因为部分只能垂直排列,所以如果要水平排列则必须放在同一个部分,并设置排列方式为水
平排列,排版的时候要注意,各部分的附加格式的宽度必须一致,否则会出现排版错误。最后就是甚至权限了,这个很简单,这里不介绍了。
整个开发过程当然不可能按上面的步骤一帆风顺地做下来,在开发过程中经常会遇到需求变更和一些
意外的结果,所以整个开发过程应该是一个循环迭代的过程,不断地完善,最后使得开发出
来的报表十分
好用而且能够从各方面反映这个报表应该反映的内容。