首页 > 开发 > 综合 > 正文

Business Objects 以及reporting service报表点滴--学习笔记

2024-07-21 02:45:04
字体:
来源:转载
供稿:网友
看来图片显示不出来,可从此处下载Word文档。

http://download.csdn.net/source/1902006





Ver20091111



BO
BO入门及笔记

主要包括用designer构建universe,在webi ( Web Intelligence Rich Client )中使用universe构建报表。

目前使用的版本是BusinessObjects XI 3.1 -- BusinessObjects Edge Series 。



主要与Universe相关
关于measure
在object的属性定义中有个qualification属性的设置,可以设置为 dimension , measure , detail 中的某一项。这里需要对measure提一点的是,紧跟着会有一个”choose how this measure will be PRojected when aggregated”的设置,这个设置的用途目前发现是在webi的报表中,如果对query取出来的数据再进行聚集计算,这个设置是默认的聚集计算方式。

对于measure的再认识,是可以用来且一般是用来作计算的,而不必非要去做聚集计算……

对于measure的再再认识,主要是BO中比如webi的图表中的一些字段指定要用measure类型,其它诸如dimension的还不能拖到指定measure的位置使用。其实这个分类的设计挺蹩脚的,因为有时一个列可以具有多个BO中的类别,比如像日期类型即可做维度又可作计量。…….



Measure的建议用法,(A)一般是数值类型的列或普通计算列应该设置为measure类型并且不要默认聚集函数,(B)而那种已经调用聚集计算函数得到的列默认就是measure类型但不要默认聚集函数。(C)要进一步做聚集计算可以在webi中调相应函数来做。(A)是由于webi中的图表等处必须要measure类型,(B)是防止使用隐藏列(由于BO在显示的维度少于取出的维度时会找默认聚集函数做计算),目前BO的隐藏列的做法很不正规。

这里会费点事的地方是会改Universe对object的默认设置。省事的是不必设置隐藏列,而且如果有无默认聚集计算函数的measure类型的object和有默认聚集计算函数的的object在同一个表格里时,BO也就不会做聚集计算了,从而有一定的容错性,可以防止部分列的默认聚集计算函数被误改之后还能保持报表显示正确。

原则是,尽量显式去实现计算,防止对BO工具不熟看不到一些隐式信息而看不懂报表是如何实现的或做了什么样的默认计算。

(另外,想利用measure的默认计算函数省点事的,还不太可能,比如在图表中需要显示measure列的标题时,基本还得定义一个variable以利用其名称作为标题,此时再给此variable显式定义计算方式并不多费时间。)



由于BO中一些特殊性。从本义上看,Measure是表示维度的度量特性,而一般是数值类型的列都是用于度量的,这些列从理论上来说应该设置为measure类型。在实际使用中,在Universe中把数值列拖为对象时,默认是dimension类型,虽然用于表格不出什么问题,但图表上及其它某些地方一定要求是measure类型,从而必须改默认类型。另一方面,为了避免BO在显示的维度少于取出的维度时默认做聚集计算,而不能直接显示明细行,虽然可以加隐藏列避免,但是还是把默认的聚集函数设置为无比较好,要想进一步做任何聚集计算可以在webi上调用聚集计算函数实现。















关于lov ( list of values )
看来每个(dimension和detail类型的)object都有自己默认的lov,在object的位于properties选项卡的属性页上,点击 associate a list of values 框中的edit按钮,可以从弹出的query panel右上的result objects框中的内容可以看到。也可以在这里编辑。

使用object的lov目前知道是在@prompt (不管是在Universe中定义还是在webi中定义)函数中使用,使用写代码的方式可以参考@prompt函数的定义,在webi中可以有界面编辑的方式。在webi中run query时可以在弹出的prompts界面上看到最终使用界面。



一个应用是从id与name的列表清单中根据name选择,再使用相应的id的值。这时需要:先在Universe设计中对这个id object的lov进行设置,找到lov的编辑界面,默认只在右上的result objects框中有本id object,然后拖一个name object过去(必要时还可设置下面的条件过滤),注意需要拖到id object的右边,保存并export这个Universe。然后在webi报表中对这个id object作prompt过滤即可看到。下面有两个截图可以参考。









