Data shown here goes back to beginning of 2016 (BC LDB fiscal yr 2016 Q4).
Note
As mentioned in previous articles:my expertise is in data analysis, not the liquor industry, so the emphasis is on exploring what the data can tell us. Industry-insider context may be lacking. In the interest of promoting data analysis and learning, I am sharing most of the R code used to process the data - hence the expandable ‘Code’ options.
Beer Sales Trends: Canadian Beer by Category
BC LDB LMR breaks out Canadian beer based on location of production: BC-produced beer and ‘Other province’-produced beer. For each of these, it provides further breakdown by brewery size. Here are the definitions, taken from the ‘Glossary’ section of the report:
Commercial Beer: Breweries with Annual Production over 350,000HL
Regional Beer: Breweries with Annual Production over 15,000HL and up to 350,000HL
Micro Brew Beer: Breweries with Annual Production up to 15,000HL (aka ‘craft’ beer)
As you can see, these categories are based strictly on production volume, which seems a bit of a crude measurement. I believe this is for determining tax rates. In any case, we work with what we have. ;)
Sales by Category
Code
# remove partial yrs by counting qtrs and identifying those with 4yr_qtr <- lmr_data %>%group_by(year, qtr) %>%summarize(count=1)yr_qtr <- yr_qtr %>%group_by(year) %>%summarize(count=n()) %>%filter(count==4)# remove partials yrslmr_data <- lmr_data %>%filter(year %in% yr_qtr$year)# calculate annual ttls for % of ttl calculations latertrend_yr_ttl <- lmr_data %>%group_by(year) %>%summarize(ttl_netsales=sum(netsales),ttl_litres=sum(litres))
Code
# summarize data by year and categorytrend_yr_cat <- lmr_data %>%group_by(year, category) %>%summarize(netsales=sum(netsales),litres=sum(litres)) %>%filter(year %in% yr_qtr$year) # join with trend_yr_cat to get yr total colstrend_yr_cat <-left_join(trend_yr_cat, trend_yr_ttl, by='year')# calc %trend_yr_cat <- trend_yr_cat %>%mutate(litres_pc=litres/ttl_litres,netsales_pc=netsales/ttl_netsales)# add % chg YoY, $/l# ungroup first; use n=3 to lag 3 rows to match categoriestrend_yr_cat <- trend_yr_cat %>%ungroup() %>%mutate(pc_chg_sales=netsales/lag(netsales, n=3)-1,pc_chg_litres=litres/lag(litres, n=3)-1,dollar_per_litre=netsales/litres,pc_chg_d_per_l=dollar_per_litre/lag(dollar_per_litre, n=3)-1)
Litre sales
Looking at litre consumption for these 3 main categories:
as noted previously in BC Liquor Sales Analysis: Beer, overall beer sales are fairly stable (including imported beer not shown here), with slow downward trend.
most of the downward trend in volume sales is accounted for by lower commercial (big brewery) beer sales.
in % terms, litre market share has picked up for regional breweries (16% to 20%) at the expense of commercial beer, while the smaller micro brew category has stabilized in recent yrs at ~12%.
Net $ Sales
Net $ sales tells a pretty similar story, in terms of breakdown and trends, especially when considering:
inflation is bound to account for upward drift in overall $ sales (all things equal).
slightly higher share of $ sales for regional and micro brews, since these beers are more expensive than commercial brewery beer.
It is interesting to note that commercial breweries have stayed level, in $ terms, despite litre volume decreases. Price increases have almost exactly offset the volume declines.
Sales by Category by Source
Let’s see how things break-out by source (BC or other province) for these categories.
Code
## % share of categories by src -> see what composition is by source## get annual ttls by src (all categories)trend_yr_src_ttl <- lmr_data %>%group_by(year, source) %>%summarize(ttl_src_netsales=sum(netsales),ttl_src_litres=sum(litres) )## get data for category by sourcetrend_yr_src_cat <- lmr_data %>%group_by(year, source, category) %>%summarize(netsales=sum(netsales),litres=sum(litres))# calc % of yr sales by category# join with trend_yr_cat to get yr total colstrend_yr_src_cat <-left_join(trend_yr_src_cat, trend_yr_src_ttl, by=c('year','source'))# calc %trend_yr_src_cat <- trend_yr_src_cat %>%mutate(litres_pc=litres/ttl_src_litres,netsales_pc=netsales/ttl_src_netsales)# ungroup for % chg calcs over lag# set lag based on how far to look back for complag <-6trend_yr_src_cat <- trend_yr_src_cat %>% ungroup %>%mutate(pc_chg_sales=netsales/lag(netsales, n=lag)-1,pc_chg_litres=litres/lag(litres, n=lag)-1,dollar_per_litre=netsales/litres,pc_chg_d_per_l=dollar_per_litre/lag(dollar_per_litre, n=lag)-1)
Category Breakdown by Source
Sales in all the categories are driven by BC producers, with out-of-province producers only having an noticeable impact on commercial brewery sales.
Notably, beer from other province commercial breweries appears to have taken share from BC commercial breweries.
Presumably due to geographical reallocation of production by large multi-national breweries?
Year-over-Year % Changes by Category, Source
Breaking out the year-over-year % changes, we see that:
BC commercial beer has small but steady declines.
Other province commercial beer has had some surges in recent yrs, although stabilized in the last couple of years.
BC regional breweries have had some good growth years without much negative growth.
BC micro brews had some strong years in 2017-18 and 2021 (after 2020 pandemic) and growth has slowed/ended.
Other province regional and micro brews have had some large swings (mostly declines), but these are relative to a base too small to matter.
# calculate cumulative change across available yrs# need to lag by n yrs in dataset x n categories (or items to be more general)n_yrs <-max(trend_yr_src_cat$year)-min(trend_yr_src_cat$year)n_items <-length(unique(trend_yr_src_cat$category)) # no. of categoriesn_items <- n_items*length(unique(trend_yr_src_cat$source)) # x no. of sources# lag calculation based on n_yrs x n_itemstrend_yr_src_cat <- trend_yr_src_cat %>%mutate(pc_chg_lt_cum = litres/lag(litres, n=(n_yrs*n_items))-1)
Here we see the biggest cumulative change in other province commercial beer, more than doubling in litre sales during the period, accompanied by drop-off in BC commercial beer volume.
meanwhile, strong growth overall for BC regional and micro brew beers.
Nothing too surprising or dramatic here, but a good overview of the dynamics of the BC beer market across 3 categories identified by BC LDB for Canadian producers.
Next
No further plans to explore the BC LDB data in this format, at least not for a while. Planning to turn my attention to a more interactive, sustainable dashboard that folks can use to explore the LDB Quarterly Market Review as they see fit. Stay tuned!
Footnotes
Notes on ‘net $ sales’:
the report says “Net dollar value is based on the price paid by the customer and excludes any applicable taxes.”
calculating average net dollar value per litre for beverage categories gives unrealistically low numbers compared to retail prices in BC liquor stores. (Beer at average $4/litre? Not even the cheapest beer on the BC Liquor Stores website.)
there is likely additional factors related to BC LDB pricing structure, wholesaling, etc.
best to consider average net dollar value per litre referred to below as relative indicator.