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 = 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 博客推荐栏中快速看到这些文章。


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

  1. 微软BI 之SSRS 系列 - 如何让报表在一页显示,两种常用的技巧

    通常情况下,SSRS 报表在页面内容过多的时候会自动分页.但有的时候当页面内容不是很多,大概最多2页的情况下,或者客户要求所有内容必须在一页显示时,应该如何设置. 实际上,要考虑两种情况:第一种情况是 ...

  2. 微软BI 之SSRS 系列 - 如何实现报表导航 Navigation 和钻取 Drill Down 的效果

    开篇介绍 如何在 SSRS 报表中实现标签导航 Navigation 和向下钻取 Drill Down的效果? 如同下面这个例子一样 - 在页面第一次加载的时候,默认显示是全部地区的销售总和情况,上面 ...

  3. 微软BI 之SSRS 系列 - 巧用 RunningValue 函数在分组中排序并设置 RANK 排名

    开篇介绍 经常有像类似于这样的排序需求,以及设置分组下的排序序号.比如此图中要求城市 City 在省份下按照 Internet Sales Amount 总销售额进行排序,并标识在各省份下的排名. 实 ...

  4. 微软BI 之SSRS 系列 - 实现 Excel 中图表结合的报表设计

    来自群里面讨论的一个问题,EXCEL 中有类似于这样的图形,上面是 Chart, Chart X轴上的值正好就是下方 Table 的列头,这个在 SSRS 中应该如何实现?   SSRS 2008.2 ...

  5. 微软BI 之SSRS 系列 - 报表邮件订阅中 SMTP 服务器匿名访问与 Windows验证, 以及如何成功订阅报表的实例

    这篇文章源于在上一篇博文中有园友提出订阅 SSRS 报表时的一个问题,  于是就好好总结了一下,把有关 SSRS 报表订阅的要点和容易出现问题的地方写出来,希望对大家有所帮助! 参看上一篇博文 - S ...

  6. 微软BI 之SSRS 系列 - 在 Cube 中通过 MDX 查询实现基于父子递归关系的汇总报表

    之前我写了一篇在 SSRS 开发中处理这种父子关系的汇总与聚合的文章 (SSRS 系列 - 使用分组 Group 属性实现基于父子递归关系的汇总报表),示例中的查询是基于 SQL Server 关系型 ...

  7. 微软BI 之SSRS 系列 - 基于时间段参数的 MDX 查询以及时间日历 Date Picker 的时间类型参数化

    今天在天善问答里看到一个问题,如果我没有理解错的话,它应该是指比如在一个报表中选取一个时间段,然后求出这个时间段的某个 Measure 的 SUM 和.并且同时求出这两个时间点对应的上一年的时间点之间 ...

  8. 微软BI 之SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表

    基于数据仓库上的 SSRS 报表展示,一般可以直接通过 SQL 查询,存储过程,视图或者表等多种方式将数据加载并呈现在报表中.但是如果是基于 Cube 多维数据集的数据查询,就不能再使用 SQL 的语 ...

  9. 微软BI 之SSRS 系列 - 使用 LookupSet 和 Adjacent Group 等高级技巧在报表中跨 Dataset 分组查询

    SSRS 报表中有一些高级的技巧,平常很少用到,下面我通过这个案例来展现一下如何在实际开发中使用它们,并且如何解决一些实际的需求. 这张报表分别统计了不同的 Product 产品在不同的月份的 Ord ...

随机推荐

  1. CSS:如何学习 CSS?

    马上该转战互联网领域了,在此总结一下 CSS 学习的思路. 理解 CSS 的基本语法. 理解盒子模型. 理解文档流和定位. 理解浮动和清除. 理解各种 CSS 样式. 目前发现的最好的资源是:http ...

  2. fastjson 过滤不需要的字段或者只要某些字段

    /* * 第一种:在对象响应字段前加注解,这样生成的json也不包含该字段. * @JSONField(serialize=false)   * private String name;   */ / ...

  3. 【机器学习算法-python实现】矩阵去噪以及归一化

    1.背景    项目须要,打算用python实现矩阵的去噪和归一化.用numpy这些数学库没有找到非常理想的函数.所以一怒之下自己用标准库写了一个去噪和归一化的算法,效率有点低,只是还能用,大家假设有 ...

  4. 通过泛型来简化findViewById

    我们一般写findViewById都要加个强制转换,感觉很麻烦,现在你可以在你的BaseActivity中写入如下方法: @SuppressWarnings(“unchecked”) public f ...

  5. vue elementui switch开关控件的使用

    <el-switch @change="test" on-value="1" off-value="0" v-model=" ...

  6. Spring常用表单验证注解

    下面是主要的验证注解及说明: 注解 适用的数据类型 说明 @AssertFalse Boolean, boolean 验证注解的元素值是false @AssertTrue Boolean, boole ...

  7. Leetcode刷题记录:构建最大数二叉树

    题目要求,题目地址 给定一个不含重复数字的数组,最大二叉树构建规则如下: 1.根是数组中最大的数字 2.左边的子树是最大数字左边的内容 3.右边的子树是最大数字右边的内容 答案 class Solut ...

  8. JAVA开发中文乱码的几个解决方案

    一:html乱码或者引入的JS乱码 1:第一步,text file encoding 首先确保文件的保存格式要UTF-8,如在eclipse中,要在文件上点属性,确保这里选择UTF-8 注意,在ecl ...

  9. Holt Winter 指数平滑模型

    1 指数平滑法 移动平均模型在解决时间序列问题上简单有效,但它们的计算比较难,因为不能通过之前的计算结果推算出加权移动平均值.此外,移动平均法不能很好的处理数据集边缘的数据变化,也不能应用于现有数据集 ...

  10. frp官方中文文档

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议. 目录 frp 的作用 开发状态 架构 使用示例 通过 ssh 访问公司内网机器 通过自定义 ...