Parameter Map即参数映射,用于创建带条件查询的查询主题,如动态字段、动态过滤值,当报表运行时可切换不同的条件值。和数据表下拉查询类似,每一个参数映射包含一个key值作为唯一标识符,一个value值作为显示属性。我们可人工自定义输入key,value的匹配值列表,亦可基于模型中已存在的查询项作为参数映射值。
参数映射值来源最好是基于维度型、数据量可支撑范围内的值,如国家地区、语言列表。若值来源列表数据量大于10万,则会导致查询性能下降。
※接下来我们以语言区域为例,创建Parameter Map来自动映射当前所属语言。
1、切换至Parameter Maps文件夹,创建一个参数映射对象,并输入映射名称,如下图
2、为Key,Value手工收入对应值,如zh-cn 对应 ZH,en-us 对应 EN
手工输入值比较费时,我们推荐把数据库已存在的表字典信息导出本地csv,xls或带分隔符的txt文件,且文件字符格式为UTF-8或Unicode(不支持ANSI文本),然后再import。如下图所示
xls,cvs文件默认带tab分割多列值,txt的文本必须满足如下格式: (key{tab}value),一个tab分隔符相当于4个空格宽度。
zh-cn ZH
en-us EN
en-au EN
3、维护参数映射列表
指定一个默认值,即当映射来源为空时返回一个指定的默认值。如图(2.3.9. 输入key,value列信息), 删除、修改或清除所有的key和value。
现在,我们将刚创建好的parameter map应用于模型中。product_line是一个多语言的数据表,不同语言有不同的字段,
创建一个Query Subject,基于session parameter ‘runLocale’ ,根据用户所在语言区域归类其所使用的语言,去语言区域和语言的对应关系在创建Parameter Map时定义。使用表达式如下:#'PRODUCT_LINE.PRODUCT_LINE_'+$PM_Languuage_Local($runLocale)# 动态组合符合客户语言的查询字段。
这里需要注意,因为是动态字段,别名定义一定需要:as product_line,否则每次字段名是不同的值,因为模型字段名称只能是静态值。生成的查询语句如下:
※根据模型中已有的查询项创建Parameter Map值
创建parameter map选择'Based on existing query items' 如下图所示,
下面就可以看到基于该查询项导入的值列表,
和第一种方式不同,该值列表的值不能被修改、删除。
Parameter Map和Session Parameter结合使用创建条件变化的动态查询项或查询条件,为模型的创建提供了极大的方便。多语言模型的该功能的经典实例,那我们就可以根据这个实例,结合企业环境来制作我们自己的条件化模型,如根据用户的信息 ‘座机电话’,‘邮编’ 判断其所在部门机构。在这节内容里,一定程度上引用了Marco函数,如sq给值添加单引号,dq则添加双引号,Framework Manager提供了丰富的Marco函数库供开发使用,请看下一节 2.4 剖析Marco的函数和应用。