微軟BI 之SSRS 系列 - 如何實現報表標簽的本地化 - 中文和英文的互換


SSRS 中並沒有直接提供本地化的配置方式,因此在 SSRS 中實現本地化,比如有英文標題還有可選的中文標題,就需要通過其它的方式來解決。

比如默認是這樣的英文標題 -

但是本地中方用戶可能比較喜歡看到這樣的標題 -

我們可以通過以下方式來實現 -

創建一張翻譯表,這張翻譯表將配置所有需要本地化的中文和英文標簽。

-------------------------------------------------------------------------- -- http://www.cnblogs.com/biwork --------------------------------------------------------------------------
USE BIWORK_SSIS
GO

IF OBJECT_ID('dbo.TRANSLATION','U') IS NOT NULL
DROP TABLE dbo.TRANSLATION 
GO 

CREATE TABLE dbo.TRANSLATION
(
    ID INT,
    LANGUAGE_TYPE NVARCHAR(25),
    LANGUAGE_DESC NVARCHAR(255)
    CONSTRAINT [PK_TRANSLATION] PRIMARY KEY CLUSTERED(ID,LANGUAGE_TYPE)
)

INSERT INTO dbo.TRANSLATION VALUES
(1,'en-US','Employee ID'),
(1,'zh-CN',N'員工 ID'),
(2,'en-US','Full Name'),
(2,'zh-CN',N'名稱'),
(3,'en-US','Title'),
(3,'zh-CN',N'職位')

SELECT ID,
       LANGUAGE_TYPE,
       LANGUAGE_DESC
FROM dbo.TRANSLATION

注意上面的主鍵部分,是 ID 和 LANGUAGE_TYPE 共同組成。 en-US 英文,zh-CN 中文

報表默認的語言我們可以看看 SSRS Report 的內置字段 Language - 把這個字段拖放到報表上然后預覽一下看看,我的默認的就是 en-US,后面會用到這個內置字段。

創建一個 DataSet - DS_LABELS, 在 BIDS 工具中,如果在查詢時寫好了這個參數,創建完 DataSet后,這個參數就會被直接創建出來,不需要預先定義。

再創建一個 Dataset - DS_LANGUAGES 用來作為報表上的語言參數 -

同時給 @LANGUAGE 變量賦值可用的值 -

Default Value 也可以像上面一樣選中 DS_LANGUAGES 來給定值,當然也可以讓這個參數在顯示的時候按照報表自身的默認語言來顯示,使用 Build-In 內置字段。

還要再創建一個隱藏的可多選的參數 - LABELS

可用的值 -

默認值 -

在報表區域右鍵屬性,然后在 Code 里添加一段 VB 代碼 -

Public Function GetLabel(P as Parameter, Label as String) as String
    Dim i As Integer
    
    For i = 0 to Ubound(P.Value)
       If (P.Value(i) = Label) Then Return P.Label(i)
    Next i
Return Label
End Function

這段代碼的作用就是將參數 LABELS 對象(注意第一個參數的類型是 Parameter) 傳入,然后循環遍歷這個參數對象的所有 VALUE 值,如果某一個 VALUE 值即表中的 ID 列正好等於第二個參數的值,那么就將這個參數的 VALUE 所對應的 LABEL 返回。

這個代碼是最核心的代碼!

好了,這樣就可以在頁面上根據數據翻譯表中的 ID 來獲取對應的 LABEL 了。

需要的地方全都修改,並指定相應的 ID。

預覽報表,可以根據相應的語言查看報表。

在網上看到不止這一種解決方法,也有使用自定義的 Code 來解決的,但我認為這種方式還是相對要容易管理一些,並且所有的標簽內容在數據庫表中進行管理,很方便。

當然,在實際使用的時候要考慮到可重用性,也就是說不同的報表中字段,標簽名稱相同的情況下應該使用同一個標簽而不應該重復創建字段。因此在檢查字段標簽是否重復存在的時候可以對 LANGUAGE_DESC 進行排序然后檢查。

並且,如果為了更好的管理報表的標簽的話,應該再增加一個Report表和ReportLabel表。即需要知道哪些報表使用了哪些標簽,這樣一來就可以根據報表名稱快速排查哪些標簽被使用了,要改的時候也知道要改哪些標簽。


更多 BI 文章請參看 BI 系列隨筆列表 (SSIS, SSRS, SSAS, MDX, SQL Server)

如果覺得這篇文章看了對您有幫助,請幫助推薦,以方便他人在 BIWORK 博客推薦欄中快速看到這些文章。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM