Data Analysis and Requirements Translation Questions
Focuses on translating ambiguous business questions into concrete, actionable data analysis plans. Candidates should identify what data is needed to answer the question, define the metrics or KPIs that would settle it, state and validate the assumptions behind those definitions, and lay out the concrete analysis steps or queries that would produce an answer. Strong answers connect analysis choices back to the business decision at stake: what would change stakeholder behavior or strategy, what data quality or data availability issues could undermine the conclusion, and what additional data collection, reporting, or systems changes would be needed to answer the question reliably going forward.
Sample Answer
SELECT
COUNT(*) AS rows,
COUNT(DISTINCT user_id) AS distinct_users,
COUNT(DISTINCT user_id, device_id) AS distinct_user_device
FROM events;-- WAU from events
WITH wau AS (
SELECT user_id
FROM events
WHERE event_time >= current_date - interval '7 days'
GROUP BY user_id
)
SELECT COUNT(*) AS wau_events;
-- compare to auth table
SELECT COUNT(DISTINCT user_id) FROM auths WHERE last_login >= current_date - interval '7 days';SELECT date_trunc('hour', event_time AT TIME ZONE 'UTC') AS hr, COUNT(*) FROM events
WHERE event_time >= current_date - interval '14 days' GROUP BY hr ORDER BY hr;SELECT user_id, COUNT(*) AS events, COUNT(DISTINCT session_id) FROM events
WHERE event_time >= current_date - interval '7 days'
GROUP BY user_id HAVING COUNT(*) > 10000;SELECT event_id, COUNT(*) FROM events GROUP BY event_id HAVING COUNT(*)>1;SELECT device_id, COUNT(DISTINCT user_id) FROM events GROUP BY device_id HAVING COUNT(DISTINCT user_id) > 1 LIMIT 20;SELECT
(SELECT COUNT(DISTINCT user_id) FROM events WHERE event_time >= current_date - interval '7 days') AS wau7,
(SELECT COUNT(DISTINCT user_id) FROM events WHERE event_time >= current_date - interval '14 days') AS wau14;Sample Answer
Sample Answer
Sample Answer
-- compare aggregated metric to raw events
SELECT
DATE(event_timestamp, "UTC") AS date,
COUNTIF(event_type='purchase') AS raw_purchases,
agg.purchases AS reported_purchases
FROM `project.dataset.raw_events` r
LEFT JOIN `project.dataset.aggregates` agg
ON DATE(r.event_timestamp,"UTC") = agg.date
GROUP BY date, agg.purchases
ORDER BY date;SELECT
COUNT(DISTINCT client_id) AS unique_clients_raw,
COUNT(DISTINCT client_id) * 1.0 / SUM(sample_flag) OVER() AS est_sample_rate
FROM `project.dataset.raw_events`;SELECT event_id, COUNT(*) as cnt
FROM `project.dataset.raw_events`
GROUP BY event_id
HAVING cnt > 1
LIMIT 100;SELECT
DATE(event_timestamp, "UTC") AS utc_date,
DATE(event_local_timestamp, "America/Los_Angeles") AS local_date,
COUNT(*) FROM `...` GROUP BY utc_date, local_date ORDER BY utc_date LIMIT 50;Sample Answer
import math
from statsmodels.stats.power import NormalIndPower
power = NormalIndPower()
p0=0.10; p1=0.105
effect = (p1-p0)/math.sqrt(p0*(1-p0))
n = power.solve_power(effect_size=effect, power=0.8, alpha=0.05, alternative='two-sided')
print(math.ceil(n)) # per groupUnlock Full Question Bank
Get access to hundreds of Data Analysis and Requirements Translation interview questions and detailed answers.
Sign in to ContinueJoin thousands of developers preparing for their dream job.