怎样使用 Salesforce 的数据做更多统计查询

 

使用官方或第三方封装的接口,通过官网的SOQLSOSL语言把数据取出来,就可以随心所欲的做统计查询了。方法一,用JDBC\ODBC驱动取数,比如ascendix salesforce-jdbcinformatica DataDirect odbc,再写入数据库,最后用SQL查询,好处是可以利用SQL强大的计算能力,缺点是入库过程繁琐,架构复杂,实时性差。方法二,用驱动或报表内置的取数模块直接取数,再用报表的向导、拖拽、脚本等工具立刻进行统计查询,比如tableau\cognos\power BI\Excel,这种方法的好处是架构简单时效性强,但计算能力非常弱。

第三种方法是用计算语言取数并计算,比如Python和集算器SPL。这种方法兼具前两种方法的优点,不仅架构轻便实时性好,而且计算能力不亚于SQL,其中集算器计算能力更强,集成性更好。

SPL封装了简单易用的取数函数,可以通过SQQLSOSLSalesforce取数。比如用SQOLLead表取数,只需用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报表调用:

1png

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 ,不仅具备完整的调试功能,还能随时观察每一步的计算结果,适合代码较长或逻辑复杂的计算:

IDEpng

可以看到,SPL具有方便的取数接口、通用的集成接口、强大的计算能力,可以使用Salesforce的数据轻松地实现更多的统计查询。