创建和使用基于 Oracle 的报表模型

在 SharePoint 集成模式下运行时,您可以使用模型设计器、报表管理器或者 Microsoft Office SharePoint Server 2007 或 SharePoint Server 2010,基于运行版本 9.2.0.3 版本或更高版本的 Oracle 数据库生成报表模型。

若要基于 Oracle 数据库生成模型,您必须运行 Oracle 客户端 9.2.0.3 版本或更高版本。Oracle 客户端目录必须位于系统路径中,并且报表服务器 Windows 服务和报表服务器 Web 服务都必须拥有访问此目录中文件的权限。

此外,请确认:

  • 您的 Reporting Services 安装中有可用的 Reporting Services Oracle 数据处理扩展插件。

  • Oracle 客户端安装在可由报表服务器 Windows 服务和报表服务器 Web 服务访问的文件夹中。

  • 报表服务器 Windows 服务、报表服务器 Web 服务以及无人参与的执行帐户都必须拥有该 Oracle 客户端安装的读取和执行目录访问权限。

连接字符串

基于 Oracle 数据库生成报表模型时,连接字符串将类似如下所示:

Data Source="Oracle9";Unicode="True"

其中“Oracle9”表示 Oracle 服务器的逻辑名称。

注意注意

指定 Oracle 数据库的连接字符串时,ServerName 必须与 tnsnames.ora 配置文件中定义的名称相匹配。

有关如何连接到 Oracle 数据源的详细信息,请参阅Oracle 连接类型 (SSRS)

重要说明重要提示

为您的 Oracle 模型生成数据源视图时,请确保单击数据源视图向导“选择数据源”页面上的“高级”按钮,并在“高级数据源视图选项”对话框中选择用来筛选数据库对象的架构名称。然后选择要添加到模型的数据库对象。

功能限制

由于 Oracle 数据库的基础行为,语义模型定义语言 (SMDL) 查询转换器在与 Oracle 数据库一起使用时会有一些行为差异。这些行为可能包括功能和配置切换(用于控制目标数据库中针对 bug 和设计限制的解决方法)方面的微小差异。下面是这些差异的说明。

数据类型

SMDL 仅支持以下 Oracle 数据类型。

SMDL 类型

Oracle 类型

String

CHAR、NCHAR、VARCHAR2、NVARCHAR2、LONG、CLOB、NCLOB

Decimal 或 Integer

NUMBER

Boolean

NUMBER

如果数据源视图 (DSV) 文件中的 Oracle 列标记为 Boolean,则基础列必须是 NUMBER 并且只包含值 0、1 或 NULL。

日期

DATE、TIMESTAMP

Binary

RAW、LONGRAW、BLOB

SMDL 不支持任何上面未列出的数据类型,包括以下各项:

  • BINARY_FLOAT

  • BINARY_DOUBLE

  • TIMESTAMP WITH TIME ZONE

  • TIMESTAMP WITH LOCAL TIME ZONE

  • INTERVAL YEAR TO MONTH

  • INTERVAL DAY TO SECOND

  • ROWID

  • UROWID

  • BFILE

在使用报表管理器或 SharePoint 产品自动生成报表模型期间,包含有不支持的数据类型的列将会被排除在该模型之外。此外,如果不支持的数据类型是主键的一部分,则不会生成整个实体。

使用模型设计器创建报表模型时,所有内容都将添加到报表模型中;因此,在完善模型时,必须手动筛选出上面列出的所有不支持的数据类型。

函数

某些函数的行为可能取决于基础数据库。如果为 Left、Right 或 Substring 函数中的长度参数指定的值小于零,则 SMQL 中未定义这种行为。

配置切换

由于基础数据源的原因,有许多配置切换可用来修改基于数据源和环境特定情况的查询转换器的行为。RSReportServer.config 文件中定义了下列切换,默认情况下,该文件安装在 <SysDrive>:\Program Files\Microsoft SQL Server\MSSQL.X\Reporting Services\ReportServer\ 文件夹中。

名称

类型

定义默认值

说明

Disable

NO_MERGE

InLeftOuters

Boolean

False

切换将关闭为 Oracle 查询生成的 NO_MERGE 优化器提示。

由于 Oracle 查询优化器中的技术问题,某些涉及左外部联接的查询类会失败并返回错误结果。因此,Reporting Services Oracle 查询转换器在某些左外部联接中使用 NO_MERGE 优化器提示。虽然这样能够正确执行查询,但可能会对性能产生不利影响。如果从 Oracle 获得了解决此问题的软件更新,可将此切换设置为 True 以禁用 NO_MERGE 解决方法。

EnableUnistr

Boolean

False

切换强制显式使用 UNISTR 函数来表示 Oracle 查询中的 Unicode 文字。

通常,当数据库的区域设置与查询中所含字符串常量的区域设置相匹配时,Unicode 字符串常量可作为查询中的常规字符串生成。当使用 Oracle 数据库的 NLS_CharacterSet 定义的代码页中不存在的文字常量时,Oracle 要求使用显式 UNISTR 函数来表示 Unicode 文字。将此切换设置为 True 会导致查询中的所有 Unicode 字符串使用 Oracle UNISTR 函数进行编码。 

DisableTSTruncation

Truncation

Boolean

False

当转换为 DATE 时,切换将禁用 TIMESTAMP 中秒的小数部分的显式截断。

由于 Oracle 的默认舍入行为(将时间戳转换为日期),同时由于特定日期操作要求使用日期而不是时间戳,使得确保这些操作的准确性的唯一方式是在转换为日期之前显式截断时间戳数据类型中的秒的小数部分。此截断同样应用于日期,因为 Oracle 查询转换器无访问基础 Oracle 类型信息以区分时间戳和日期的权限。这对许多日期操作会产生微小的性能影响。如果任何目标数据库中均未使用时间戳,则可以将此切换设置为 True 以忽略不必要的截断。

EnableMath

OpCasting

Boolean

False

切换将启用将数学运算结果转换为 Microsoft .NET Framework 小数格式。

查询中的某些数学运算可能会得到小数值,并且其精度和小数位数组合无法表示为 .NET Framework 小数数据类型。虽然您可以将这类小数表达式的结果显式转换为小数,但您的报表生成器用户可能并不清楚在设计时需要如此操作。如果需要频繁创建这类表达式,则可以将此切换设置为 True 以自动执行所需转换。

更改历史记录

更新的内容

更新了配置开关的名称,当转换为 DATE 时,该开关将禁用 TIMESTAMP 中秒的小数部分的显式截断。正确的开关名称是 DisableTSTruncation。