微软BI 之SSRS 系列 - 如何实现报表标签的本地化 - 中文和英文的互换

浏览: 3966

开篇介绍

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表。即需要知道哪些报表使用了哪些标签,这样一来就可以根据报表名称快速排查哪些标签被使用了,要改的时候也知道要改哪些标签。

推荐 0
本文由 BIWORK 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册