关于cascade lov
创建与使用:在(designer编辑)Universe中,从ToolsàList of Values…àcreate cascading lists of values菜单项进去。然后把左边的一些有层次结构的object弄到右边来,最后点Generate LOVs的按钮生成。而点击完按钮也就生成好了,点击菜单项“Edit a list of values…”进入编辑界面其实很难看到已经生成的有层次结构的cascade lov,很不直观,选中编辑界面中某个曾设置过cascade lov的object,点Edit按钮,可以在弹出的query panel界面的右下部看到多了一个条件。这个编辑界面也可以从object属性的编辑lov的界面进入。使用时像普通lov那样在webi报表中对层次结构中的某object作prompt过滤,在run query时即可看到有层次结构的数据供选择。

几点说明:如果选择的有层次结构的objects中有已定义的lov的话,则这些lov会被cascade lov覆盖。然后可以在普通编辑lov的界面上再补上定义。

还要注意一点,生成cascade lov后在下层object的lov的编辑界面上能够看到在conditions中有一个条件,但是如果不做生成cascade lov而直接添加条件,是不能被当作cascade lov处理的。

如果选择的有层次结构的objects都只是id的话,没作特殊处理只能看到一些id,要显示name需要在普通编辑lov的界面上把name object拖上去。这样可以避免name的objects来作层次结构而导致可能的重名问题。

一些相关截图如下:







Lov与Prompt
在prompt小节介绍。



Lov的相关问题
如果一个object,删掉了select中的东西,默认的lov也有问题,需要重新拖拉一下。

Derived Tables
Derived Tables是自写select sql的方式,应该是最灵活的了。不过还有一些问题,比如里面不能有order by语句,不能预排序。从而对多列先排序,再取top行的效果目前没法支持。

另外,一个Derived Table还可以被另一个Derived Table使用。



在Universe中复制粘贴要注意的
注意有些不能完全复制,比如object的lov的定义就不能被复制。



对于Universe文件的复制的注意事项
由于在文件系统的Universe文件与在cms系统里的Universe数据有某种对应关系,单纯复制文件系统的Universe文件,还是对应同一个cms系统里的Universe数据。要想复制得到完全独立的另一份Universe文件,还需要用designer打开Universe并在FileàParameters界面上改Name属性,而且最好与文件名同名。

另外,复制不等于备份,简单复制到另一台机器是用不了的,见后面备份的说明。



Universe中的object定义parse出错也可能照常使用
universe中的object的定义,如果使用parse校验正确性出错,但使用也可能没问题。不过要注意定义这个object一定不要出错,比如类型要设置正确,不然会在运行时报错难以明白。











与Universe和webi都很相关
Webi如何使用Universe
必须把Universe在designer中进行Export的动作,放到CMS中,webi才能使用。

@variable与@prompt
可以使用 @variable(‘Name1’)来引用@Prompt(‘Name1’,……)中的输入值。这样可以避免重复使用完全相同的Prompt。这与在Universe或webi的位置没有关系,也没有先后顺序,即不要求先有@Prompt再有@Variable。另外,调用方式完全相同的prompt会在webi中被当作一个prompt处理。

但是,在universe中使用optional Prompt的variable会有问题,不通过。

另外,在webi中取@Prompt的数据还可以用UserResponse的函数。



关于Prompt
Universe与webi中的prompt有区别,一个是universe中的不能为optional,另一个是webi中的不能用纯文本实现(除非是用custom sql)。



调用@Prompt时的一些参数说明:

关于参数lov,如果使用'ClassName1/ObjectName1',则是使用'ClassName1/ObjectName1'在Universe中定义的lov。当写sql语句对某列进行过滤时,对@Prompt函数的lov参数传递本身列对应的object是一点问题没有,而且一般都是这样做,比如在webi中。



级联参数或级联Prompt,可以在定义lov的时候使用另一个带Prompt的derived table或使用普通table但是带where条件且其中使用了Prompt,从而达到级联效果。但是一点缺陷是只能传回一个值,深层次的那些prompt的值传不回来。



Prompt使用依赖性的或级联性的Prompt来缩小可用值清单的范围的例子。其思路是在一个Prompt中作为lov的object会关联到其他prompt。

比如对于例子club数据库,

追加定义两个derived table,以及相应的class。(给region_id和city_id对应的objects的lov加上name)。

DTCountryRegion :

select region_id, region from Region

where Region.country_id=@Prompt('countryid','N', 'Country/Country Id',Mono, )



DTRegionCity:(这里的object是引用的上一个derived table对应的class中的object)

select city_id, city from City

where region_id=@Prompt('regionid','N', 'DTCountryRegion/Region Id',Mono, )

