小编我本着先客户之忧而忧的服务宗旨,思前想后仍是以为以前的《把 Excel 透视表搬到 WEB 上》和《给一句 SQL 就能作多维分析》对多维分析的介绍不太够,因此今天特意再来唠唠如何对程序数据集作多维分析。java
API是应用程序编程接口,程序开放API就是开放接口,开放后接口返回的程序数据就能够被其余程序调用了。web
问题来了,在俺们多维分析中怎样才能对API接口返回的程序数据作分析呢?sql
简单,实际上是分分钟搞定的事儿!编程
最最重要的前提,要麻烦程序猿自定义类,把要返回的结果集封装在一个静态方法中json
本例小编本身写了个api,为方法传入txt文件路径,而后将txt内容以文本字符串返回。api
test.txt文件内容:缓存
自定义类TxtTest:服务器
package api; import java.io.*; public class TxtTest { //为方便对本方法的调用,此处需为静态方法 //经过对方法传入txt文件路径和是否有标题(true/false)两个参数,将txt内容以文本字符串返回 public static String readTxttoString(String pathName,boolean hasTitle) { final BufferedReader bfr; final String encoding = "gbk"; final File file = new File(pathName); String lineTxt=null; StringBuffer buf = new StringBuffer(); InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding); bfr = new BufferedReader(read); while((lineTxt=bfr.readLine())!=null){ buf.append(lineTxt+"\n"); } return buf.toString(); } }
将TxtTest.class文件放入WEB应用能加装到的类路径下,本例以安装包自带的demo应用为例,所以该文件可放入[安装根目录]\report\web\webapps\demo\WEB-INF\classes\api下。app
在集算器设计器中新建 txtTest.dfx,添加参数和网格内容:webapp
A | |
1 | =invoke(api.TxtTest.readTxttoString,pathName,hasTitle) |
2 | =A1.import@tq() |
3 | return A1 |
使用invoke函数,调用步骤一中自定义JAVA类中的静态方法,并为方法传入参数。 保存后将dfx文件放至[安装根目录]\report\web\webapps\demo\WEB-INF\files\dfx目录下。至于为啥要把文件放到这儿,先卖个关子,后面再解释。
集算器用的invoke函数主要是用来调用用户自定义函数的,不只能像上面例子这样返回字符串,还能够返回其余多种类型,不过必须使用可与集算器匹配的数据类型,不然有可能在展示或调用时出现错误。集算器中经常使用数据类型对应的Java类型以下:
整数 | java.lang.Integer |
长整数 | java.lang.Long |
浮点数 | java.lang.Double |
长实数 | java.math.BigInteger |
实数 | java.lang.Number |
布尔型 | java.lang.Boolean |
字符串 | java.lang.String |
日期 | java.sql.Date |
时间 | java.sql.Time |
日期时间 | java.sql.TimeStamp |
二进制数据 | byte[] |
多维分析中添加 dfx 文件数据集
数据集窗口你们必定都不陌生,多维分析与外部API之间的通道就是经过它指定DFX文件完成的。
选择dfx文件时是否是发现步骤三中建立的dfx被列出来了,来龙去脉这下明白了吧,猜对了,这个列表默认就是把[安装根目录]\report\web\webapps\demo\WEB-INF\files\dfx这个目录下的全部dfx列出。想要修改这个目录路径也是ok的,在 "[demo 应用根目录]/raqsoft/guide/jsp/olap.jsp" 中添加 JS API 进行指定,以下图所示:
选择dfx文件,传递参数值,点击查询数据,缓存入文件保存,数据集就建立完成了!
接下来立刻又到了每日开心一刻了,任性拖拽无人阻拦,哈哈!
点击【添加报表】,选择数据集,填写报表名称【肯定】
添加报表后,数据集返回的表结构指标就这样赤裸裸的出来了,接下来就能够拖拖拽拽查看指标内容了。咋样,有没有发现其实这种调用JavaAPI的程序数据集也挺好使,只要先把自定义类作好就至关于完成一大半了,集算器dfx只是起到了个中间调用的做用。
API返回的程序数据不只能够是txt文本串,还能够是json串。关于json串在多维分析的调用咱们也有攻略帮您解决,其实很简单,API里的内容由您本身作主,只要最终返回的是json串就行,这里主要就是变通一下步骤三dfx文件中对json串的处理。
dfx内容做以下修改:
A | |
1 | =invoke(api.TxtTest.readTxttoString,pathName,hasTitle) |
2 | =json(A1) |
3 | return A2 |
访问多维分析页面,添加dfx文件类型的数据集。
聪明的你,看到这里应该什么都明白了吧?其实换汤不换药,重点都在dfx文件上,只是API返回的类型不一样,在dfx中处理方法不一样罢了。
提起Webservice必定都不陌生,一款跨编程语言和跨操做系统平台的远程调用技术。关于Webservice的使用原理小编就不班门弄斧在高手面前显摆了,相信做为资深程序猿的您早已对它了如指掌了吧,哈哈
那在咱们多维分析里是否能调用这种远程接口呢?答案必须是确定的,固然能!
咱们已经作了全方位考量,不只能调用JavaApi还能调用Webservice接口,方法和JavaApi的调用大体类同,具体是哪里相同哪里类同请看下例分晓。
下面以手机号码归属地查询做为示例,介绍对WebService的调用(本例使用的WebService服务是国内官方的手机号码归属地查询所在的服务):
在集算器设计器中新建 webTest.dfx,添加网格内容
A | B | C | |
1 | =[18810690043,15207579527,13018617766, 13713309396,15810200987,13168889653, 13501321234,13003110868,13310006279, 13003113520,18718391001,13168889659] | //手机号 | |
2 | =ws_client("http://ws.webxml.com.cn/WebServices/ MobileCodeWS.asmx?WSDL") | //访问国内手机号码归属地查询WEB服务 | |
3 | =create(手机号,省份,城市,卡类型) | //建立序表 | |
4 | for A1 | //使用for循环,逐个查询手机号的归属地等信息 | |
5 | =ws_call(A2,"MobileCodeWS":"MobileCodeWSSoap": "getMobileCodeInfo",A4:"mobileCode") | //传入手机号,从服务器查询手机号归属地 | |
6 | =B5.split@1(":")(2).split(" ").insert(1,A4) | ||
7 | =A3.record@i(B6,0) | //将查询结果做为记录插入A3序表中 | |
8 | return A3 |
保存后将 dfx 文件放至[安装根目录]\report\web\webapps\demo\WEB-INF\files\dfx目录下。
多维分析中添加 dfx 文件数据集
选择dfx文件,传递参数值,点击查询数据,缓存入文件保存,数据集就建立完成了!
dfx下拉列表里的文件是从哪里读取的,还用小编再提一下吗?嘻嘻,巩固下记忆吧,这个列表默认就是把[安装根目录]\report\web\webapps\demo\WEB-INF\files\dfx这个目录下的全部dfx列出。不过这个路径也是能够修改的,修改方法和JavaApi里使用时的修改方法同样。
数据集建立完成后,接下来就是拖拽指标进行分析了
点击【添加报表】,选择数据集,填写报表名称【肯定】
将指标拖拽到右侧数据显示区,这样一来,从WebService服务器获取的手机归属地的信息就展示在咱们眼前了,是否是很方便呢?
上面两种程序数据集在多维分析使用时都是经过界面数据集菜单配置的dfx数据集,其实还能够经过Tag标签添加。
在Tag标签的使用与以前讲的SQL数据集大同小异,只是属性略有不一样。
Tag标签添加dfx数据集:
<raqsoft:analysev2 dfxFile="WEB-INF/files/dfx/txtTest.dfx" //指定相对于web根目录的dfx文件 dfxParams="pathName='D:/2.json';" //dfx所需的参数 … … ></raqsoft:analysev2>
在Tag标签中添加dfx数据集,访问多维分析页面时会将该数据集默认做为初始数据集,并直接将结果集以明细的形式展示在页面中。
叮叮叮,关于JavaApi和Webservice程序接口的访问到此就介绍完了,经过对本篇文章的学习,必定更能领会咱们多维分析的妙处了吧。使用dfx数据集访问程序数据集是直接借用集算器函数轻松引入程序数据集结果,固然,除此以外还能利用集算器的计算能力,对程序数据集的结果作二次处理,最终在界面上作拖拽分组、聚合、过滤等等数据分析动做。
可是,我要说可是,这里都用到了集算器的脚本,而自写脚本的功能是不包含在基本润乾报表中的,也就是说须要花钱滴。嗯,听起来有点悲伤,不过,认真关注乾学院,后面咱们会主动提供办法让你绕过这个检查,仍是不花钱,必定要关注,不可错过哟!
其实两种程序接口类型在多维分析的使用中是有必定的共同点的,下图就能直观的让咱们看到区别:
JavaAPI和WebService两种程序数据集上的多维分析都是使用的dfx数据集,不一样点是dfx文件中使用的函数不一样,这是关键点!JavaApi时是先将程序接口进行封装,而后在集算器中使用invoke函数调用自定义类。WebService时则是直接使用函数远程访问官方手机号码归属地查询所在的服务器获取手机号归属地数据。
其实,若是想实现高性能还能够直接用二进制格式,但就须要学习集算器的数据类型及相关API了。此处就不过多介绍了。仍是那句话,更多关于集算器的学习可参考帮助文档《函数参考》、《教程》。
好了,本篇文章虽然讲完了,但它却已成为咱们之间交友学习的开端,还在犹豫什么,快来加入乾学院吧,带你了解更腻害的多维分析。
对这方面感兴趣的同窗能够到乾学院上观看免费商业智能课程。