@@ -14,7 +14,33 @@ Yardstick adds **measure-aware SQL** to DuckDB. Measures are aggregations that k
1414
1515``` sql
1616-- Load the extension
17- LOAD ' yardstick' ;
17+ INSTALL yardstick FROM community;
18+ LOAD yardstick;
19+
20+ -- Create the sales table
21+ CREATE TABLE sales (
22+ id INTEGER PRIMARY KEY ,
23+ year INTEGER ,
24+ region VARCHAR (50 ),
25+ amount DECIMAL (10 , 2 )
26+ );
27+
28+ -- Insert sample data
29+ INSERT INTO sales (id, year, region, amount) VALUES
30+ (1 , 2023 , ' North' , 15000 .00 ),
31+ (2 , 2023 , ' North' , 22000 .00 ),
32+ (3 , 2023 , ' South' , 18000 .00 ),
33+ (4 , 2023 , ' South' , 12000 .00 ),
34+ (5 , 2023 , ' East' , 25000 .00 ),
35+ (6 , 2023 , ' West' , 19000 .00 ),
36+ (7 , 2024 , ' North' , 28000 .00 ),
37+ (8 , 2024 , ' North' , 31000 .00 ),
38+ (9 , 2024 , ' South' , 21000 .00 ),
39+ (10 , 2024 , ' South' , 16000 .00 ),
40+ (11 , 2024 , ' East' , 33000 .00 ),
41+ (12 , 2024 , ' East' , 29000 .00 ),
42+ (13 , 2024 , ' West' , 24000 .00 ),
43+ (14 , 2024 , ' West' , 27000 .00 );
1844
1945-- Create a view with measures
2046CREATE VIEW sales_v AS
@@ -35,6 +61,43 @@ SEMANTIC SELECT
3561 AGGREGATE(revenue) / AGGREGATE(revenue) AT (ALL region) AS pct_of_year
3662FROM sales_v
3763GROUP BY year, region;
64+
65+ -- Variance from the global average
66+ SEMANTIC SELECT
67+ region,
68+ AGGREGATE(revenue) AS revenue,
69+ AGGREGATE(revenue) AT (ALL) / 4 .0 AS expected_if_equal, -- 4 regions
70+ AGGREGATE(revenue) - (AGGREGATE(revenue) AT (ALL) / 4 .0 ) AS variance
71+ FROM sales_v
72+ GROUP BY region;
73+
74+ -- Nested percentages (% of year, and that year's % of total)
75+ SEMANTIC SELECT
76+ year,
77+ region,
78+ AGGREGATE(revenue) AS revenue,
79+ 100 .0 * AGGREGATE(revenue) / AGGREGATE(revenue) AT (ALL region) AS pct_of_year,
80+ 100 .0 * AGGREGATE(revenue) AT (ALL region) / AGGREGATE(revenue) AT (ALL) AS year_pct_of_total
81+ FROM sales_v
82+ GROUP BY year, region;
83+
84+ -- Compare 2024 performance to 2023 baseline for each region
85+ SEMANTIC SELECT
86+ region,
87+ AGGREGATE(revenue) AT (SET year = 2024 ) AS rev_2024,
88+ AGGREGATE(revenue) AT (SET year = 2023 ) AS rev_2023,
89+ AGGREGATE(revenue) AT (SET year = 2024 ) - AGGREGATE(revenue) AT (SET year = 2023 ) AS growth
90+ FROM sales_v
91+ GROUP BY region;
92+
93+ -- Filter to specific segments
94+ SEMANTIC SELECT
95+ year,
96+ AGGREGATE(revenue) AS total_revenue,
97+ AGGREGATE(revenue) AT (SET region = ' North' ) AS north_revenue,
98+ AGGREGATE(revenue) AT (SET region IN (' North' , ' South' )) AS north_south_combined
99+ FROM sales_v
100+ GROUP BY year;
38101```
39102
40103## Syntax
0 commit comments