再定义一个过滤器cascade prompt city filter,(这里的object是引用的上一个derived table对应的class中的object),另外注意City.city_id是直接引用City表的city_id列,从而可以达到一定的可重用性。

City.city_id In @Prompt('select city','N', 'DTRegionCity/City Id',Multi, ,)



然后就是在webi中使用了,如下图。





Prompt可以使用id而显示name,只需要设置lov,参考lov和cascade lov的说明。











ambiguous query
有时在webi的从edit query中打开的sql viewer中的customer sql中能够看到多个sql,即在synchronization字样的根节点下有几个select节点,一般设置好context中的join可以解决。

另外,如果在customer sql中看到sql不对的,比如join了过多的table,也一般设置好context中的join可以解决。



还有,看到synchronization下有多个select节点的问题,不一定是由于join或context导致的,不小心把object引用的column写成其他不相关的表也有可能出现这种情况(如下图),所以有必要仔细检查及比对一下每个问题sql语句。





在universe中对象名称自动同步到webi报表
在universe中改一个对象的名称,似乎webi能自动同步修改完全。

但似乎在universe中改了名,虽然能够在webi中自动刷新,也许要多刷新几次。



Prompt输入在webi的显示顺序
输入参数的显示顺序在webi的query panel中可以调整,但不太好用。没出现的可以把用到prompt的条件删掉重新加。但在universe里的没法弄,似乎默认在最前。





主要与webi相关


Drill down的再试验……





报表中有多表格时设置它们的间距
BO中表格与表格之间保持距离是靠设置 relative position。



文本框的下划线
拖出文本框(Blank Cell)时看到的下划线是border的下边。



不分页能看到处理report中的所有表格或图表
按钮 switch page/quick display 能切换到显示大于一页的高度的情况。





给数字做custom的format的入门
在custom数字的format时,给出几个文本框,如positive、negative,equal to zero,用法是每个文本框中都需要一个完整的format串。



取日期部分的函数
Bo的webi中不能直接取时间的datepart,但是可以用其他方式得到,=ToDate(FormatDate([A DateTime Object];"dd/MM/yyyy");"dd/MM/yyyy")



关于distinct
除了完全自定义sql语句,在webi中有两处地方设置。

一处在webi的edit query界面的properties选项卡中,是一个复选框属性”retrieve duplicate rows”来控制。

一处是在webi的table block的属性中有个复选框属性”avoid duplicate row aggregation”,是用于去除重复行的,默认没勾选,做了distinct的动作。注意一般需要勾选,防止distinct。



Top与rank
top可以用rank弄出来,效果看来更好.因为top 只是强行过滤,而当排名值有多条记录相同时rank会把这些都取出来。

但(sql server 2005 的)Transact-SQL中也有rank函数。



Union all
在webi,似乎没法达到union all的效果。





Hyperlink
webi中的hyperlink中引用的webi如果有重名会有问题。

关于webi中的hyperlink中的参数传递,看来直接用 URLEncode(UserResponse("..")) 好使,虽然不符合lsM的规定格式,另外对于optional的单值和多值参数也好使。另外不传参数看来也相当于optional。

传数字参数时注意可能默认方式转为字符串会有逗号,传过去出错,需要格式化将其去掉。



在图表中做hyperlink链接到其他报表目前不行或不知如何实现。



但是就算是能链接到其他报表,也是采用的url的方式而不是比较直接的方式。由于BO的InfoView有两种页面,jsp和aspx,同时支持挺费劲的,但是也找到了方法。

例如下面代码:

= "<a href=/"javascript:var path='/OpenDocument/opendoc/openDocument.jsp';if(document.location.pathname.indexOf('.aspx')>0) path='/OpenDocument/opendoc/openDocument.aspx'; open(path+'?sDocName=Location+Availability+Detail&sType=wid&lsSBegin+Date:=" + URLEncode(""+UserResponse("Begin Date:")) + "&lsSEnd+Date:=" + URLEncode(""+UserResponse("End Date:")) + "&lsSLocation:=" + URLEncode([Location]) + "&lsSIP:=" + URLEncode([IP]) + "','_parent');/" title=/"/" target=/"_self/" nav=/"web/">"+FormatNumber([Availability - Location Availability];"#,#0.00")+"</a>"



隐藏列的做法
Webi中没有属性来设置是否隐藏列,只能采用一些非正规方式。

