A fan trap is a type of join path between three tables when a “one-to-many” join links a table which is in turn linked by another “one-to-many” join. The fanning out effect of “one-to-many” joins can cause incorrect results to be returned when a query includes objects based on both tables.
A simple example of a fan trap is shown below:
When you run a query that asks for the total number of car models sold by each model line, for a particular customer, an incorrect result is returned as you are performing an aggregate function on the table at the “one” end of the join, while still joining to the “many” end.
Using the schema above, a Web Intelligence user runs the following query:
The following results are returned:
This result is correct. However, the end user adds the dimension Model ID to the query as follows:
The following report is created with the returned results:
The Sale Value aggregate appears twice. Once for each instance of Model_ID. When these results are aggregated in a report, the sum is incorrect. The fan trap has returned a Cartesian product. Wendy bought two cars for a total of $57,092.00, and not 114,184.00 as summed in the report. The inclusion of Model_ID in the query, caused the SaleValue to be aggregated for as many rows as Model_ID. The fan trap using dimension objects in the query is solved by using an alias and contexts. The following schema is the solution to the fan trap schema:
The original query which returned the Cartesian product for Wendy Craig, now returns the following table when run with the above solution: