




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ibm cognos bi 最佳实践: 报表设计高级提示和提示性能调优1 简介1.1 目的本文档旨在向报表创建者展示如何处理第一个提示页面性能低下的问题。1.2 适用范围这里的信息只适用于 ibm cognos 8.2 bi。2 第一个提示页面的性能当用户运行包含多个复杂查询的报表时,常常需要等待很长时间才会看到第一个提示页面出现。例如,在一个客户场景中,报表用了 40 秒才显示出第一个提示页面。可以通过两方面的努力改进第一个提示页面的性能:1) 减少提示调节(prompt reconciliation)的时间 2) 减少为提示控件获取数据的时间 3 提示调节3.1 什么是提示调节?提示调节确
2、保参数定义与参数的用法匹配。在筛选和计算中定义参数。在提示中使用定义好的参数。参数定义包含几个关键项: 基数 可以提供给参数的输入值的数量。 离散性 决定输入值是定义单一值,还是定义一个值范围。 可选性 决定参数在筛选或计算的上下文中是必需的,还是可选的。 数据类型 为了与引用的其他数据项或常量匹配,在筛选或计算的上下文中期望的数据类型。数据类型可以是 numeric、date、time、date time、interval、string 或 member unique name (mun) 。 3.1.1 筛选表达式请考虑可选的筛选: order number = ?pordernumber
3、? 通过分析这个筛选,可以判断出参数 pordernumber 的一些性质:基数:单一值 等号表明只能使用单一值。 使用多个值需要适当的操作符,比如“in”: order number in ?pordernumber?离散性:简单值 等号表明了这一点。 值的范围需要适当的操作符,比如“in_range”: order number in_range ?pordernumber?o 如果一个参数在多个上下文中使用,那么对于是范围值的参数,所有引用都必须是范围值。 可选性:可选的 这个筛选定义为可选的,所以参数也是可选的。 参数也可以是必需的。如果一个参数在多个上下文中使用,那么对于可选的参数,
4、所有引用都必须是可选的。 数据类型:numeric 这个参数是数字,因为 order number 数据项是数字。 现在,把参数的特性应用于引用它的提示。这意味着,提示控件会体现参数的一部分特性,从而让提示控件与参数定义保持兼容。如果在创建的提示页面中引用参数,会在运行时修改提示定义,以便与参数的基数、可选性和离散性匹配。数据类型不匹配可能会导致运行时错误。如果没有创建的提示页面,那么这些特性应用于生成的提示页面上的提示。3.1.2 数据项表达式与通过宏表达式定义的参数不同,在数据项表达式中使用的参数是必需的。3.1.3 宏表达式在宏表达式中定义的参数 1 可以是可选的或必需的,可以是单一值或
5、多值。请考虑宏表达式: #prompt ( pordernumber , integer )# 基数:单一值 prompt() 宏函数只接受单一输入值。 可以用 prompt() 定义多个值: #promptmany ( pordernumber , integer )#离散性:简单值 提示宏总是简单值,而不是范围。 可选性:必需的 没有默认值(这个宏函数的第三个可选参数)表明了这一点。 包含可选参数的示例如下: #prompt ( pordernumber , integer , 5 )#3.2 提示调节如何影响性能?为了执行提示调节,ibm cognos 8 要检查查询,判断有哪些参数及其
6、特性。查询越大、越复杂,这个过程花费的时间越长。在 ibm cognos 8.1 中,一个包含 200 多个查询的客户报表需要超过 40 秒才能显示出第一个提示页面。大多数时间花费在提示调节方面。3.3 在 cognos 8.2 中如何改进提示调节?在 ibm cognos 8.2 中通过三种方式改进提示调节: 更快的提示调节 用于提示调节调优的报表服务器属性 用于提示调节调优的查询属性 3.4 ibm cognos 8.2 中更快的提示调节首先,在 ibm cognos 8.2 中提示调节过程已经得到优化,大大提高了速度。与 ibm cognos 8.1 相比,这个过程花费的时间减少了 75
7、% 到 90%。例如,在 ibm cognos 8.2 中客户示例报表的提示调节只花费了 5 秒,与 ibm cognos 8.1 中的 40 多秒相比降低了 80%。只需迁移到 ibm cognos 8.2,就实现了 80% 的性能改进。不需要采取其他措施。3.5 用于提示调节调优的报表服务器属性ibm cognos 8.2 为整个系统和具体报表的提示调节调优提供了三个相互关联的选项。第一个选项是一个针对整个报表服务器启用的报表服务器高级属性:rsvp.prompt.reconciliation。这个属性有几个值:complete - 在显示第一个提示页面之前,调节所有查询。这是默认设置,用
8、来确保与以前版本的兼容性。chunked 分批调节所有查询,直到调节了第一个提示页面所需的参数为止。以不固定的次序处理查询。可以用高级服务器属性 rsvp.prompt.reconciliation.chunksize 修改 chunk 大小。默认的 chunk 大小是 5 个查询。grouped 按组调节查询,直到调节了第一个提示页面所需的参数为止。这些组如下: 筛选的报表查询 筛选的提示查询 未筛选的报表查询 未筛选的提示查询 按这些组的次序处理查询,直到调节了第一个提示页面中引用的所有参数为止。常常只需处理第一个或前两个组。但是,在某些情况下,需要处理所有查询。例如,如果在提示查询中的计
9、算查询项中引用参数,就会发生这种情况。报表服务器调节第一个提示页面的参数之后,向用户显示这个页面。如果后续提示页面引用在已经处理的查询中没有的参数,在显示这些提示页面之前,报表服务器可能需要调节更多查询。chunked grouped 分批调节查询组中的查询,直到调节了第一个提示页面所需的参数为止。我们的客户场景只包含一个筛选的查询,但是假设报表中的所有 200 个查询都使用相同的参数进行筛选。grouped 会同时调节这 200 个查询,因为所有查询都属于筛选的报表查询组。chunked 每次调节 x 个查询,x 是 chunked 大小(默认值为 5)。因此对于 chunked group
10、ed,将调节 5 个查询。如果找到了第一个提示页面所需的参数,就显示页面。如果没有找到,就处理后 5 个查询,直到找到参数为止。以我们的客户报表为例,设置 rsvp.prompt.reconciliation = grouped 会迫使提示调节首先处理包含筛选的查询(我们只有一个这样的查询)。这导致客户示例报表的提示调节在 ibm cognos 8.2 中只需花费不到 1 秒,与 ibm cognos 8.1 中的 40 多秒相比性能提高了 98%。只需设置一个高级服务器属性,就实现了 98% 的性能改进。不需要采取其他措施。坦白地说,这个示例不太典型,因为筛选的查询和非筛选的查询的比例高于一
11、般水平。但是,这个示例说明 grouped 调节选项的优点是只需要处理所有查询中的一部分。关于如何处理大量的筛选查询,请参见“用于提示调节调优的查询属性”。3.5.1 最佳默认设置是什么?如果使用 complete 之外的其他设置,可能会导致运行时错误,因为相同的参数可能在同一报表中以不同方式定义两次或更多次。假设报表中有一个可选的筛选(比如 x in ?p1?)和一个计算 y + ?p1? 。筛选把 p1 定义为可选的和多值的。计算把 p1 定义为必需的和单值的。如果使用 complete 查询调节,就会处理所有查询,而且使用限制性最强的定义修改提示,这会产生必需的单值提示。如果使用 gro
12、uped,就只处理筛选的查询,这允许使用可选的多值提示。如果用户跳过这个提示或者选择多个值,那么当处理计算时就会产生运行时错误。说到这里要补充一点,在使用高级调节属性时,正确使用参数并解决这些不匹配的参数定义应该是创建者的责任。在使用 chunked grouped 时,还可能有两个或更多筛选以不同方式定义同一个参数。同样,这也是在创建报表时计划和实现不完善的表现。出于性能考虑,chunked grouped 是推荐的设置,因为它允许只处理部分查询组。但是,应该进行适当的报表测试,以确保不会出现由于报表创建者使用参数的方式不一致所导致的运行时错误。默认的 chunk 大小 5 对于大多数情况已
13、足够。3.6 用于提示调节调优的查询属性对于某些报表,仅仅设置高级报表服务器属性可能无法实现良好的性能,还需要手动调优。报表创建者可以使用新的 report studio 查询属性 use for parameter info 决定提示调节的执行方式。这个新属性只能在高级报表服务器属性 rsvp.prompt.reconciliation 设置为 grouped 或 chunked grouped 时使用。这个属性实际上创建一个新的查询处理组,系统在处理筛选的报表查询之前处理这个组。新的处理次序是: use for parameter info = true 查询 筛选的报表查询 筛选的提示查
14、询 未筛选的报表查询 未筛选的提示查询 如果在第一个组中找到了所需的参数,就不再处理其他查询。这个属性在两个场景中很有用。3.6.1 在多个查询筛选中使用相同的参数仍然以包含 200 个查询的示例报表为例,假设所有 200 个查询中的筛选都引用相同的参数。以前必须处理所有 200 个查询来调节参数。实际上,只需处理其中任意一个查询,就可以收集到所需的信息。报表创建者可以选择任何查询,并设置查询属性 use for parameter info = true。系统只处理这个查询,就会找到所需的参数并显示第一个提示页面,不必处理其他查询。3.6.2 在每个查询筛选中使用不同的参数现在,考虑一个完全
15、不一样(有点儿不真实)的用例。我们有 200 个查询,每个查询都引用一个不同的参数,在第一个提示页面中引用所有 200 个参数。在这种情况下,必须处理所有查询,这会导致性能降低(回到 5 秒水平)。有一个非常聪明的办法:创建者可以创建一个定义所有 200 个参数的查询。不创建任何引用这个新查询的布局(即,没有列表、交叉表或图表使用这个查询)。只在这个查询上设置查询属性 use for parameter info = true。现在,在运行报表时,只处理这一个查询。因为在布局中不引用这个查询,它不会实际执行。这样就解决了第一个提示页面的性能问题,而且不会有额外的开销。包含 200 个查询而且每
16、个查询使用不同的参数这样的示例有点儿极端,但是如果处理给定的查询或查询集造成了性能问题,就可以考虑使用这种方法。估计只有非常少的报表需要使用 use for parameter info 查询属性,因为 ibm cognos 8.2 本身和使用 rsvp.prompt.reconciliation grouped 产生的性能改进能够解决大多数性能问题。3.6.3 提供不利提示要确保您选择的查询提供所需的所有参数。如果在没有定义所有参数的查询集上设置 use for parameter info 查询提示(hint),会对性能产生消极影响,因为第一个请求没有调节所有参数,还需要通过另一个请求获得
17、其他参数的参数特性。3.7 sap 考虑事项在有非层次化数据源变量的 sap 环境中,变量数量大而且这些变量具有许多可能的值,这会显著影响性能。建议不要在这些环境中使用高级服务器属性,但是可以使用 use for parameter info 查询提示改进性能。4 提示查询性能提示查询用于填充提示控件。在运行完提示查询之前,无法显示提示页面。在默认情况下,这些查询在每次向用户显示提示页面时运行一次。在改进提示查询性能时,要关注三个方面:查询的数量 避免重复运行提示查询 并行地运行提示查询 4.1 查询的数量查询数量越大,处理提示页面花费的时间越长。尽管下面讨论的机制可以减少所需的时间,但是有时
18、候第一个提示页面包含的提示查询太多,必须处理它们才能显示提示页面。可以把提示分割为两个或更多页面。这样每个提示页面包含的查询就比较少了。可以使用选项卡式的提示页面。系统只运行实际向用户显示的提示控件所需的查询,不运行不活跃的选项卡的提示查询。附录 a 讲解如何创建选项卡式提示界面。可以使用隐藏在条件块中的提示,这些提示只在用户已经响应了一些提示并重新提示报表时显示。同样,因为系统只运行实际向用户显示的提示控件所需的查询,不运行隐藏块中的提示查询。4.2 适当的提示控件一些提示控件不适合容纳大量数据。例如,包含 100,000 个条目的值提示(选择列表)性能会很差,而且使用很不方便。对于这么大量
19、的数据,更合适的控件是 select & search 提示、cascading 提示或 tree 提示,因为它们在最初显示时并不装载整个数据集。注意,如果创建者非要使用包含大量数据的提示,那么在默认情况下数据会在 5000 行处截断,而且系统并不给出警告。可以使用提示控件的 rows per page 属性显示更大的数据集。4.3 缓存提示查询在 ibm cognos 8.1 中,可以缓存提示查询。如果提示中的值不经常变动(比如每天一次而不是随时),而且提示并不依靠另一个提示的值筛选提示查询,就可以使用这种技术。例如,可以缓存父级联提示的值,但是不能缓存子(或孙)提示,因为这些后续提示依靠父
20、提示的值执行查询。使用作业执行提示查询并缓存报表的值。用适当的调度计划(比如每天或每周)创建作业,从而反映提示值的变动频率。在作业中添加需要刷新提示查询的报表之后,把 default run 选项设置为 run the report to refresh the report cache(也可以为每个报表步骤设置这个选项)。当作业运行时,它只执行提示查询并把结果缓存在 content store 中。如果在多个位置有提示,那么在作业步骤中设置这些位置,就会缓存所有位置的提示值。当用户运行报表时,获取缓存的查询值;这一般会提高性能。注意,无论是否考虑性能因素,这也是减少对数据库的查询数量的好方法
21、,因为在用户每次请求运行报表时不再需要执行提示查询了。4.4 并行地运行提示查询如果提示值是高度动态的,缓存不是合适的选项,那么可以同时执行多个提示查询。在默认情况下,单一报表中的所有查询一个接一个地运行。可以同时运行提示查询或数据查询。报表服务器使用 helper 的概念管理可以在报表服务器中同时执行的查询数量。例如,把 helper 的数量设置为 10 就意味着整个报表服务器实例可以同时执行另外 10 个查询。报表服务器高级属性 rsvp.concurrentquery.numhelpersperprocess 用于设置服务器中可用的 helper 数量。默认值是零。如果不设置这个属性,就
22、无法同时运行查询。还必须使用报表服务器高级属性 rsvp.concurrentquery.maxnumhelpersperreport 配置每个报表可以使用的 helper 数量。默认值是 1,即只允许每个报表每次执行一个查询;必须把它至少设置为 2,才能允许运行并行查询。设置这两个选项之后,在默认情况下只对批执行运行并行查询。这是因为在交互式执行时,这可能会导致运行查询,但是用户根本不看它的结果,因此不必要地消耗了资源。假设一个报表有两个页面,每个页面有一个列表。用户运行这个报表;启用并行查询,让这两个列表查询同时运行。用户看了第一个页面 / 列表,然后关闭浏览器。第二个查询已经并行地运行了
23、,但是未被使用,这浪费了资源。稍后讨论如何更好地处理这种情况。要想为交互式执行启用并行查询,需要把报表服务器高级属性 rsvp.concurrentquery.enabledforinteractiveoutput 设置为 true。在给定的报表中,还必须使用查询属性 execution method 决定哪些查询可以并行地运行:图 1.查询属性 execution method在提示查询上设置这个属性允许它们并行地运行,这常常会提高性能。5 结束语ibm cognos 8.2 显著改进了第一个提示页面的基本性能,即使不进行定制配置,性能也很好。还可以通过以下措施进一步提高提示性能: 提示调节
24、 明智的提示页面设计 提示查询缓存 并行的查询执行 为了进一步提高提示性能,建议在所有 ibm cognos 8.2 服务器上设置 rsvp.prompt.reconciliation chunked grouped(还应该进行适当的报表测试)。6 附录 a 选项卡式提示页面注意:这份资料最初是一份单独的 proven practices 文档。这里的内容与原文档中相同。6.1 更快的选项卡式提示页面这里的场景是,客户希望向最终用户提供报表,在提示页面中使用选项卡式用户界面而不是一系列提示页面。最常用的提示出现在第一个选项卡中,其他选项卡显示不太常用的提示。图 2.选项卡式提示页面我们见过的一
25、些应用程序示例有多达 60 个提示,它们分布在 6 到 8 个选项卡上。有两个问题会影响这些报表的性能。首先,提示数量大意味着 cognos 8 在运行报表之前必须分析许多查询。一般情况下,这意味着每个提示有一个查询,还要加上报表查询本身。这个问题只能通过减少报表中使用的查询数量来解决,这超出了本文的范围。第二,原来使用的 html/javascript 技术的性质决定了它们的性能非常差。生成选项卡的标准 html/javascript 技术允许用户在不访问服务器的情况下切换选项卡。这意味着必须在显示第一个选项卡之前 填充所有提示(多达 60 个)。因为在默认情况下查询是串行运行的,需要的提示
26、查询越多,用户等待的时间就越长。6.2 解决方案概述这个解决方案使用条件块显示提示。选项卡本身仍然是用 html 和 javascript 创建的。使用条件块的优点是,系统知道隐藏的块中的提示是不可见的,因此不运行填充它们所需的查询。如果用户切换选项卡,提示变得可见并运行相关联的查询。缺点是切换选项卡需要向服务器发出请求。实现这种技术的提示页面使用条件块决定显示哪些提示。请想像一系列重叠的矩形,在任何时候只显示其中的一个。图 3.条件块显示提示这些块在任何时候只有其中的一个是可见的,但是所有选项卡都是一直可见的。当前选项卡的边框和文本颜色设置为黑色,让它看起来像在其他选项卡前面。非当前的选项卡
27、是灰色的,让它们不太突出。图 4.选定选项卡从某种程度上来说,编写报表相当简单。我们将创建一个条件块以及与选项卡数量相同的块 在以上示例中是 4 个。然后,以表格单元格的形式创建基本选项卡结构(矩形),根据需要设置边框。用 html 和一些简单的 javascript 创建选项卡中显示的文本。当用户单击选项卡(实际上是单击选项卡中的文本)时,显示相关联的条件块,修改选项卡边框和文本颜色,显示相关联的块。在后台,通过设置一个参数值指定显示哪个选项卡,然后重新提示报表。在理想情况下,我们使用提示控件或提示按钮设置参数值并重新提示。但是,没有提示控件或按钮能够满足要求。一个提示可以设置参数值并重新提
28、示(通过自动提交),但是无法看起来像文本。6.3 适用范围这种技术应该适用于 reportnet 或 ibm cognos 8 的任何版本。6.4 未记录和不受支持的功能正如下面详细讨论的,这个解决方案需要使用两个在 ibm cognos 8 中未记录和不受支持的功能。因此,在以后的版本中对这两个功能的支持可能会改变或完全取消,从而需要重写这个解决方案。但是,这种风险很低,因为目前在这些方面没有修改计划。6.5 选项卡式提示报表项目在我们的场景中,第一个选项卡让用户选择 order year(s),第二个选项卡让用户选择 product name(s),以便运行一个非常简单的列表报表。我们将从
29、头到尾介绍创建示例报表的整个过程。为方便起见,我们只使用两个选项卡,每个选项卡上各有一个提示。6.5.1 创建基本报表打开 report studio 和 go sales and retailers 包。创建一个新的列表报表: ordersorder year ordersproduct name ordersrevenue 如图所示:图 5.创建基本报表创建两个可选的 详细信息筛选: order year in ?p_orderyear? product name in ?p_productname? 这样就行了。这就是将用来演示这种技术的基本报表。6.5.2 创建基本提示页面尽管创建选项
30、卡式提示用户界面并不难,但是过程很长。大多数时间花在格式化方面。实际功能花费的时间很少。首先我们需要一个提示页面。在报表中添加一个提示页面:图 6.添加一个提示页面把一个一行两列的表格拖到提示页面体中,如图所示:图 7.把一个一行两列的表格拖到提示页面体中我们暂时不管这个表格,但是稍后要使用它。6.5.3 创建选项卡体条件块最终包含出现在每个选项卡上的提示。图 8.创建选项卡体我们首先创建基本的选项卡体结构并使用一些文本项,让我们可以看出哪个选项卡是当前的。把一个 conditional block 对象拖到页面体中:图 9.把一个 conditional block 对象拖到页面体中选择条件
31、块对象然后选择 block variable 属性。创建一个 ,像这样: name: tabtoshow values: tab2 expression: paramvalue(ptabtoshow) 变量名 tabtoshow、值 tab2 和参数 ptabtoshow 很重要,这个项目要多次引用它们。选择好块之后,把 current block 属性设置为 other。把一个文本项 tab 1 拖到块中,像这样:图 10.把一个文本项 tab 1 拖到块中这个文本用于提醒我们哪个选项卡是当前正在查看的。选择块,把 current block 属性设置为 tab2。 tab 1 文本项会从块
32、中消失。把文本项 tab 2 拖到块中,像这样:图 11.把文本项 tab 2 拖到块中同样,这个文本用于提醒我们哪个选项卡是当前正在查看的。选择块,在 other 和 tab2 之间来回变换 current block 属性值,应该可以看到 report studio 中的选项卡随之切换。6.5.4 创建选项卡正如前面所说的,我们要使用 html 项和一些未记录和不受支持的功能实现选项卡。首先要做的是,使用 report viewer 将参数值传递给服务器。作为表单变量传递参数值,表单变量的名称是参数名(比如 ptabtoshow)前面加上 p_,比如 p_ptabtoshow。这种参数传递
33、机制是未记录和不受支持的。请注意本文前面的说明。我们使用一个 html 对象创建这个表单变量。把一个 html 项目拖到 page header 中,像这样:图 12.把一个 html 项目拖到 page header 中这个项的位置无所谓,因为它不向用户显示。选择 html 项并把 html 属性设置为: 这行 html 代码创建表单变量 p_ptabtoshow 并将值设置为 tab1。这个表单变量让服务器认为报表中已经定义了名为 ptabtoshow 的参数,所以服务器会保留它的值并在重新提示报表时把它传递回 report viewer。现在,回到前面在该示例中添加的表格。尽管目前还看不
34、出来,但是这个表格中的两个单元格将变成用户可以单击的选项卡。图 13.单击的选项卡出现在选项卡上的文本项将是 html 项。在每个表格单元格中添加一个 html 项,让它们在单元格中居中:图 13.在每个表格单元格中添加一个 html 项选择左边的 html 项并把 html 属性设置为: show tab 1 这段 javascript 创建一个按钮: 按钮标题(工具提示文本) show tab 1 操作: o 将表单变量 p_ptabtoshow 设置为 tab1 o 运行函数 reprompt 按钮标签 show tab 1 换句话说,当用户按这个按钮时,它会设置表单变量并重新提示报表。
35、注意,reprompt 函数是未记录和不受支持的。请注意本文前面的说明。选择右边的 html 项并把 html 属性设置为: show tab 2 运行报表:图 15.运行报表可以通过单击按钮在选项卡之间切换,显示相应的文本。图 16.切换选项卡核心选项卡功能现在完成了。剩下的工作都是装饰性的;这个用户界面是有效的,但是看起来不像选项卡式用户界面。另外,还要把提示放到选项卡上。返回到 report studio。6.5.5 设置选项卡的样式我们要用边框、对齐和其他样式改变 html 按钮和块的外观,让它们看起来像选项卡。首先,处理 html 按钮。选择父表格,在 table propertie
36、s 属性中选择 fixed size。仍然选择表格,选择 size and overflow 属性并删除当前的宽度设置。选择每个表格单元格并把宽度都设置为 100 pixels (px)。在实际的报表中,必须调整宽度,让宽度与每个选项卡中的文本匹配。请记住,为了让选项卡更美观,所有选项卡常常采用相同的宽度。现在,表格单元格和 html 按钮有点儿像选项卡了:图 17.设置选项卡的样式现在,需要重新设置 html 按钮的样式,让它们只显示文本。选择 html 对象之一,会看到没有样式属性:图 18. 重新设置 html 按钮的样式在 ibm cognos 8 中,可以在报表中定义样式并把它们应用
37、于报表对象。同样,也可以把这些样式应用于 html 对象。6.5.6 ibm cognos 8 按钮样式在 ibm cognos 8 中,可以定义一个类,然后在 html 按钮定义中引用它。使用 page explorer 打开 classes。把一个 class 对象从工具箱拖到 local classes 区域:选择这个新的类对象并设置属性: name: htmlbuttons border: none box type: block background color: white class or selector: hb 返回到提示页面。class/selector 属性是在把样式应用
38、于 html 项时使用的标识符。选择左边 tab 1 的 html 对象并把 html 属性改为: button title=show tab 1 onclick=document.formwarprequest.elementsp_ptabtoshow.value= tab1;setpromptcontrol(reprompt) class=hbshow tab 1 选择右边 tab 2 的 html 对象并把 html 属性改为: show tab 2 6.5.7 reportnet 按钮样式在 reportnet 和 ibm cognos 8 中都可以使用这种方法。我们使用 html 样
39、式属性在 html 按钮定义中直接应用样式,而不是引用在报表级定义的通用样式定义。选择左边的 html 对象并把 html 属性改为: show tab 1 选择右边的 html 对象并把 html 属性改为: show tab 2 6.5.8 运行报表运行报表。删除按钮的按钮式外观,只留下文本。图 19.运行报表6.5.9 显示活跃的和不活跃的选项卡我们现在需要通过设置选项卡的样式表明哪个选项卡是活跃的。活跃的选项卡将采用黑色的边框和文本。不活跃的选项卡将采用灰色的边框和文本。选择左边的表格单元格。将 style variable 设置为 tabtoshow。使用 variable expl
40、orer 选择 tabtoshow,再选择 other:图 20. 仍然选择左边的表格单元格,将左边、上边和右边的 border 设置为 black、solid line、1.5 point (pt):图 21.border 设置 图 22. tab 1 选项卡使用 variable explorer 选择 tabtoshow,再选择 tab2:仍然选择左边的表格单元格,将左边、上边和右边的 border 设置为 silver、solid line、1.5 point (pt):图 23. tab2 border 设置图 24. tab 2 选项卡运行报表:图 25.运行报表 tab 1单击
41、show tab 2,让 tab 1 变成非当前的:图 26.运行报表 tab 2对 tab 2(右边的表格单元格)重复相似的步骤。返回到 report studio。选择右边的表格单元格。将 style variable 设置为 tabtoshow。使用 variable explorer 选择 tabtoshow,再选择 other:图 27. 将 style variable 设置为 tabtoshow仍然选择右边的表格单元格,将左边、上边和右边的 border 设置为 silver、solid line、1.5 point (pt):图 28. border 设置使用 variable
42、 explorer 选择 tabtoshow,再选择 tab2:仍然选择右边的表格单元格,将左边、上边和右边的 border 设置为 black、solid line、1.5 point (pt):图 29. tab2 border 设置运行报表:图 30. 运行报表单击 show tab 2:图 31. 运行报表 show tab 2两个表格单元格之间的边框是灰色,但是我们在右边的表格单元格上已经把它设置为黑色了。因此它既有灰色也有黑色。每个表格单元格实际上有自己的边框,但是在默认情况下它们是重叠的。也就是说,不会看到下面这样并列的边框:图 32.不会看到下面这样并列的边框 边框会重叠在一起
43、。当边框重叠时,按一定的规则决定(优先)显示哪个边框。在这里,显示左边的单元格边框。当右边的单元格活跃时,我们需要调整边框,让左边的单元格没有边框。返回到 report studio。选择左边的单元格。使用 variable explorer 选择 tabtoshow,再选择 tab2:删除单元格右边的边框:图 33.删除单元格右边的边框 运行报表:图 34. 运行报表单击 tab 2:图 35. 单击 tab 2现在,边框样式能够适当地表明活跃的和不活跃的选项卡。6.5.10 格式化选项卡体现在需要把选项卡和选项卡体连接在一起。返回到 report studio。使用 variable ex
44、plorer 选择 no variable:图 36. 选择 no variable选择块:图 37. 选择块在四个边上将 border 设置为 black、solid、1.5 point (pt):图 38. border 设置仍然选择块,将 current block 属性设置为 tab2。在四个边上将 border 设置为 black、solid、1.5 point (pt):图 39. tab2 border 设置运行报表:图 40. 运行报表现在,选项卡的样式完全设置好了。但是,我们想再设置一些样式,让选项卡更美观一点。首先,我们想把选项卡向下移动,让它们窄一些。返回到 report
45、 studio。6.5.11 格式化页面并添加文本选择 page body 对象,将左边、上边和右边的 padding 设置为 100 pixels (px)。这在选项卡的所有边上提供 100 像素的缓冲区。最后,我们提供一些说明性文本,然后把报表提示放进选项卡中。将标题文本编辑为“revenue report”图 41. 格式化页面并添加文本把一个块拖到页眉中,作为最后一项:图 42. 把一个块拖到页眉中把文本对象拖到这个块中,输入文本“you may switch tabs to choose a different prompt.”:图 43. 输入文本选择页面体中的条件块。将 curr
46、ent block 属性设置为 other。我们希望(tab 1 上的)主提示用于提示 order year。把一个 value prompt 对象拖到块中: 使用现有的参数:p_orderyear 为 order year 创建一个新查询(默认选项) 选择提示并把 required 属性设置为 no(如果还没有设置的话)。选择条件块并将 current block 属性设置为 tab2。我们希望(tab 2 上的)第二个提示用于提示 product name。把一个 value prompt 对象拖到块中: 使用现有的参数:p_productname 为 product name 创建一个新
47、查询(默认选项) 选择提示并把 required 属性设置为 no(如果还没有设置的话)。运行报表。因为这些筛选是可选的,用户可以选择两个提示之一、都选择或都不选择。6.6 结束语这是一种很方便的方法。尽管它使用一些未记录和不受支持的产品功能,但是对于最终用户仍然很有价值。当然,可以根据需要使用这种方法实现更多的选项卡、不同的提示、文本和许多其他对象和控件,从而满足用户对提示界面体验的偏好。原文已完。下文为附加文档,如不需要,下载后可以编辑删除,谢谢!施工组织设计本施工组织设计是本着“一流的质量、一流的工期、科学管理”来进行编制的。编制时,我公司技术发展部、质检科以及项目部经过精心研究、合理组
48、织、充分利用先进工艺,特制定本施工组织设计。一、 工程概况:西夏建材城生活区27#、30#住宅楼位于银川市新市区,橡胶厂对面。本工程由宁夏燕宝房地产开发有限公司开发,银川市规划建筑设计院设计。本工程耐火等级二级,屋面防水等级三级,地震防烈度为8度,设计使用年限50年。本工程建筑面积:27#楼3824.75m2;30#楼3824.75 m2。室内地坪0.00以绝对标高1110.5 m为准,总长27#楼47.28m;30#楼47.28 m。总宽27#楼14.26m;30#楼14.26 m。设计室外地坪至檐口高度18.6 00m,呈长方形布置,东西向,三个单元。本工程设计屋面为坡屋面防水采用防水涂料
49、。外墙水泥砂浆抹面,外刷浅灰色墙漆。内墙面除卫生间200300瓷砖,高到顶外,其余均水泥砂桨罩面,刮二遍腻子;楼梯间内墙采用50厚胶粉聚苯颗粒保温。地面除卫生间200200防滑地砖,楼梯间50厚细石砼1:1水泥砂浆压光外,其余均采用50厚豆石砼毛地面。楼梯间单元门采用楼宇对讲门,卧室门、卫生间门采用木门,进户门采用保温防盗门。本工程窗均采用塑钢单框双玻窗,开启窗均加纱扇。本工程设计为节能型住宅,外墙均贴保温板。本工程设计为砖混结构,共六层。基础采用c30钢筋砼条形基础,上砌mu30毛石基础,砂浆采用m10水泥砂浆。一、二、三、四层墙体采用m10混合砂浆砌筑mu15多孔砖;五层以上采用m7.5混
50、合砂浆砌筑mu15多孔砖。本工程结构中使用主要材料:钢材:i级钢,ii级钢;砼:基础垫层c10,基础底板、地圈梁、基础构造柱均采用c30,其余均c20。本工程设计给水管采用ppr塑料管,热熔连接;排水管采用upvc硬聚氯乙烯管,粘接;给水管道安装除立管及安装ic卡水表的管段明设计外,其余均暗设。本工程设计采暖为钢制高频焊翅片管散热器。本工程设计照明电源采用bv2.5铜芯线,插座电源等采用bv4铜芯线;除客厅为吸顶灯外,其余均采用座灯。二、 施工部署及进度计划1、工期安排本工程合同计划开工日期:2004年8月21日,竣工日期:2005年7月10日,合同工期315天。计划2004年9月15日前完成
51、基础工程,2004年12月30日完成主体结构工程,2005年6月20日完成装修工种,安装工程穿插进行,于2005年7月1日前完成。具体进度计划详见附图1(施工进度计划)。2、施工顺序基础工程工程定位线(验线)挖坑钎探(验坑)砂砾垫层的施工基础砼垫层刷环保沥青 基础放线(预检)砼条形基础刷环保沥青 毛石基础的砌筑构造柱砼地圈梁地沟回填工。结构工程结构定位放线(预检)构造柱钢筋绑扎、定位(隐检)砖墙砌筑(50cm线找平、预检)柱梁、顶板支模(预检)梁板钢筋绑扎(隐检、开盘申请)砼浇筑下一层结构定位放线重复上述施工工序直至顶。内装修工程门窗框安装室内墙面抹灰楼地面门窗安装、油漆五金安装、内部清理通水通电、竣工。外装修工程外装修工程遵循先上后下原则,屋面工程(包括烟道、透气孔、压顶、找平层)结束后,进行大面积装饰,塑钢门窗在装修中逐步插入。三、 施工准备1、 现场道路本工程北靠北京西路,南临规划道路,交通较为方便。场内道路采用级配砂石铺垫,压路机压。2、 机械准备设2台搅拌机,2台水泵。现场设钢筋切断机1台,调直机1台,电焊机2台,1台对焊机。现场设木工锯,木工刨各1台。回填期间设打夯机2台。现场设塔吊2台。3、施工用电施工用电已由建设单位引入现场;根据工程特点,设总配电箱1个,塔吊、搅抖站、搅拌机、切断机、调直机、对焊机、木工棚、楼层用电、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论