隐藏列用alert方式来做似乎也很好使,本质上是把这一列的显示内容给变掉了,可以变成hyperlink的显示,从而对这一列的原值进行操作没有问题。另外,隐藏列也可以把某一列的内容隐藏,把这一列的右(左)border 去掉,把右(左)边的列的左(右)border去掉,从而看起来两列成一列而达到隐藏效果。



隐藏格子内容的做法
目前只能使用非正常方式,设置格子的Horizontal padding=2000px。



关于重复行
图表或表格有一个属性,叫做 avoid duplicate row aggregation ,在不同的状态下会有不同的情况。

其一个作用如图:



其中,数据表如图:

在Universe中的主要定义如下图,





在使用聚集函数时,有时也会遇到重复行的问题,如图: ,其中,表格的“avoid duplicate row aggregation”属性为选中状态。而Variable“avg to Val-none exp in”= Average([Val - none]/[Val2 - none]) In ([Id]) 。如果不勾选“avoid duplicate row aggregation”又会出错。

为什么呢,原来是Variable中的聚集计算函数的参数使用了表达式的问题,单纯的聚集计算是不会出错的。如图所示, ,其中“avg to Val-none in id” =Average([Val - none]) In ([Id])。

就算再简单的表达式,如“avg to Val-none exp const” =Average([Val - none]/1),也会出错,如图, 。

这时,解决的方式有一种,就是把表达式计算搬到Universe的object定义上。



Webi中选中一列却没法排序或rank的问题
目前发现的原因是这一列直接使用了表达式,如果定义一个Variable,把表达式放在Variable里,在列上使用Variable,则又能排序或rank了。



Break概念
BO中的break对应分组功能。

做break要在表格(目前已知的是垂直表格)的格子中选中某个object,再在toolbar上找到相应按钮点击进行设置或反设置。设置之后,点中这个格子,会在属性页上多一些关于break的属性设置。Break有footer和header对应上下分组行。

其他报表产品(如Reporting Service)可以折叠分组行下的明细行,但webi的报表还不能在当前版本做折叠。



但是,webi中不用break看来也可以做n层分组计算。这可以通过显式调用一些聚集函数,也可以使用measure并使用其默认的聚集计算方式。



注意webi中有break时的排序是只能在break内排序,而无法拉通排序。比如,对两个列作groupby后进行聚集计算,对计算值排序,在reporting service中可以做到拉通排序,而BO只能做到在第一层内部排序。…………….



一些使用break达到的一些显示效果
Webi中要想达到如下图的效果,即被分组列在明细行上不显示,目前只能是把被break的列在明细行的内容隐藏,且使用非正常方式,即设置其Horizontal padding=2000px,从而也就达到效果了。







Break上有个remove duplicate values的选项能够控制break对应列是否在较明细行上显示重复值,效果是是否有中空。如图:

不显示时的效果。

显示时的效果。











一些比较奇怪的问题
custom sql少东西
有时在webi的从edit query中打开的sql viewer中取得的custom sql少东西,估计是由于上次输入设置的一些optional的参数值导致的或别的问题。这时重新生成几下custom sql就好了。



改数据库的schema后运行webi报不正确错误信息
更改数据库的schema后,相应改了universe后,运行webi出错。报错信息中一方面universe的名字不对,一方面报数据库表格中view使用的一个表不对,后来发现原因是数据库中view的问题,引用的表格还是旧的名字,更新之后错误就消失了。







Webi中改universe引用的一些问题
把一个Universe

要想在Webi中切换universe,不能直接更换Universe的内容,比如把以前的Universe文件删掉,再把另一个Universe通过复制的注意事项后产生出一个独立的同名的Universe文件,(或者说覆盖所引用的Universe文件),然而,这样做很有问题,一般情况下报表就出错了。

用Import和Export的方式是很正确的方式,但这一般只适用版本升级。

一个可行的方式是使用webi中切换Universe的功能切换到另一个Universe上去,这是在query panel中的属性页上做的,这样至少报表不会出错。另外,在切换时会出现一些奇怪问题,比如切换完了,发现引用的Universe的名称没变。这似乎webi有bug,不能及时刷新universe的名称,保存关掉后再打开发现已经改掉了。一次不行,再试一次。另外,有时还出现无论如何切换不到某个Universe上去,这时只有先把那个Universe通过复制的注意事项弄出一份独立的Universe出来,先切换到那个备份上,以后再切换回去。

还有,就算webi中切换了Universe,也还在某些地方残留以前Universe的痕迹。比如在Import webi报表和相关的Universe到*.biar时,还得必须把以前残留的Universe导出。另外某些报错信息也会提到以前的Universe,虽然实际上很可能与之无关。





