Note: This release is in preview. Features described here don’t become generally available until the latest general availability date that Salesforce announces for this release. Before then, and where features are noted as beta, pilot, or developer preview, we can’t guarantee general availability within any particular time frame or at all. Make your purchase decisions only on the basis of generally available products and features.
QueryBuilder Class
Namespace
wave
Usage
Use QueryBuilder and its associated classes, Wave.ProjectionNode and Wave.QueryNode, to incrementally build your SAQL statement. For example:
1public static void executeApexQuery(String name){
2 Wave.ProjectionNode[] projs = new Wave.ProjectionNode[]{
3 Wave.QueryBuilder.get('State').alias('State'),
4 Wave.QueryBuilder.get('City').alias('City'),
5 Wave.QueryBuilder.get('Revenue').avg().alias('avg_Revenue'),
6 Wave.QueryBuilder.get('Revenue').sum().alias('sum_Revenue'),
7 Wave.QueryBuilder.count().alias('count')};
8
9 ConnectApi.LiteralJson result = Wave.QueryBuilder.load('0FbD00000004DSzKAM', '0FcD00000004FEZKA2')
10 .group(new String[]{'State', 'City'})
11 .foreach(projs)
12 .execute('q');
13 String response = result.json;
14}Examples
QueryBuilder is the core of this first phase of the CRM Analytics Apex SDK, so let’s take a closer look. Here’s a simple count query.
1Wave.ProjectionNode[] projs = new Wave.ProjectionNode[]{Wave.QueryBuilder.count().alias('c')};
2String query = Wave.QueryBuilder.load('datasetId', 'datasetVersionId').group().foreach(projs).build('q');The resulting SAQL query looks like this:
1q = load "datasetId/datasetVersionId";
2q = group q by all;
3q = foreach q generate count as c;Here’s a more complex example that uses a union statement.
1Wave.ProjectionNode[] projs = new Wave.ProjectionNode[]{Wave.QueryBuilder.get('Name'), Wave.QueryBuilder.get('AnnualRevenue').alias('Revenue')};
2Wave.QueryNode nodeOne = Wave.QueryBuilder.load('datasetOne','datasetVersionOne').foreach(projs);
3Wave.QueryNode nodeTwo = Wave.QueryBuilder.load('datasetTwo', 'datasetVersionTwo').foreach(projs);
4String query = Wave.QueryBuilder.union(new List<Wave.QueryNode>{nodeOne, nodeTwo}).build('q');The resulting SAQL query has two projection streams, qa and qb.
1qa = load "datasetOne/datasetVersionOne";
2qa = foreach q generate Name,AnnualRevenue as Revenue;
3qb = load "datasetTwo/datasetVersionTwo";
4qb = foreach q generate Name,AnnualRevenue as Revenue;
5q = union qa, qb;QueryBuilder Methods
The following are methods for QueryBuilder.
load(datasetID, datasetVersionID)
Signature
public static wave.QueryNode load(String datasetID, String datasetVersionID)
Parameters
Return Value
Type: wave.QueryNode
get(projection)
Signature
public static wave.ProjectionNode get(String proj)
Parameters
-
proj:
Type: String
The name of the column to query.
Return Value
Type: wave.ProjectionNode
union(unionNodes)
Signature
global static Wave.QueryNode union(List<Wave.QueryNode> unionNodes)
Parameters
-
unionNodes:
Type: List<wave.QueryNode>
List of nodes to combine.
Return Value
Type: wave.QueryNode
cogroup(cogroupNodes, groups)
Signature
global static Wave.QueryNode cogroup(List<Wave.QueryNode> cogroupNodes, List<List<String>> groups)
Parameters
-
cogroupNodes:
Type: wave.QueryNode
List of nodes to group.
-
groups:
Type: String
The type of grouping.
Return Value
Type: wave.QueryNode