如何在BI中分析附件图像表元

3128
2

3516853030 小试身手Lv3

发表于2020-6-18 16:45

楼主
场景:在i@Report中,用户通过填报采集附件、图像数据,并将这些数据存放在数据库中,但是这些附件、图片数据采集到数据库中了之后
如何在bi中分析附件、图像表元?
附件、图像表元中采集的内容能否实现下载查看?怎样下载呢?
问题分析
1、附件图像类型字段的存储
附件、图像表元存放在数据库中会分为有两个字段, 这两个字段在i设计任务是也可以看到,如下图所示。在BI中看到两个字段一般会挨着存储。

数据库表中存储如下所示:

第一个字段B1用来记录附件的摘要信息,字段类型:字符串,包含文件大小,源文件名 ,格式为:
  1. filesize=xxx;length=xxx;filename=xxx
复制代码
另一个字段G_1记录附件内容,字段类型:blob,二G_1进制流。

2、对于附件类型,如果直接在BI中拾取blob这种大字段的类型字段进行分析,展示出来的是大字段的大小信息。直接展示不能实现,如何实现下载后查看。


3、对于图像类型,就比较好些了可以直接设置表元类型为图像就可以直接在分析页面展示。但是直接去展示图像显然有时会比较浪费内存,如何通过下载的方式展示图片。

解决方案
解决方案有两种方式,一种是对于图像表元直接展示图片,另外一种是实现附件、图像下载后查看。
1、直接分析展示图像
(1)设计表样如下图所示。
拾取图像对应的大字段,并设置表元D2的数据类型为图像。
文件名显示表达式设置为:B2.value_filename可只显示图片文件名。
值得注意的是,在设置表样时浮动维表元要设置分组类型为只选择不分组,因为大字段blob类型没有办法进行分组sql,如求和,求最大值等。
(2)效果如下:

2、实现在点击“下载”表元时下载相应附件、图像
(1)设计表样如下所示。
在表样中增加一列,用来点击下载。
注意,浮动维表元也是要设置分组类型为只选择不分组。
(2)为增加的列“下载”设置钻取链接【万能式】,写钻取表达式如下所示。
此处注意 下载 所在表元为E2
如下为上图脚本:
window.lastclickevent = getEvent();_showfile('B0.A_19',['userid_','bbq_'],['<#=B2.value#>','<#=A2.value#>'],'<#=D2.value_filename#>');
(3)点击下载时即会自动下载文件,并且下载后文件名为上传时的文件名。图像表元也是一样的设置方式,此处不再赘述。
好处:使用下载函数实现附件图像下载。此方法的好处是在点击表元时可以下载对应的附件,blob流字段不参与 sql 拼写,节约内存。
下载附件函数说明
  1. _showfile(blobfield,[keyfield1,keyfield2],[keyvalue1,keyvalue2],destfile,format)
复制代码
参数说明:
·       blobfield 表示需要下载附件的大字段的名;
·       [keyfield1,keyfield2],[keyvalue1,keyvalue2]表示下载附件所需要的关键字以及关键字的值,下载附件时sql where条件中需要;
·       destfile 附件下载时 显示的文件名;
·       format 默认为空 ,表示附件的压缩方式,目前暂不用,用来扩展。


在附件下载后可能遇到问题是,我下载的文件怎么是未知文件?为什么没有后缀?或者是能不能和上传时使用同样的文件名... ...
这时候就需要下载函数_showfile中的destfile参数发挥作用了。如果不指定destfile参数值,下载附件后需要手动更改文件扩展名,并且没有文件名,不方便查看。
另外是直接在函数中指定一个字符串作为文件名,如a.doc等,下载后所有的文件不管当初上传时是什么文件类型都会时这个文件名和文件类型,显然这种方式是不能“随机应变”。

当然,还有一种方式,是使用宏表达式来实现按照上传时的名称命名下载后的文件,这就要用到数据库中附件摘要字段中的filename,其用法是在做分析表时,增加一列C作为文件名存放列,直接拾取摘要字段,设置其显示表达式显示文件名称,表达式如下:
  1. self.value_filename
复制代码
函数中文件名称参数以宏表达式的方式获取,如下:
  1. _showfile('B0.A_19',['bbq_','userid_'],['<#=A1.value#>','<#=B1.value#>'],'<#=C1.value_filename#>');
复制代码
或者是
  1. _showfile('B0.A_19',['bbq_','userid_'],['<#=A1.value#>','<#=B1.value#>'],'<#=C1.txt#>');
复制代码
扩展说明
在i 采集数据时还有一种类型为备注型字段,它在数据库中的字段类型为clob类型,这个类型的分析相对于blob类型的字段就相对简单了。可直接拾取该字段,设置表元数据类型为字符型或者是备注型即可展示出数据。


最近看过此主题的会员

zly_2960

v笑向前走

Ly_LJY

帆用户

DJY

esen_4TU4L1BV1N

esen_4T0QE24CI188

esen_4O6N6U6ZN2

ajsdhkjfhdasf

2个回答

只看楼主

辰哥 管理员

发表于2020-6-18 17:35

只看该作者

取消 关注该作者的回复

沙发

非常棒的分享,替各位薏米谢谢大神!

niuyi688988 初学数据Lv2

发表于2021-9-27 16:42

只看该作者

取消 关注该作者的回复

板凳

下载下来是空的为啥?

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号