换完licence出错
换完licence登录不进系统或运行已打开的designer或webi出错。主要是由于先删除以前的licence再添加,这样导致许多server都被disabled了。解决问题是登录进入central management console,到server的清单把它们都设置为enabled。必要时可以改日期再解决。



登录不进CMS
没有搞定,只能重装,有时还得删注册表。



Hyperlink相关
有时候在单元格直接用hyperlink与在alert中用hyperlink但在格子中用直接的object的效果差别很大,比如直接用hyperlink会出一些空行,类似作了外连接的效果。



Universe保存时很慢
如果数据库的服务或服务器关了,会使Universe保存时极慢。







其它
备份的方式特别,Import与Export
只能通过import成 *.biar文件才能自如保存,单纯copy备份的方式在另一个CMS上(一般也是另一台机器上)就打不开文件了。



而要import,先要export。即先要把designer中的Universe和webi中的报表export(相当于保存)到CMS中,才可能从CMS中import出来到普通文件系统上。



另外,如果要看BO自带的例子,可以在designer中Export出例子Universe,在webi中Export出例子报表,然后打开文件。



功能项调用
很多功能不会从菜单或右键菜单出来,这时需要多看看工具栏以及属性页等,即多动手点点。





未整理


交叉表的过滤
交叉表可以设置过滤,只显示部分列或行,但这必须在工具栏上的过滤按钮对应的界面设置,而且在普通的属性页上没法看到。



有关过滤
在工具栏上还有另一个过滤的按钮,“Show / Hide Filter Pane ”,在那里可以对图表的数据做某种过滤





BO的webi中图表的legend的title的隐藏
没办法用常规方式,只能变白,字体最小





BO的webi中图表的X轴上的内容没有按比例


BO的图表显示数据,目前发现在X轴上显示的不是按照比例显示,而似乎把有内容的等间距显示,比较奇特。









SSRS
Sql Server Reporting Service

入门点
(环境是Sql Server 2005 上的Reporting Service )

报表基本构成
一个.rdl文件和一个可共用的.rds文件。.rds文件简单负责数据库连接。.rdl文件是一个报表的最主要部分。.rdl文件又主要分两部分,数据部分和显示部分。

在数据部分添加一个最简单的dataset,在显示部分添加一个最简单的table控件。执行一下dataset的sql语句,可以自动取得所有列。把dataset的一些列拖到表格控件中间行的格子中,便可得到一张通常意义上的报表。点击“Preview”便可预览了。



页眉和页脚
默认是不出现的,需要点击菜单“Report”,在下拉菜单中可以看到“Page Header”和“Page Footer”,点击即可。



表格控件基本及其分组
表格控件拖到报表上,默认显示3行,代表3种不同类型。中间是明细行(Table Details),上面是表头(Table Header),下面是表尾(Table Footer)。要控制表头或表尾的显示,先在layout界面上点中表格里的任意一处位置,此时会在表格的右方和上方显示一些东西。在右方显示的东西上点击右键,在右键菜单中可以看到Table Details ,Table Header ,Table Footer 等的菜单项,这可以控制相应东西的显示。

还是这个右键菜单,可以看到与分组相关的菜单项,如“Insert Group”,“Edit Group”等,点击可以设置相应的分组信息。

需要说明一下的是,分组行与明细行与表格行,在属性页上是看不出来是什么类型的行的,只有看前面提到的表格右方显示的图标,这些图标间有区别,才看得出来。



参数
参数往往可以在给出一点点定义后由Visual Studio的IDE环境自动生成,不过也有一些高级应用情况需要手工添加的。

这里有两种不同位置的参数,一种是在dataset的sql语句上,一种是在报表上。

前一种的定义形式是 @参数名 ,例如select * from table1 where id = @id , 除了在dataset的sql语句上看到,还可以在dataset的一堆属性页中的Parameters属性页上可以看到。当写好前面的sql语句并运行后,IDE会自动生成两种类型的参数。

后一种在点击菜单项“Report->Report Parameters”后而弹出的界面上可以看到及维护。

在报表上的参数负责从界面上得到输入值,在dataset的sql语句上的参数影响实际执行的sql查询语句的参数值。既然参数分了两层,中间可以存在一个表达式转换,从而两层的参数不必一一对应。

另外,报表上参数也不一定全部在运行界面上的输入部分显示,因为还有Hidden以及Internal属性来控制。从而又加入了一些灵活性。比如可以设置参数为Internal且默认值为另一个dataset中的列值,从而得到一个中间参数。





