【IT168技术文档】
许多数据值需要进行适当的格式化,因为默认的格式通常是不能接受的。表4-2列出了常用的SQL Server数据类型和它们无格式默认值。 
如果并不想在报表中看到这些值,那么需要用每个控件的格式属性来修改它们。报表服务控件的格式化功能基于.NET Framework中的格式化机制,并且使用正则表达式的形式。正则表达式非常强大,能够用读者所能想到的任意方法来格式化值。正则表达式字符串可以从简单到极为复杂。如果需要学习更多正则表达式的高级使用,搜索Visual Studio的联机帮助或者正则表达式语言元素(Regular Expression Language Elements)的MSDN库。然而,为了满足大多数需要,我将演示如何使用基本的元素。
标准格式化
标准的、单字符的字符串可以用来指定数字和日期的格式化选项。使用标准格式化字符串的好处一个是自动应用计算机设置区域文化的格式。依赖于报表的应用程序,这可能是不能令人满意的。例如,如果一位客户想要查看一张发货单,他所使用的计算机设定为在欧洲区域,那么他或她会认为自己正在购买一辆几千欧元而不是几千美元的自行车。在这种情况下,最好显式地将货币格式化为美元,然后使用一种通用的日期格式,于是,系统在欧洲用户面前所显示为他们本国的格式。做此事的非常好的方法是为两种货币和日期文本框使用标准格式字符串,并且将货币的地点属性设置为EN-US。将日期属性设置为空,这样会使它在报表自动按照客户端设置,当报表按照客户端设置显示的时候将会进行解析。
在报表服务联机图书(Reporting Services Books Online)中有大量关于这个主题的信息。不幸的是,也有许多不适合大多数报表需求的额外信息。我们的目标是保持简单,并向读者展示,对于大多数报表什么是真正需要知道的。表4-3中列举了适用于数字数据类型的常用格式。 
表4-4列举了适用于日期和时间数据类型的常用格式。 
显式格式化
除标准的格式化技术之外,也可以选择显式的格式化字符串方式,以得到更多的控制,可以处理特殊的格式化需求。记住,即使服务器上的地点设置改变,日期和货币格式化的输出仍然保持不变。
报表服务联机图书中包含了字符串元素特定格式的细节信息,因此这里将不再赘述。我们要做的是展示一些显式格式化的常见例子。在联机图书中的“Custom Numeric Format Strings”和“Custom DateTime Format Strings”主题下,可以找到此主题的相关细节。表4-5是常用格式化表达式元素的一个总结。 
让我们以一个普通的场景为例。假设读者的公司在全球各地都有办公室,并且不论用户在什么地方,都遵从公司使用欧洲样式日期的标准。读者希望他们能够用公司标准显式地格式化,而不是由系统决定日期的格式。
如果设置日期类型的格式属性字符串为MMMM d, yyyy,日期将以下面格式显示:November 1,2003。
条件格式化
在某些情况下,可能需要基于报表中与其他字段或者条件相关的表达式来更改值的格式。使用不同的函数和表达式将在第6章讨论。现在,让我们看一些例子,来研究概念和一些技术。下面是一个简单的例子,演示区域格式会如何变化,它不是一个常见的商业解决方案。
假设读者的公司在英格兰、德国和美国有机构,并且不论什么原因(记住,我们是在作一个假设),希望根据对应的地区设置来使用不同的行显示格式化信息。下表中的每一行都包括名叫MyLocale的列,它保存地区的两个字符的代码。业界有一个称为RFC1766的五个字符的标准。代码可以容易地转化为符合标准。按照此列的期望值(UK、DE或US),可以用相应格式显示货币和日期信息。表4-6显示了格式化日期和货币值的目标。 
控件的属性可以设置为一个表达式,实际解析并按照所示的那样设置行的属性值。有一些技术能够做这项工作;其中一种是使用Immediate If 或者IIf函数。如果有一个测试条件和两个可能的输出,这种技术将会是有效的。一种更为强大的技术是Switch函数。它类似C#中的Switch语句、VB中的Select Case语句那样执行。这种技术用于设置日期的格式属性。
货币值可以用同样的方式设置,只有德国格式难以处理。因为句号这里指定使用千位分隔符,逗号用作小数分隔符。在德语中,这些字符具有相反的含义。幸好每个控件有语言属性来处理这种和许多其他语言和文化相关的特性。通过同样方式动态操作这个属性,可以达到目标。使用Switch功能,可以转化二字符代码成为使用五个字符的工业标准代码。
这是商业问题和解决方案中会出现的例子之一。如果这是在真实的环境中,在表格中存储实际的文化信息的字符串,并且简单地设置控件的语言属性为从表格中直接得到的值,这是有意义的。顺便说一下,所有可支持的文化信息字符串都可以在MSDN库中以CultureInfo作为关键词查找到。图4-58中所示报表显示了之前讨论的格式化例子的最终 结果。 
多列
一个报表可以以多列显示列表值。列中的值从上到下、从左到右迂回前进。注意,很重要的是报表服务仅支持HTML,一些多列报表在有些版本的HTML中不能正确显示,所以唯一的选择可能是将这些报表以PDF格式显示。
列由报表的主体所定义。当主体的列属性设置为大于1的值,报表页的宽度应按照以下公式计算:
报表页宽 >=(主体宽度 × 列数)+(列间距 × (列数 – 1))
例如,一个报表的主体有3列,每列宽度为2.5英寸,列的间隔设置为0.25英寸,这将产生一个8英寸宽的报表。如果报表的左、右页面空白都设置为0.25英寸,页面宽度将是8.5英寸。
图4-59中的布局窗口显示了具有维度和属性设置的报表设计。 
这个报表非常简单,不包含页眉和页脚。可以在报表中添加它们,但是选择受限。受到报表主体宽度的限制,页眉必须显示在第一列的上面。为了使用此例中宽度超过2.5英寸的报表页眉,将不得不创建另一个报表,并且使用多列报表作为子表 。读者将在第6章中学到更多关于创建子表的知识。记住:有些显示格式(例如HTML)对于多列报表一起使用比较困难。谨慎使用这个功能,并且确保自己已经对准备支持的所有格式进行过报表设计的测试。我建议尽量重新设计多列报表以避免这些限制。
SQL BI格式化
0
相关文章