Walmart M5 Data Platform Step 9 report · Store dashboard analysis
Step 09 · Dashboard 2

Store dashboard: DAX used, visualization, validation & findings

Analysis of the Power BI Store page against data/gold_export/ (agg_daily_store_sales, agg_store_category_sales, dim_store, dim_date).

KPIs match Gold Demand line at day grain Matrix column totals fixed 10 stores · CA / TX / WI Years 2011–2016

Live Power BI dashboard

Published report walmart_visualization — Executive, Store, Product, and Demand pages on Gold aggregates. Open in Power BI ↗

Analysis pages: 08 Executive · 09 Store · 10 Product · 11 Demand · Overview

Part A — DAX measures used on Store (Page 2)

Full 33-measure catalogue lives on 08 Executive. Store page uses these measures (paste-ready):

/* Cards + bar + summary */
Total Units =
SUM ( 'agg_daily_store_sales'[units_sold] )

Total Sales Value =
SUM ( 'agg_daily_store_sales'[sales_value] )

Avg Sell Price =
AVERAGE ( 'agg_daily_store_sales'[avg_sell_price] )

/* Matrix — category share (format %) */
Category Share =
AVERAGE ( 'agg_store_category_sales'[category_sales_share] )

Line chart on this page typically uses the column agg_daily_store_sales[units_sold] (Sum) with Legend store_id — not a separate measure.

Measure / fieldVisualFormat
[Total Units]Card, summary tableWhole number
[Total Sales Value]Card, donut, bar, tableCurrency $
[Avg Sell Price]Summary tableCurrency $
[Category Share]Matrix valuesPercentage
units_sold (column)Line Y-axisSum

Part B — Dashboard 2 screenshot (updated)

Power BI page STORE after layout polish: year + store slicers, state donut, daily units-by-store line, category share matrix (no bogus 33% column), store summary table, and store ranking bar. Sales card still needs tighter currency formatting (see §4).

Power BI Store dashboard: year and store slicers, KPI cards, state donut, units by date and store, category share matrix, store summary, sales by store bar
Figure 1. Store dashboard (Page 2, updated) — CA 44.9% · CA_3 top · FOODS ~58% mix · daily multi-store trend · units 67M · sales $191.58M
Total Units
66.9M
Exact 66,927,173
Total Sales
$191.58M
Matches Executive
CA share
44.9%
$85.97M
CA_3 / CA_4
2.62×
Largest vs smallest store

1. Scope & method

Dashboard visualGold sourceValidation
KPI cards agg_daily_store_sales 67M units · $191.58M sales
Donut by state dim_store[state_id] + [Total Sales Value] CA $85.97M (44.9%) · TX $55.12M (28.8%) · WI $50.49M (26.4%)
Store ranking bar dim_store[store_id] + sales CA_3 → … → CA_4 order matches
Units by date × store line agg_daily_store_sales Day grain fixed; use store slicer to reduce spaghetti
Category share matrix agg_store_category_sales[category_sales_share] Per-store shares; column totals removed / total row ~58/12/30
Store summary table dims + measures Avg price band $4.34–$4.45

2. Visualization & interaction

2.1 Layout

┌──────────────────────────────────────────────────────────────┐
│ [ Year slicer ]              [ Total Units ] [ Sales Value ] │
│ [ store_id slicer ]  [ State donut ]  [ Units by date×store ]│
│ [ Category share matrix ] [ Store summary ] [ Store ranking ]│
└──────────────────────────────────────────────────────────────┘

2.2 Visual-to-field map

VisualTypeFields
Year Slicer dim_date[year]
Store Slicer dim_store[store_id] or agg_daily_store_sales[store_id]
KPIs Cards [Total Units], [Total Sales Value]
Sales by state Donut Legend state_id · Values [Total Sales Value]
Store ranking Clustered bar Y store_id · X [Total Sales Value] (sort desc)
Daily/annual units by store Line X date (or year) · Legend store_id · Y units_sold
Category share Matrix Rows store_id · Columns cat_id · Values [Category Share]
Store summary Table store_id, state_id, [Total Units], [Total Sales Value], [Avg Sell Price]

2.3 Interaction design

