Hierarchical Queries


In this section I present two example queries that use the two hierarchical paths of the month dimension. The first query, shown in Listing 16.4, drills on the year-quarter-month path. This query is similar to the drilling query in Chapter 15, “Dimension Hierarchies” except that this one queries the month_end_sales_order_fact table, whereas the one in Chapter 15 queried the sales_order_fact table.

Listing 16.4: Quarter path drilling query

image from book
 /*****************************************************************/ /*                                                               */ /* quarter_path.sql                                              */ /*                                                               */ /*****************************************************************/ USE dw; SELECT   product_category , time , order_amount , order_quantity FROM ( ( SELECT   product_category , year , 1 month , year time , 1 sequence , SUM (month_order_amount) order_amount , SUM (month_order_quantity) order_quantity FROM   month_end_sales_order_fact a , product_dim b , month_dim c WHERE     a.product_sk = b.product_sk AND a.month_order_sk = c.month_sk AND year = 2006 GROUP BY   product_category , year ) UNION ALL ( SELECT   product_category , year , month , quarter time , 2 sequence , SUM (month_order_amount) order_amount , SUM (month_order_quantity) order_quantity FROM   month_end_sales_order_fact a , product_dim b , month_dim c WHERE     a.product_sk = b.product_sk AND a.month_order_sk = c.month_sk AND year = 2006 GROUP BY product_category, year, quarter ) UNION ALL ( SELECT   product_category , year , month , month_name time , 3 sequence , SUM (month_order_amount) order_amount , SUM (month_order_quantity) order_quantity FROM   month_end_sales_order_fact a , product_dim b , month_dim c WHERE     a.product_sk = b.product_sk AND a.month_order_sk = c.month_sk AND year = 2006 GROUP BY   product_category , year , quarter , month ) ) x ORDER BY   product_category , year , month , sequence ; /* end of script                                                 */
image from book

Run the script in Listing 16.4 using this command.

 mysql> \. c:\mysql\scripts\quarter_path.sql

Here is the query result.

 Database changed +------------------+----------+--------------+----------------+ | product_category | time     | order_amount | order_quantity |  +------------------+----------+--------------+----------------+ | Monitor          | 2006     |      8500.00 |           NULL | | Monitor          | 1        |      1000.00 |           NULL | | Monitor          | January  |      1000.00 |           NULL | | Monitor          | 2        |      2500.00 |           NULL | | Monitor          | April    |      2500.00 |           NULL | | Monitor          | 3        |      4000.00 |           NULL | | Monitor          | July     |      4000.00 |           NULL | | Monitor          | 4        |      1000.00 |           NULL | | Monitor          | October  |      1000.00 |           NULL | | Storage          | 2006     |     15000.00 |           NULL | | Storage          | 1        |      3000.00 |           NULL | | Storage          | February |      1000.00 |           NULL | | Storage          | March    |      2000.00 |           NULL | | Storage          | 2        |      6500.00 |           NULL | | Storage          | May      |      3000.00 |           NULL | | Storage          | June     |      3500.00 |           NULL | | Storage          | 3        |      5500.00 |           NULL | | Storage          | August   |      4500.00 |           NULL | | Storage          | September|      1000.00 |           NULL |  +------------------+----------+--------------+----------------+ 19 rows in set (0.02 sec)

The second query, presented in Listing 16.5, drills the campaign session year-campaign-month hierarchy. This query has the same structure as the first one, except that it groups by campaign and not by quarter.

Listing 16.5: Drilling the campaign session path

image from book
 /*****************************************************************/ /*                                                               */ /* campaign_session_path.sql                                     */ /*                                                               */ /*****************************************************************/ SELECT   product_category pc , time , order_amount amt , order_quantity qty FROM ( ( SELECT   product_category , year , 1 month , year time , 1 sequence , SUM (month_order_amount) order_amount , SUM (month_order_quantity) order_quantity FROM   month_end_sales_order_fact a  , product_dim b , month_dim c WHERE     a.product_sk = b.product_sk AND a.month_order_sk = c.month_sk AND year - 2006 GROUP BY   product_category , year ) UNION ALL ( SELECT   product_category , year , month , campaign_session time , 2 sequence , SUM (month_order_amount) order_amount , SUM (month_order_quantity) order_quantity FROM   month_end_sales_order_fact a , product_dim b , month_dim c WHERE     a.product_sk = b.product_sk AND a.month_order_sk = c.month_sk AND year = 2006 GROUP BY   product_category , year , campaign_session ) UNION ALL ( SELECT   product_category , year , month , month_name time , 3 sequence , SUM (month_order_amount) order_amount , SUM (month_order_quantity) order_quantity FROM   month_end_sales_order_fact a , product_dim b , month_dim c WHERE     a.product_sk = b.product_sk AND a.month_order_sk = c.month_sk AND year = 2006 GROUP BY   product_category , year , campaign_session , month_name ) ) x ORDER BY   product_category , year , month , sequence ; /* end of script                                                 */
image from book

Run the query in Listing 16.5 using this command.

 mysql> \. c:\mysql\scripts\campaign_session_path.sql

Here is the query result.

 +------------+----------------------+----------+------+ | pc         | time                 | amt      | qty  | +------------+----------------------+----------+------+ | Monitor    | 2006                 |  8500.00 | NULL | | Monitor    | 2006 First Campaign  |  3500.00 | NULL | | Monitor    | January              |  1000.00 | NULL | | Monitor    | April                |  2500.00 | NULL | | Monitor    | 2006 Second Campaign |  4000.00 | NULL | | Monitor    | July                 |  4000.00 | NULL | | Monitor    | 2006 Last Campaign   |  1000.00 | NULL | | Monitor    | October              |  1000.00 | NULL | | Storage    | 2006                 | 15000.00 | NULL | | Storage    | 2006  First Campaign |  3000.00 | NULL | | Storage    | February             |  1000.00 | NULL | | Storage    | March                |  2000.00 | NULL | | Storage    | 2006 Second Campaign |  6500.00 | NULL | | Storage    | May                  |  3000.00 | NULL | | Storage    | June                 |  3500.00 | NULL | | Storage    | 2006 Third Campaign  |  4500.00 | NULL | | Storage    | August               |  4500.00 | NULL | | Storage    | 2006 Last Campaign   |  1000.00 | NULL | | Storage    | September            |  1000.00 | NULL |  +------------+----------------------+----------+------+ 19 rows in set (0.00 sec)



Dimensional Data Warehousing with MySQL. A Tutorial
Dimensional Data Warehousing with MySQL: A Tutorial
ISBN: 0975212826
EAN: 2147483647
Year: 2004
Pages: 149

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net