An aggregation table pre-summarizes a giant fact table so most queries never touch the detail. The cube cloud below is 100M sales rows (each cube ≈ 40,000 rows). Toggle aggregation, pick a grain, then run queries and watch which ones hit the small table — and which fall through to the full scan.
A semantic model is not "a spreadsheet in the cloud" — it is a star schema: one wide fact table (Sales: date key, product key, store key, amount, quantity) surrounded by small dimension tables (Date, Product, Store, Customer). Relationships are one-to-many, dimension → fact, so a slicer on Product[Category] filters millions of Sales rows through a single join path.
Measures are DAX expressions evaluated at query time in whatever filter context the visual creates:
One definition, reused by every report — that is the "semantic" in semantic model.
A query hits the aggregation when everything it needs can be answered at or above the aggregation's grain, using only columns the aggregation covers. Monthly grain answers monthly, quarterly, and yearly questions. It can never answer a daily question — the detail is gone.