ControlBehaviourAnalyst use
Year slicer Filters all date-related visuals and measures Isolate a full year (e.g. 2015) before comparing stores
store_id slicer Multi-select filters donut, bar, line, matrix, table, cards. Set Format → Slicer settings → Selection → Multi-select with CTRL = Off so checkboxes toggle without clearing prior picks. Compare CA_3 vs CA_4, or limit line chart to ≤3 stores
Donut click (state) Cross-filters store bar, line, tables to that state Focus CA vs TX vs WI without leaving the page
Bar click (store) Highlights / filters peer visuals for one outlet Inspect one store’s category mix and trend
Sync slicers Sync year (and optionally store) with Executive / Demand Keep time context consistent across pages
Edit interactions Prefer Filter for slicers; Highlight optional for line series Avoid blank matrix when grains conflict

2.4 Suggested click-path

  1. Set year to a full calendar year (2015) for fair store ranks.
  2. Read donut — confirm CA ≈ 45% of sales.
  3. Note CA_3 vs CA_4 gap on the ranking bar.
  4. Click CA on the donut → inspect CA-only line trends and matrix.
  5. Clear → select CA_3 and CA_4 in store slicer → compare mix and price.
  6. Return to all stores → read FOODS share stability in the matrix.

3. Key pattern findings

3.1 California leads; CA_3 is the flagship

StateSalesShareUnits
CA$85.97M44.9%29.2M
TX$55.12M28.8%19.2M
WI$50.49M26.4%18.5M

Within California, CA_3 alone is 38% of CA sales and 17.1% of network sales ($32.70M). CA_4 is last network-wide ($12.47M). Ratio CA_3 / CA_4 = 2.62×. California contains both the best and worst stores — state label alone does not explain performance.

3.2 Store ranking (matches dashboard bar)

RankStoreUnitsSalesAvg sell price*
1CA_311.36M$32.70M$4.37
2CA_17.83M$22.95M$4.39
3TX_27.33M$20.89M$4.34
4TX_36.21M$18.19M$4.37
5WI_26.70M$18.13M$4.43
6CA_25.82M$17.85M$4.43
7WI_36.54M$17.25M$4.40
8TX_15.69M$16.04M$4.35
9WI_15.26M$15.11M$4.45
10CA_44.18M$12.47M$4.40

*Mean of daily avg_sell_price on agg_daily_store_sales.

3.3 Category mix is FOODS-led in every store

Mean category sales share across stores: FOODS 58.1% · HOUSEHOLD 29.5% · HOBBIES 12.4%. Extremes:

Assortment differs by store, but FOODS remains the primary revenue engine everywhere — consistent with Executive category columns.

3.4 Prices are tightly clustered

Store-level average sell prices sit in a narrow band $4.34–$4.45 (network ~$4.39). CA_3’s leadership is volume, not a higher price point. TX stores skew slightly cheaper; WI_1 is the dearest on this metric.

3.5 Partial 2016 coverage still matters for KPIs

The units line is now at day grain (good). KPI cards and ranked totals with all years selected still include only 143 days in 2016 (through 22 May). Network average daily units rise from ~37.8K (2015) to ~41.8K (2016 YTD) — so filter to a full year when comparing store ranks for stakeholders.

4. Dashboard quality notes

5. Recommendations

  1. Benchmark ops and assortment against CA_3; deep-dive CA_4 and high-HOUSEHOLD CA_2.
  2. Format the Store page sales card like Executive ($191.58M).
  3. Limit the daily line to ≤3 stores via slicer (Multi-select with CTRL = Off) or use small multiples.
  4. Use full-year filters (2012–2015) when ranking stores for stakeholders.
  5. Keep price monitoring light — dispersion is small; volume and mix drive gaps.
  6. Sync year slicer with Executive; optionally sync store_id when drilling from Page 1.

6. Reproduce

python - <<'PY'
import pandas as pd
from pathlib import Path
P = Path('data/gold_export')
s = pd.read_parquet(P/'agg_daily_store_sales.parquet')
print(s.groupby('state_id')['sales_value'].sum())
print(s.groupby('store_id')['sales_value'].sum().sort_values(ascending=False))
print(pd.read_parquet(P/'agg_store_category_sales.parquet')
      .pivot_table(index='store_id', columns='cat_id', values='category_sales_share'))
PY

Screenshot: assets/store-dashboard-page2.png. Related: 08 Executive.