经验教程|给一句 SQL 就能做多维分析( 二 )
文章图片
好了 , 通过上面的学习有没有发现其实数据集全是由 SQL 语句决定的 , 这里的 SQL 语句只要符合 SQL 标准语法就行 , 比如可以通过 AS 对字段重命名 , LEFT JOIN 多表关联实现名称的显示等等 , 总之一句话:一切向 SQL 看齐!
利用 Tag 标签添加 SQL 数据集
除了上述这种在界面上添加 SQL 数据集的方式外 , 其实还可以通过 Tag 标签添加 。
SQL 数据集和文件数据集在 Tag 标签的使用大同小异 , 只是属性略有不同 。
Tag 标签添加 SQL 数据集:
<raqsoft:analysev2
dataSource="dqldemo" //指定SQL需要使用的物理数据源
sql="select * from EMPLOYEE" //SQL语句
… …
>
在 Tag 标签中添加 SQL 数据集 , 访问多维分析页面时会将该数据集默认作为初始数据集 , 并直接将结果集以明细的形式展现在页面中 。
文章图片
注重细节的同学是不是又发现了端倪?怎么使用 Tag 标签添加数据集时没有点击【查询数据 , 缓存入文件】结果也能正常展现呢?难道这两种添加数据集的方式还有什么不同吗?
其实这两种方式的底层对数据的处理机制是一样的 , 唯一的不同点就是 Tag 标签添加数据集可以理解为是直接为分析页面设置了初始数据集 , 这个时候程序会自动生成临时文件 , 然后将计算结果存入 , 这样一来就不用劳您大驾再动手缓存了 。 不过如果您还需要继续在页面上对初始数据集修改或者添加新的数据集 , 那就还得按最开始讲的那样儿 , 每次修改 SQL 语句后 , 都需要点击 【查询数据 , 缓存入文件】 重新生成了临时文件了 。 默认临时文件命名规则是以时间毫秒数组合而成 。
怎么样 , SQL 数据集在俺自己的应用程序里用起来是不是也超便捷?不论是在页面数据集菜单中添加还是在 Tag 标签里添加 , 其实都是先让集算器通过 SQL 取数 , 然后将返回的结果集缓存入临时文件 , 之后在页面上的多维分析就都是基于这个临时数据文件取数了 。 这样一来 , 借用集算器的计算能力 , 在界面上就能做拖拽分组、聚合、过滤等等数据分析动作了 。
关于缓存文件的生命周期小编还是要多唠叨几句 , 简单分为如下三点:
1、当缓存文件的父目录路径中包含”temp”字样时 , 如:/Raqsofttemp/.txt 或 /temp/.txt , 程序会在 Session 超时时自动清理该缓存文件
2、生成缓存文件时 , 如果发现缓存文件不存在 , 则会自动根据数据集的配置重新生成缓存文件
3、如果缓存文件路径中没有 temp 字样 , 则不会对缓存文件做任何删除处理 , 由客户的系统自己管理这些缓存文件的生命周期
缓存文件的后缀是.txt , 聪明的你肯定就能猜润乾报表是用 TXT 文件作为中介的 , 但 TXT 文件的性能有点差 , 而且数据类型也不那么精确 , 个别情况会出点小错 。 其实从 SQL 中读出来的数据已经是二进制格式 , 再转成文本保存有点费时费力不讨好 。
那么 , 还能怎么弄?
润乾报表提供了二进制格式的缓存文件!!!
二进制缓存文件提升性能
打开 [WEB 应用根目录]/raqsoft/guide/jsp/olap.jsp 添加如下 JS API 脚本:
<script>
guideConf.dataFileType = 'binary'; //binary是二进制文件 , 会以游标方式读取 , 能支持超出内存的数据集;该属性的默认为text文本文件类型 。
</script>
好了 , 设置完了 , 再缓存时就是以二进制文件的类型保存临时文件了 。
咋样 , 是不是超简单?超便利?超喜欢?
不过话又说回来 , 上面这种缓存入文件的方式对于数据量不大的情况没问题 , 但有时候我们希望利用数据库的计算能力(毕竟数据库还可以集群分布等) , 那又该怎么办呢?
不要慌 , 润乾报表帮你忙!
非缓存 SQL 数据集
在 JSP 脚本中添加不需要缓存数据的 SQL 数据集 。 操作起来也不难 , 只先敲上一个做原始查询的 SQL 语句就行 。
将 SQL 语句传递给数据库做查询 , 查询后分析界面会直接将结果集中的字段列出 , 进行拖拽就可以了 。
下面以一个多表查询做举例 , 在 [demo 应用根目录]/raqsoft/guide/jsp/olap.jsp 添加 JS API 进行设置 。
<script>
guideConf.sqlId="<%=sqlId%>";//指定sqlid
var sqlDatasets = [
{
sqlId:"sqlId1" //指定数据集名称 , 不可重复
,dataSource:"dqldemo" //指定SQL语句所使用的数据源
,sql:"SELECT EMPLOYEE.Name as 雇员姓名,DEPARTMENT.NAME as 部门,EMPLOYEE.COUNTRY as 国家 FROM EMPLOYEE LEFT JOIN DEPARTMENT ON EMPLOYEE.DEPTID=DEPARTMENT.ID" //指定数据集SQL语句
,fields:null
},
… …
]
… …
</script>
脚本添加完成后 , 访问分析页面时只需要在 URL 里为 sqlId 参数传入数据集名称 , 如下图所示 , 使用名称为 sqlId1 的数据集:
推荐阅读
- 经验教程|抖音怎么卖货?
- 今日趣闻|郑恺摇下车窗打招呼,当听到粉丝的第一句话后,瞬间黑脸摇起车窗
- 经验教程|有钱说赢销:微信小商店是什么?功能有哪些?如何申请开通?
- 店长|黄晓明又开始假唱,赵丽颖看不下去,一句话直怼重点,弹幕:说得好
- 电视剧|《以家人之名》陈婷回归,一句话说懵凌和平,观众:实在太气人
- 庄子|微信怎么发长视频,微信朋友圈发5分钟长视频教程!
- 经验教程|雅思学渣的备考干货宝藏!你就是下一匹黑马
- 重庆|醉驾男子藏在草丛“暗中观察”,面对交警询问,一句话“露出马脚”!
- 经验教程|肥乡农村小子被北大录取!,高分“诀窍”强力来袭!
- 神句|繁星吟游一句话火了,字数虽不多,却成00后表白神句
