报表工具怎样使用 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,以及不同数据源/数据库之间的混合计算。