Analytics · Beginner Glossary
Essential Data Analytics Terms Every Beginner Should Know
Quick summary — the terms you actually need
You don't need 200 terms. You need about 40, used correctly. Interviewers listen for whether you understand what a term means in context — not whether you can recite a definition. This guide covers the 40 that appear most often in analyst and product analytics interviews.
In this guide you will learn:
- Data fundamentals — row, column, metric, dimension, grain.
- SQL terms — join, group by, window function, CTE.
- Product metrics — DAU, churn, LTV, CAC, retention.
- Analytics patterns — cohort, funnel, segment, attribution.
- Statistics — p-value, power, CI, A/B test, MDE.
SECTION 01Data fundamentals
These are the words you'll use in every conversation. Learn them first:
| Term | What it means | Example | Why it matters |
|---|---|---|---|
| Row | One record — one event, one user, one order | One row in `orders` = one order placed | The unit of everything you count |
| Column | One field of a table | `user_id`, `amount`, `created_at` | What you select, filter, aggregate |
| Metric | A number you measure | Revenue, DAU, churn rate | What dashboards are built on |
| Dimension | A way to slice a metric | Region, device, plan tier | How you break down metrics |
| Grain | What one row in a table represents | One row per order vs one row per user | Misunderstanding grain = wrong analysis |
| Fact table | Rows of measurable events | `orders` (one row per purchase) | The "what happened" table |
| Dimension table | Descriptive attributes | `users` (id, name, city) | The "who/what" table |
| Schema | The structure of your tables | Column names, types, relations | Needed to write correct queries |
-- Same "orders" table, different grain — very different answers
-- GRAIN: one row per order
SELECT COUNT(*) AS orders
FROM orders;
-- → 50,000
-- GRAIN: one row per user (using group by)
SELECT COUNT(DISTINCT user_id) AS buyers
FROM orders;
-- → 12,000
-- GRAIN: one row per user per day
SELECT DATE(created_at) AS d, COUNT(DISTINCT user_id) AS buyers
FROM orders
GROUP BY d;
-- → 3,000 on day 1, 2,800 on day 2, etc.
-- Why this matters:
-- "How many buyers did we have?" depends entirely
-- on grain. If you don't know the grain, you're
-- answering a different question than you think.
-- The most common bug in analytics:
-- joining two tables at different grains
-- produces a row explosion. You count 50,000
-- orders, then join users, get 200,000 rows.
-- Why? Because a user with 4 orders becomes
-- 4 rows. Now COUNT(*) says 200,000.
-- The number is wrong and nobody notices until
-- a stakeholder asks "why does the dashboard say
-- 4x more orders?".
-- Rule: always ask "what does one row represent?"
-- before writing any query.
-- Metric vs dimension — the shape of every query
-- Metric: revenue (a number you measure)
-- Dimension: region (a way to slice that number)
SELECT
region, -- dimension
SUM(amount) AS revenue, -- metric
COUNT(*) AS orders -- metric
FROM orders
GROUP BY region
ORDER BY revenue DESC;
-- Output:
-- region revenue orders
-- North 4,50,000 1,200
-- South 3,20,000 900
-- West 2,80,000 800
-- If you're confused about which is which:
-- - Metrics are numbers you SUM, AVG, COUNT
-- - Dimensions are things you GROUP BY
-- - A dimension can be a date (GROUP BY DATE(col))
-- Common interview question:
-- "What are the top 3 dimensions for slicing revenue?"
-- Answer: region, product category, month.
-- If you can name dimensions and metrics on demand,
-- interviewers relax. It sounds basic, but most
-- candidates can't do it under pressure.
SECTION 02SQL and warehouse terms
These are the terms that come up in every SQL interview:
| Term | What it means | When you'll use it | Where it appears |
|---|---|---|---|
| JOIN | Combine two tables on a shared key | Enrich orders with customer attributes | Any multi-table query |
| INNER JOIN | Only rows with matches in both tables | When you need data present in both | Most common join |
| LEFT JOIN | All rows from left, matches from right | Users with or without orders | Finding missing data |
| GROUP BY | Aggregate rows by a dimension | Revenue per region | Every aggregate query |
| HAVING | Filter after aggregation | Regions with revenue > ₹1L | Combined with GROUP BY |
| CTE (WITH clause) | A named temporary result | Break a complex query into steps | Readable multi-step queries |
| Window function | Aggregate without collapsing rows | Running totals, ranks | Senior-level SQL |
| Index | A data structure for fast lookup | Speed up a slow query | Performance tuning |
-- The two terms you'll use every single day
-- JOIN: combine orders with user attributes
-- (find total revenue per city)
SELECT
u.city,
SUM(o.amount) AS revenue
FROM orders o
JOIN users u ON u.id = o.user_id
GROUP BY u.city
ORDER BY revenue DESC;
-- LEFT JOIN: users with OR without orders
-- (find users who never ordered)
SELECT
u.id,
u.name,
COUNT(o.id) AS orders_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.name
HAVING COUNT(o.id) = 0;
-- CTE (WITH): break a complex query into steps
-- (find top customers by revenue per region)
WITH customer_revenue AS (
SELECT
user_id,
SUM(amount) AS revenue
FROM orders
WHERE created_at >= '2026-01-01'
GROUP BY user_id
),
ranked AS (
SELECT
u.city,
u.name,
cr.revenue,
RANK() OVER (
PARTITION BY u.city
ORDER BY cr.revenue DESC
) AS rnk
FROM customer_revenue cr
JOIN users u ON u.id = cr.user_id
)
SELECT city, name, revenue
FROM ranked
WHERE rnk <= 3
ORDER BY city, rnk;
-- Why CTEs matter:
-- A 40-line query with CTEs is readable.
-- The same query nested is a debugging nightmare.
-- Interviewers notice when you use CTEs — it's
-- a signal of real production experience.
-- Window functions — the term that separates
-- "knows SQL" from "actually works in analytics"
-- 1. Running total (cumulative revenue by day)
SELECT
date,
revenue,
SUM(revenue) OVER (ORDER BY date) AS running_total
FROM daily_revenue;
-- 2. Rank within a group (top products per category)
SELECT
category,
product,
revenue,
RANK() OVER (
PARTITION BY category
ORDER BY revenue DESC
) AS rank_in_category
FROM product_revenue;
-- 3. Previous row comparison (day-over-day change)
SELECT
date,
revenue,
LAG(revenue) OVER (ORDER BY date) AS prev_day,
revenue - LAG(revenue) OVER (ORDER BY date) AS change
FROM daily_revenue;
-- 4. Moving average (7-day rolling revenue)
SELECT
date,
revenue,
AVG(revenue) OVER (
ORDER BY date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS rolling_7d
FROM daily_revenue;
-- Why interviewers love this:
-- - Tests if you understand the difference
-- between aggregate (collapses) and window
-- (keeps rows)
-- - Running totals, ranks and LAG/LEAD appear
-- in almost every real analytics task
-- - Candidate who can write a window function
-- unprompted gets hired faster than one who
-- can recite every SQL keyword
SUM(...) OVER (ORDER BY ...)
and explain why it's different from SUM(...) GROUP BY,
you're ahead of most junior candidates.
SECTION 03Product metrics
These are the metrics that appear in every product analytics interview. Know them cold:
| Term | Definition | Formula | Why it matters |
|---|---|---|---|
| DAU / MAU | Daily / Monthly active users | Unique users with ≥1 session in the period | Core engagement baseline |
| DAU/MAU ratio | How "sticky" the product is | DAU / MAU | Higher = habit-forming product |
| Retention | Users who come back | Users active at day N / users in cohort | Product-market fit signal |
| Churn rate | Users who stop using | Lost users / starting users | Revenue risk |
| CAC | Customer acquisition cost | Total marketing spend / new customers | Efficiency of growth |
| LTV | Lifetime value of a customer | ARPU × avg. lifetime | How much you can spend to acquire |
| LTV:CAC ratio | Return per rupee of acquisition | LTV / CAC | Target: 3:1 or higher |
| ARPU | Average revenue per user | Revenue / users | Monetisation signal |
| Conversion rate | Users who complete a target action | Conversions / eligible users | Funnel health |
| Activation rate | New users who reach the "aha" moment | Activated / new users | Onboarding quality |
-- Churn rate (monthly, for a subscription product)
-- Interpretation: what % of last month's users
-- are NOT active this month
WITH monthly_active AS (
SELECT DISTINCT
DATE_TRUNC('month', event_at)::date AS month,
user_id
FROM events
WHERE event_at >= CURRENT_DATE - INTERVAL '3 months'
),
last_month AS (
SELECT user_id FROM monthly_active
WHERE month = DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
),
this_month AS (
SELECT user_id FROM monthly_active
WHERE month = DATE_TRUNC('month', CURRENT_DATE)
)
SELECT
COUNT(*) FILTER (WHERE lm.user_id IS NULL) AS churned,
COUNT(*) AS starting_users,
ROUND(
100.0 * COUNT(*) FILTER (WHERE lm.user_id IS NULL)
/ COUNT(*),
2
) AS churn_rate_pct
FROM last_month lm
LEFT JOIN this_month tm ON tm.user_id = lm.user_id;
-- What to watch for:
-- - "Churn" must be defined. Churned = no events
-- in the month? Or explicitly cancelled?
-- - Both are valid; both give different numbers.
-- - Always state your definition in the report.
-- LTV (simple version)
SELECT
ROUND(AVG(revenue), 2) AS arpu,
ROUND(AVG(lifetime_months), 1) AS avg_lifetime_months,
ROUND(AVG(revenue) * AVG(lifetime_months), 2) AS ltv
FROM user_summary;
-- Retention cohort: the query every product
-- analyst must know how to write
WITH first_visit AS (
SELECT
user_id,
MIN(DATE_TRUNC('month', event_at))::date AS cohort_month
FROM events
GROUP BY user_id
),
user_activity AS (
SELECT
user_id,
DATE_TRUNC('month', event_at)::date AS activity_month
FROM events
GROUP BY user_id, activity_month
),
cohort_data AS (
SELECT
fv.cohort_month,
ua.activity_month,
DATE_PART('month',
AGE(ua.activity_month, fv.cohort_month)
)::int AS month_number,
COUNT(DISTINCT fv.user_id) AS users
FROM first_visit fv
JOIN user_activity ua ON ua.user_id = fv.user_id
GROUP BY 1, 2, 3
)
SELECT
cohort_month,
month_number,
users,
ROUND(
100.0 * users
/ FIRST_VALUE(users) OVER (
PARTITION BY cohort_month
ORDER BY month_number
),
1
) AS retention_pct
FROM cohort_data
ORDER BY cohort_month, month_number;
-- Output looks like:
-- cohort_month | month_number | users | retention_pct
-- 2026-01-01 | 0 | 1000 | 100.0
-- 2026-01-01 | 1 | 420 | 42.0
-- 2026-01-01 | 2 | 320 | 32.0
-- 2026-01-01 | 3 | 280 | 28.0
-- This is the single most-asked query in
-- product analytics interviews.
-- If you can write this from memory, you're
-- hireable.
SECTION 04Analytics patterns
These are the analytical techniques that show up in every real project. Here's what each one actually means:
Cohort vs Segment — different, often confused.
SEGMENT
- A slice of users defined by an attribute
- Static or dynamic (e.g. "users in Mumbai")
- Used for: comparing behaviour across groups
- Example: "revenue by segment (business
vs consumer)"
COHORT
- A slice of users defined by when they
first did something
- Fixed at the time of grouping (e.g. "users
who signed up in January")
- Used for: tracking behaviour over time
- Example: "retention of January signups vs
February signups"
WHY IT MATTERS
Segments answer "who are our best users
right now?"
Cohorts answer "are we getting better at
retaining new users?"
Most "growth is slowing" conversations
need a cohort view. Most "which channel
is best" conversations need a segment view.
Interviewer test:
If you say "cohort" when you mean "segment",
they'll assume you haven't worked with
product data.
If you can correctly pick between them for
a given question, that alone signals
real experience.
Funnel analysis — where users drop off.
Definition: a series of steps a user must
complete to reach a goal, with the drop-off
at each step measured.
Example funnel: signup → verify email →
add first item → checkout → purchase.
Query shape (simplified):
WITH step1 AS (
SELECT DISTINCT user_id
FROM events WHERE name = 'signup'
),
step2 AS (
SELECT DISTINCT user_id
FROM events WHERE name = 'email_verified'
),
step3 AS (
SELECT DISTINCT user_id
FROM events WHERE name = 'item_added'
)
SELECT
(SELECT COUNT(*) FROM step1) AS signup,
(SELECT COUNT(*) FROM step2 s
JOIN step1 ON s.user_id = step1.user_id) AS verified,
(SELECT COUNT(*) FROM step3 s
JOIN step1 ON s.user_id = step1.user_id) AS added_item;
What makes a funnel useful:
✓ Steps are defined clearly
✓ Order matters (verified BEFORE adding item)
✓ Time window is set (within 7 days)
✓ It's segmented (new vs returning, mobile vs web)
What makes it useless:
✗ Mixing steps that can happen in any order
✗ No time window
✗ Only looking at the overall % (not per-step drop)
The interesting number is almost never the
final conversion rate. It's the step with the
biggest drop.
Attribution — which channel gets credit.
Definition: the model that assigns credit for
a conversion to the marketing touchpoints a
user encountered on the way.
Common models:
LAST-CLICK
Full credit to the last channel before
conversion. Simple but overweights the
bottom of the funnel.
FIRST-CLICK
Full credit to the first touch. Good for
brand-awareness analysis.
LINEAR
Equal credit to every touch. Overstates
cheap channels that appear often.
TIME-DECAY
More credit to touches closer to conversion.
Reasonable default.
DATA-DRIVEN
Uses a model to assign credit based on
actual uplift. Better but requires
experimentation.
What interviewers want to hear:
"Attribution is always a choice, and no
model is objectively correct. The right
model depends on the question:
- 'Which campaign brought users in?' → first-click
- 'Which campaign closed the deal?' → last-click
- 'How do we split the budget?' → data-driven"
If you answer "last-click is the correct
model", you'll be seen as junior. Every senior
analyst knows last-click oversimplifies.
SECTION 05Statistics and experimentation
These are the terms that separate "I read an A/B test" from "I ran an A/B test":
| Term | Definition | Typical value | Common mistake |
|---|---|---|---|
| Null hypothesis (H₀) | "There is no difference" | Variant = Control | Assuming it's what you want to disprove |
| p-value | Probability of seeing this result if H₀ is true | < 0.05 is "significant" | Confusing it with "probability the hypothesis is true" |
| Statistical significance | Result is unlikely due to chance | p < 0.05 | Assuming it means "important" |
| Practical significance | The size of the effect matters | Lift is large enough to be worth shipping | Shipping a statistically significant 0.01% lift |
| Confidence interval | Range likely containing the true effect | 95% CI | Not reporting it |
| Power | Chance of detecting an effect if it exists | 80% is standard | Under-powered tests with noisy results |
| MDE | Minimum detectable effect | Set before the test | Peeking and stopping early |
| Sample size | How many users you need | Depends on MDE and baseline | Running "until it looks good" |
| Type I error | False positive | α = 0.05 | Not adjusting for multiple tests |
| Type II error | False negative | β = 0.20 (power 80%) | Ignoring it when a test is "flat" |
# ab_test.py — running a proper two-proportion test
import numpy as np
from scipy.stats import norm
def two_prop_test(control_conv, control_n,
variant_conv, variant_n,
alpha=0.05):
p_c = control_conv / control_n
p_v = variant_conv / variant_n
# Pooled proportion under H0
p_pool = (control_conv + variant_conv) / (control_n + variant_n)
se = np.sqrt(p_pool * (1 - p_pool) *
(1/control_n + 1/variant_n))
# z-statistic and two-sided p-value
z = (p_v - p_c) / se
p_value = 2 * (1 - norm.cdf(abs(z)))
# 95% confidence interval on the lift
se_diff = np.sqrt(
p_c*(1-p_c)/control_n + p_v*(1-p_v)/variant_n
)
z_crit = norm.ppf(1 - alpha/2)
ci_low = (p_v - p_c) - z_crit * se_diff
ci_high = (p_v - p_c) + z_crit * se_diff
# Relative lift
relative_lift = (p_v - p_c) / p_c
return {
"p_control": round(p_c, 4),
"p_variant": round(p_v, 4),
"absolute_lift": round(p_v - p_c, 4),
"relative_lift_pct": round(relative_lift * 100, 2),
"p_value": round(p_value, 4),
"ci_95_pct": (
round(ci_low * 100, 2),
round(ci_high * 100, 2),
),
"significant": p_value < alpha,
}
# Example
result = two_prop_test(
control_conv=420, control_n=5000,
variant_conv=475, variant_n=5000,
)
print(result)
# Output:
# {'p_control': 0.084,
# 'p_variant': 0.095,
# 'absolute_lift': 0.011,
# 'relative_lift_pct': 13.1,
# 'p_value': 0.0456,
# 'ci_95_pct': (0.04, 2.16),
# 'significant': True}
# Notice two things:
# ✓ The p-value says "significant"
# ✓ The CI says the effect could be as low as
# 0.04% or as high as 2.16% — that's a huge
# range for a business decision
#
# Interpretation: it's significant, but the
# uncertainty is large. That's the difference
# between "statistically significant" and
# "practically significant".
Reading the output — what to actually report:
GOOD REPORT
"Variant lifted conversion by 13.1% relative
(0.084 → 0.095, absolute +1.1pp).
p = 0.046, 95% CI [0.04pp, 2.16pp].
We ran the test for 2 weeks with 5,000 users
per arm. Sample size was pre-computed for a
1pp MDE at 80% power. Result is significant
but the CI is wide — I'd recommend a 2-week
follow-up to narrow it before shipping to 100%."
Why this is good:
✓ Reports relative AND absolute lift
✓ Reports p-value AND confidence interval
✓ Reports sample size and duration
✓ Reports the MDE and power
✓ Interprets, not just reports
✓ Recommends an action
BAD REPORT
"It's significant, p < 0.05. Ship it."
Why this is bad:
✗ No absolute lift
✗ No CI (maybe the effect could be negative)
✗ No sample size or duration
✗ No interpretation of practical significance
✗ No recommendation, just "ship"
The best interview answer about A/B tests:
"A p-value tells you if the difference is
likely real. A confidence interval tells
you how big it might be. Practical
significance tells you if it's worth
shipping. I care about all three."
That sentence alone signals more experience
than 10 memorised statistics definitions.
SECTION 06Interview Q&A — analytics vocabulary
Q1Do I need to memorise all these terms?
No. You need about 40, understood well enough to use in context. Interviewers test whether you understand what a term means — not whether you can recite a dictionary definition. If you can explain a term with an example from your own project, you're done.
Q2What's the difference between a metric and a dimension?
A metric is a number you measure (revenue, DAU, churn). A dimension is a way to slice that number (region, device, plan tier). If you're summing, it's a metric. If you're grouping by it, it's a dimension.
Q3What's the most important SQL term to know?
Grain. "What does one row represent?" determines every count, sum and join you'll ever write. The second most important is window functions — the difference between an analyst who can answer real questions and one who can only do basic queries.
Q4What's the difference between cohort and segment?
A segment is a slice by attribute (users in Mumbai, or on the Pro plan). A cohort is a slice by when users first did something (users who signed up in January). Cohorts are for tracking behaviour over time; segments are for comparing groups.
Q5What's the biggest statistics mistake in analytics interviews?
Confusing statistical significance with practical significance. A 0.01% lift can be statistically significant with a large enough sample, but it's not worth shipping. Interviewers want to hear you say both — and that you check the confidence interval.
SECTION 07Test yourself — analytics terms quiz
Five questions. No sign-up.
0 / 5Pick an answer to see why it is right or wrong.
SECTION 08Frequently asked questions
What's "grain" in a data table?
Grain is what one row represents. A table might have one row per order, or one row per user, or one row per user per day. Same columns, different grain, very different answers. Always ask "what does one row mean?" before writing a query.
What's the difference between INNER JOIN and LEFT JOIN?
INNER JOIN keeps only rows where the key exists in both tables. LEFT JOIN keeps all rows from the left table, filling in nulls where there's no match. LEFT JOIN is how you find "missing" data — users with no orders, orders with no payment, etc.
What's a p-value in plain English?
It's the probability of seeing a result at least as extreme as yours if the null hypothesis (no difference) were true. A small p-value means "this is unlikely to be chance". It does NOT mean "this is important" — for that, look at the effect size and the confidence interval.
What's the difference between retention and churn?
Retention is the percentage of users who came back. Churn is the percentage who didn't. They usually add up to 100% (if you define the periods and cohorts consistently). Both are essential — but they answer slightly different questions.
What's LTV and why does it matter?
Lifetime value — the total revenue you expect from one customer over their lifetime. It matters because it tells you the maximum you can spend to acquire a customer (CAC). A healthy LTV:CAC ratio is around 3:1. Below that, growth isn't sustainable.
SECTION 09Related reads
Classroom & online · Noida
Learn the vocabulary and then use it
Our Data Analytics Training Course covers SQL, metrics, statistics and A/B testing — with real projects where you use the terms, not just read them.
₹15,500 · full programme- SQL, metrics, statistics
- Real project with analysis
- Mock interviews
- Weekday & weekend batches