报表工具怎样使用 Salesforce 的数据

 

很多数报表工具没有现成的接口访问Salesforce,只能在自定义数据集里硬写代码,难度非常大。有些报表工具封装了相应的接口,可以通过SOQL\SOSL访问Salesforce。这种办法虽然可以降低取数难度,但不能解决后续的计算,除非继续硬写代码。

更好的办法是用JAVA开源计算类库SPL,既有方便的取数函数,又有强大的计算能力,还有易于被报表集成的JDBC接口。

SPL内置方便易用的取数函数,可以通过SOQL\SOSL访问Salesforce。比如从Lead表取数,只需用json文件保存Salesforce账号信息,再执行下面的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)
4 return   A2

 

SPL内置丰富的计算函数,可以用简单直观的语法计算多层数据,从而避免繁琐的硬编码。比如取得订单数据后进行区间查询,其中p_startp_end是参数:


A
3 …//取得订单,关闭连接
4 =A2.select(Amount>p_start   && Amount<=p_end)

SPL提供了JDBC驱动,可以像普通RDB一样被报表工具集成。对于上面的SPL代码,先存为脚本文件,再在报表工具里以调用存储过程的形式调用脚本文件名。以Birt报表为例,可写作:

{call intervalQuery(? , ?)}

再举几例:


A B
3
4 =A2.select(Amount>1000   && like(Client,\"*S*\")) //模糊查询
5 =A2.sort(Client,-Amount)" //排序
6 =A2 .id(Client) //去重
7 =A2.groups(year(OrderDate);sum(Amount)) //分组汇总
8 =orcl.query@x("select   * from employees") //Oracle数据
9 =join(A2:O,SellerId;A8:E,EId)
  .new(O.OrderID, O.Client,O.Amount,E.Name,E.Gender,E.Dept)
//关联Oracle

 

SPL提供了标准SQL语法,除了wheregrouporder,也包括from子查询、with子查询、joinSalesforce不支持的功能。比如区间查询可以改写为下面的SQL语句:


A
1 =sf_open("D:\\conf\\user.json")
2 =sf_query(A1,"/services/data/v51.0/query","Select   OrderID,Client,Amount,OrderDate from Orders")
3 =sf_close(A1)
4 $select   * from {A2} where Amount>? && Amount<=?; p_start, p_end

更多例子参考在文件上使用 SQL 查询的示例

 

SPL具有强大的计算能力,可简化分步计算、有序计算、分组后计算等逻辑较复杂的计算,很多SQL/存储过程难以实现的计算,用SPL解决起来就很轻松。比如,找出销售额累计占到一半的前n个大客户,并按销售额从大到小排序:


A B
1  /取数据
2 =A1.sort(amount:-1) /销售额逆序排序
3 =A2.cumulate(amount) /计算累计序列
4 =A3.m(-1)/2 /最后的累计即总额
5 =A3.pselect(~>=A4) /超过一半的位置
6 =A2(to(A5)) /按位置取值

 

SPL提供了专业的IDE,具备完整的调试功能,允许以表格的形式观察每一步的计算结果,适合开发逻辑较复杂的计算。

IDEpng

除了Salesforce之外,SPL还支持CSV/XLS/WebService XML/Restful JsonMongoDBHadoopredisElasticSearchCassandra等多种NoSQL,以及不同数据源/数据库之间的混合计算。