怎样使用 Salesforce 的数据做更多统计查询
使用官方或第三方封装的接口,通过官网的SOQL或SOSL语言把数据取出来,就可以随心所欲的做统计查询了。方法一,用JDBC\ODBC驱动取数,比如ascendix salesforce-jdbc、informatica DataDirect odbc,再写入数据库,最后用SQL查询,好处是可以利用SQL强大的计算能力,缺点是入库过程繁琐,架构复杂,实时性差。方法二,用驱动或报表内置的取数模块直接取数,再用报表的向导、拖拽、脚本等工具立刻进行统计查询,比如tableau\cognos\power BI\Excel,这种方法的好处是架构简单时效性强,但计算能力非常弱。
第三种方法是用计算语言取数并计算,比如Python和集算器SPL。这种方法兼具前两种方法的优点,不仅架构轻便实时性好,而且计算能力不亚于SQL,其中集算器计算能力更强,集成性更好。
SPL封装了简单易用的取数函数,可以通过SQQL和SOSL从Salesforce取数。比如用SQOL从Lead表取数,只需用json文件保存Salesforce账号(username/password/api_token),再执行下面的SPL脚本。
A |
|
1 |
=sf_open("D:\\conf\\user.json") |
2 |
=sf_query(A1,"/services/data/v51.0/query","Select Id,CaseNumber,Subject From Case where Status='New'") |
3 |
=sf_close(A1) |
SPL内置丰富的计算函数,提供了不亚于SQL的计算能力。
A |
B |
|
3 |
… |
/省略取数过程 |
4 |
=A2.select(salary>8000 && salary<10000) |
/过滤 |
5 |
=A2.sort(salary) |
/排序 |
6 |
=A2.groups(deptid;sum(salary),avg(salary)) |
/分组汇总 |
7 |
=join(B2,cat;A2,cat).groups(_1.title, _2.path; sum(_1.amount)) |
/关联计算 |
SPL提供了通用的JDBC/ODBC接口,容易被高级语言和报表工具集成。比如在JAVA中以存储过程的形式调用SPL脚本文件,只需如下代码:
…
Class.forName("com.esproc.jdbc.InternalDriver");
Connection conn =DriverManager.getConnection("jdbc:esproc:local://"); CallableStatement statement = conn.prepareCall("{call run(?,?)");
…
再比如被BIRT报表调用:
SPL具备灵活的计算语法,很多对SQL和存储过程来说难以实现的计算,SPL都可以轻松实现。比如:找出销售额累计占到一半的前n个大客户,并按销售额从大到小排序:
A |
B |
|
3 |
… |
/取数 |
4 |
=A2.sort(amount:-1) |
/销售额逆序排序 |
5 |
=A4.cumulate(amount) |
/计算累计序列 |
6 |
=A5.m(-1)/2 |
/最后的累计即总额 |
7 |
=A5.pselect(~>=A6) |
/超过一半的位置 |
8 |
=A4(to(A7)) |
/按位置取值 |
SPL提供了专业的IDE ,不仅具备完整的调试功能,还能随时观察每一步的计算结果,适合代码较长或逻辑复杂的计算:
可以看到,SPL具有方便的取数接口、通用的集成接口、强大的计算能力,可以使用Salesforce的数据轻松地实现更多的统计查询。
英文版