使用超链接连接或引用其他报表
比如对于表格中的格子,右键菜单中点Properties项,在弹出的对话框界面中选中Navigation页,在Hyperlink action中设置即可,比如可以设置为Jump to report,再设置相应报表路径及参数。跨project的报表也可以引用,估计路径是与发布位置有关。

如果是图表,则是在数据列的属性页中的Action属性页界面设置。



折叠或隐藏功能
可以折叠或隐藏表格中的行(如分组后的明细行)以及整个表格,推广说可以折叠或隐藏控件里的部分以及整个控件。如下图,

, , 。

其设置地方在于每个大大小小的控件一般都有一个Visibility的组合属性,包括两个具体属性Hidden和ToggleItem。ToggleItem的值是一个控件名称,作用是用另外一个控件来控制本控件所代表显示的部分的可见性,即折叠效果。而Hidden则是控制初始显示时的可见性,由于可使用表达式的原因,可以设置一个输入参数在输入时控制。

具体设置参考下图:(效果可见前面的图)



表达式的强大
SSRS的一个强大之处是几乎所有属性值的位置都可以使用表达式。从而可以实现很多特效。

比如,

用参数控制折叠隐藏的初始效果。

使表格中的单双行的背景色不同。可以对明细行的背景色属性设置表达式,如 the value of the Propery BackgroundColor = iif(RowNumber(Nothing) Mod 2, "White", "LightGrey") 。

以及dataset的sql语句也可以使用拼接的方式,从而可以实现很多参数化效果,比如根据参数动态排序,或者选择性显示某些列等。

扩展一点是根据表格中某个单元格的值的不同而把整个行(或部分格子)设置颜色,以达到分类或提醒的作用。



参数输入值范围控制及依赖关系
可以给一个输入参数提供一个下拉列表,其列表值集合可以控制。并且可以达到在列表显示名称而实际输入ID的效果。

列表值集合是由另外一个dataset给定,其实主要就是一条select语句。定义好dataset后,在参数设置的地方“Report->Report Parameters”就可设置,设置Available values的地方即可。

简单情况下,这条select语句不带任何参数或变量。而如果其使用了别的参数,则形成了参数依赖关系,这时可以达到的效果是让这个输入参数的可选值的范围随着其他相关参数的输入值变化而变化。当然,现在sql语句不能直接写,而需要用字符串拼接的方式了。

杂项










在表格的明细行对某列作一个分组后(比如把有时间的列按照日期来分组),其他列上显示的看来是默认取了First的值。









一些问题
实际执行的sql语句中的参数类型问题
SSRS报表在取数据时,会执行exec sp_executesql形式的sql语句(至少用profiler抓到的sql语句是这样),这sql语句存在问题,它经常会把原来的任何类型的参数改为使用nvarchar(n)的类型,而且n恰好是该参数在字符串形式时的长度,如果想基于此sql语句改改参数值进行查询,而输入了一个长度比上次的参数值长的参数值,往往会报错,比如日期转换出错,就算没报错结果也是错的,这时需要手工把n改得足够大。



图表不能很好解决维度中的重复值问题
如图,id这个维度上有重复值,但图表上只给显示其所对应的一行记录。











SSRS vs BO




SSRS可支持的组间排序的实例
如下图,设计时



运行时



说明,这是在报表上再次对两列分组,并进行Count的聚集计算,再拿count值来排序,这是组间数据的排序。而BO目前使用break只能支持组内(即内层break的数据)的排序,即某一组内的多行数据根据分组列以外的列来排序,据说最新补丁可以支持到上面截图的效果。



Some Problem
在reporting service的图表中,如果遇有维度值都相同的行,则会简单显示出来,而BO的webi报表中的图表一般会作某种聚集计算(因为传过去的一般都是measure)再显示。







Tmp problem






用hyperlink传空值,那边接收到的值很奇怪





Javascript:var%20path='/OpenDocument/opendoc/openDocument.jsp';if(document.location.pathname.indexOf('.aspx')>0)%20path='/OpenDocument/opendoc/openDocument.aspx';%20open(path+'?sDocName=Availability_Detail+t1&sType=wid&lsSBegin+Date:=5/5/2009+12:00:00+AM&lsSEnd+Date:=9/4/2009+12:00:00+AM&lsSSAP+System:=R3E&lsSServer:=','_parent');









本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/infinite/archive/2009/12/21/5049607.aspx
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表