建立與使用 Oracle 的報表模型
您可以使用模型設計師、報表管理員或 Microsoft Office SharePoint Server 2007 或 SharePoint Server 2010 (在 SharePoint 整合模式中執行時),根據執行 9.2.0.3 版或更新版本的 Oracle 資料庫產生報表模型。
若要依據 Oracle 資料庫產生模型,您必須執行 9.2.0.3 版本或更新版本的 Oracle 用戶端。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 資料庫基礎行為的關係,所以搭配 Oracle 資料庫使用時,在語意模型定義語言 (SMDL) 查詢轉譯程式中會有一些行為上的差異。這些行為可能包含功能和組態參數上的細微差異,您需要這些參數來控制錯誤的因應措施以及設計目標資料庫中的限制。下列是這些差異的描述。
資料類型
SMDL 僅支援下列的 Oracle 資料類型。
SMDL 類型 |
Oracle 類型 |
---|---|
字串 |
CHAR、NCHAR、VARCHAR2、NVARCHAR2、LONG、CLOB、NCLOB |
小數或整數 |
NUMBER |
布林 |
NUMBER 如果 Oracle 資料行在資料來源檢視 (DSV) 檔中標示為布林,基礎資料行必須為 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 |
布林 |
False |
此參數會關閉針對 Oracle 查詢所產生的 NO_MERGE 最佳化工具提示。 由於 Oracle 查詢最佳化工具的技術問題,包含左方外部聯結的某些查詢類別將會失敗,或是傳回不正確的結果。因此,Reporting Services Oracle 查詢轉譯程式會在某些左方外部聯結中,使用 NO_MERGE 最佳化工具提示。由於這會使查詢正確執行,效能可能會受到不利的影響。如果您向解決此問題的 Oracle 取得軟體更新,可能會將這個參數設定為 True 以停用 NO_MERGE 因應措施。 |
EnableUnistr |
布林 |
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 |
布林 |
False |
此參數會將數學運算的結果轉換為 Microsoft .NET Framework 十進位格式。 在查詢中的某些數學運算可能會導致結合有效位數與小數位數的十進位值,而該值無法以 .NET Framework 十進位資料類型表示。雖然您可以將此種十進位運算式的結果明確地轉換為十進位,但您的報表產生器使用者未必會知道這再設計階段的必要性。如需經常建立這類運算式,可以將此參數設定為 True,以自動執行所需的轉換。 |
變更記錄
更新的內容 |
---|
更新組態名稱參數會在轉換為 DATE 時,關閉明確截斷 TIMESTAMP 中的秒數片段。正確的參數名稱為 DisableTSTruncation。 |