Cross link analysis is very powerful in data analysis. Many useful information is uncovered by finding and building a link or an association between the entities.
To perform data analysis through association discovery method, the user generally need to perform two steps.
The first step is to build the association that the user is interested in with the general syntax looks like following:

BUILD ASSOCIATION association_name (attribute) BY hint_attribute FROM source table_name {filter: filter condition}

The attribute within the association_name specifies the link (entities within the table) that the user wants to create the association with. The hint_attribute is the basis of the link from which the total count of each association is generated. Therefore, this association contains information on total count matrix of each attribute pair and exactly which hint attribute contribute to the corresponding attribute pair.

After the association is built, the user can query data from the association he just created with GET statement. The general syntax for such query is following:

GET ACTION(entity) FROM association_name

ACTION is the specific information that the user wants to get from the association. The available ACTION commands in the GET statement are FREQ (frequency), PROB(probability) and FACT. entity within ACTION specifies the items to be searched in the association.

Finally, the user can store the search result into a table. The general syntax for this is:

BUILD TABLE table_name AS (GET statement)

Let's apply the association scheme to ABC company's business. As holidays season approaches, the staff of ABC company would like to give out special bundle deal to its members. The staff will be interested to know which products bundling will be more effective. He can first build the association between two products based on customers.

BUILD ASSOCIATION prod2prod (Product.name) BY Customer.id FROM sales

The staff of ABC company is able to check the full matrix of frequency of each product pair within prod2prod association with a GET FREQ statement like this

GET FREQ() FROM prod2prod

Below is the snap shot of such result:

Since GET FREQ() extracts all the data within the association, the information may be too much for the staff. Alternatively, he may also specify the product name in his search within the association. If the staff of ABC company wants to know specifically which products bundle with Tropical Berry may have the best sales result, he may do following action with Get Statement.

GET FREQ('Tropical Berry') FROM prod2prod

The staff will get each total count of Tropical Berry bundle with the other products from above statement.

Since above query may return a long list of information, the staff may further organize above query with specific quantifier or instruction such as following:

GET TOP ALL FREQ('Tropical Berry') FROM prod2prod -- Returning all results and list from top

GET 10 FREQ('Tropical Berry') FROM prod2prod -- Returning 10 results

GET TOP 10 FREQ('Tropical Berry') FROM prod2prod -- Returning top 10 results

GET 10% FREQ('Tropical Berry') FROM prod2prod --- Returning 10% of the results

GET TOP 10% FREQ('Tropical Berry') FROM prod2prod -- Returning first 10% of the results

GET BOTTOM 10 FREQ('Tropical Berry') FROM prod2prod -- Returning bottom 10 results

GET BOTTOM 10% FREQ('Tropical Berry') FROM prod2prod -- Returning bottom 10% of the results

Below is the outcome of GET TOP 10 FREQ('Tropical Berry') FROM prod2prod

Furthermore, the staff of ABC company can also apply a filter condition to narrow down the Tropical Berry bundle pair.
For example, he can filter to get only those frequency above 2 with this command:

GET FREQ('Tropical Berry') >2 FROM prod2prod

The result only shows two pairs.

Alternatively, if the staff of ABC company wants to propose a special bundle deal to product managers of Tropical Berry and Potato Crisps, he can pull out the past record of frequency of buying both Tropical Berry and Potato Chips by issuing a joining command which has the similar effect as "A" AND "B". Below is the example:

GET FREQ('Tropical Berry' to 'Potato Crisps') FROM prod2prod

The result is shown below:

Finally, if ABC company staff is curious about whether Tropical Berry is a good choice for the bundle option in the first place. He can search for the past total frequency of any products with Tropical Berry using following command:

GET TOTAL FREQ('Tropical Berry') FROM prod2prod

The result is the summation of all products associate with Tropical Berry like this:

Instead of actual frequency, the staff of ABC company may want to know the probability distribution of each product association pair. In this case, he may use GET PROB statement with syntax and rules that are the same as GET FREQ above. For example if he is curious about which product maybe better bundling with Fanta Orange probability wise, he can issue following command:

GET TOP 10 PROB('Fanta orange') FROM prod2prod

He will get a table that looks like below:

Note
GET PROB ('A' to 'B') FROM association and GET PROB ('B' to 'A') FROM association may get two different values because the base (distinct count) used in the probability calculation (A vs B) may be different.

If after the promotion period, ABC company staff wants to draw a prize for people who specifically buying the special bundle of Tropical Berry and Potato Crisps, he may do a quick search on which customers actually buying such bundle with following command:

GET FACT('Tropical Berry' to 'Potato Crisps') FROM prod2prod

The customers who bought such bundle will be shown.

During and after the analysis, ABC company staff can always store the association finding into another table for future use. Following is the example:

BUILD TABLE top10 AS (GET TOP 10 FREQ() FROM prod2prod)

A table named top10 will be generated as below:

Auxiliary Clauses

Filter:

The users can place a filter condition in the auxiliary clauses while building an association. For example, if staff of ABC company wants to target his search in male gender, he may build an association likes following:

BUILD ASSOCIATION brand2brand_male(Product.brand) BY Customer.name FROM sales {filter: Customer.gender='Male'}

Prob:

The default setting for GET PROB statement is the probability distribution normalized by the total count of hint_attribute. The user can also choose cosine similarity as the option for the normalization method.

Example:

GET TOP 10 PROB('Fanta orange') FROM prod2prod { prob: cosine }

Sortby:

The user can specify how to arrange the result of the query in the GET statement within auxiliary clause by using Sortby phrase.

Example:

GET PROB('Tropical Berry') FROM prod2prod {sortby: freq}
Note
freq, prob and cosine can be used in sortby auxiliary clauses.