Skip to content

Medium Data Analytics Interview Questions

214 medium questions with answers. Applied questions that check whether you can use the concepts on real work.

Topics in the medium set

SQL: 32 Power BI: 26 Python for Analysis: 21 Excel: 20 Statistics and Case Studies: 20 Dashboards and KPIs: 18 Data Cleaning: 18 Tableau: 16 Web & Marketing Analytics: 12
Solved — mediumStart practicing
3 QUESTIONS FREESign up to unlock the full question bank and track your progress.Unlock every question and answer, then continue practising company-wise and package-wise.
3 questions free Unlock the rest in seconds
01

How do you merge two DataFrames on different column names?

Save to ▾
Show answer
pd.merge(df1, df2, left_on='cust_id', right_on='id', how='left') joins on differently named keys.
02

What is a PivotTable and when do you use it?

ExcelMedium
Save to ▾
Show answer
A tool that summarises large tables by dragging fields into rows, columns, values and filters, so you can slice sales by region or month without writing formulas.
03

How do you present insights to non-technical stakeholders?

Save to ▾
Show answer
Lead with the answer, use one simple chart per point, translate numbers into business impact (₹, %), avoid jargon and end with a clear recommendation and next step.
04

How do you decide the sample size for a survey?

Save to ▾
Show answer
It depends on margin of error, confidence level and expected variability; larger samples give smaller errors with diminishing returns.
05

RANK vs DENSE_RANK vs ROW_NUMBER?

SQLMedium
Save to ▾
Show answer
ROW_NUMBER gives a unique sequence. RANK gives ties the same rank and skips the next (1, 1, 3). DENSE_RANK gives ties the same rank without gaps (1, 1, 2).
06

How do you calculate a running total?

SQLMedium
Save to ▾
Show answer
SUM(amount) OVER (ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) adds up values cumulatively.
07

What is the difference between a table and a normal range?

ExcelMedium
Save to ▾
Show answer
A table auto-expands, supports structured references, banded rows and slicers, and keeps formulas consistent as rows are added.
08

How do you improve Power BI report performance?

Power BIMedium
Save to ▾
Show answer
Use a star schema, remove unused columns, prefer measures, reduce visuals per page, limit high-cardinality fields and use aggregations or incremental refresh.
09

Difference between UNION and UNION ALL?

SQLMedium
Save to ▾
Show answer
UNION removes duplicate rows and sorts internally; UNION ALL keeps every row and is faster.
10

How do you remove duplicates in Excel but keep the latest record?

ExcelMedium
Save to ▾
Show answer
Sort by date (newest first), then Data → Remove Duplicates on the key column — Excel keeps the first occurrence. Or use UNIQUE / a COUNTIFS helper column.
11

What is Row-Level Security?

Power BIMedium
Save to ▾
Show answer
Rules that restrict data per user role, for example sales managers seeing only their region, defined with DAX filters and assigned in the Service.
12

What is vectorisation and why does it matter?

Save to ▾
Show answer
Applying operations to whole arrays at once instead of Python loops, which is far faster because it runs in optimised compiled code.
13

Explain time intelligence functions.

Power BIMedium
Save to ▾
Show answer
DAX functions like TOTALYTD, SAMEPERIODLASTYEAR and DATEADD compare periods; they need a proper continuous date table marked as a date table.
14

What is the difference between Goal Seek and Solver?

ExcelMedium
Save to ▾
Show answer
Goal Seek changes one input to hit a target output; Solver optimises with several variables and constraints, for example maximising profit under budget limits.
15

What is a window function?

SQLMedium
Save to ▾
Show answer
A function that calculates over a set of rows related to the current row without collapsing them, such as ROW_NUMBER, RANK, LAG or SUM() OVER (PARTITION BY ...).
16

What does the CALCULATE function do?

Power BIMedium
Save to ▾
Show answer
It evaluates an expression after modifying the filter context, for example CALCULATE(SUM(Sales[Amount]), Region[Name] = "North").
17

How do you detect outliers?

Save to ▾
Show answer
Visually with a box plot, with the IQR rule (below Q1 − 1.5×IQR or above Q3 + 1.5×IQR) or a z-score above 3. Then decide with the business whether to cap, remove or keep them.
18

How do you handle outliers in Pandas?

Save to ▾
Show answer
Detect with IQR or z-score, then cap with clip, remove, transform with log, or keep and flag them depending on whether they are errors or real events.
19

What are absolute and relative cell references?

ExcelMedium
Save to ▾
Show answer
Relative references change when copied (A1); absolute references stay fixed ($A$1); mixed references lock only the row or column (A$1 or $A1).
20

Import mode vs DirectQuery?

Power BIMedium
Save to ▾
Show answer
Import loads data into memory for fast visuals; DirectQuery queries the source live, giving fresh data but slower performance and some DAX limits.
21

What is Power Query's role in Power BI?

Power BIMedium
Save to ▾
Show answer
It extracts and transforms data using recorded steps in M language, such as merging, unpivoting, changing types and removing errors, before loading to the model.
22

What is the difference between mean and median for reporting salaries?

Save to ▾
Show answer
Salaries are right-skewed, so the median better represents the typical employee while the mean is pulled up by a few high earners.
23

What is a gateway in Power BI?

Power BIMedium
Save to ▾
Show answer
A bridge that lets the Service refresh data from on-premises sources securely on a schedule.
24

Explain INDEX and MATCH together.

ExcelMedium
Save to ▾
Show answer
MATCH finds the position of a value in a range and INDEX returns the item at that position, giving a flexible lookup that works left or right and survives column insertions.
25

Explain GROUP BY with an example.

SQLMedium
Save to ▾
Show answer
It groups rows sharing values so aggregates run per group, for example SELECT region, SUM(sales) FROM orders GROUP BY region.
26

How do you create a new column from conditions?

Save to ▾
Show answer
Use np.where for one condition, np.select for several, or df.apply with a function for custom logic.
27

How do you calculate month-over-month growth?

Save to ▾
Show answer
Aggregate revenue by month, use LAG(revenue) OVER (ORDER BY month), then (revenue - prev) / prev x 100.
28

What is DAX and how does it differ from Excel formulas?

Power BIMedium
Save to ▾
Show answer
DAX is the formula language for Power BI models. It works on columns and tables with filter context rather than on individual cells.
29

What is a self join and when is it used?

SQLMedium
Save to ▾
Show answer
Joining a table to itself with aliases, useful for hierarchies such as employees and managers or comparing rows within the same table.
30

Sales dropped 20% last month. How will you analyse it?

Save to ▾
Show answer
Confirm data accuracy first → break down by region, product, channel and customer segment → compare with seasonality and last year → check pricing, stock-outs, marketing changes and funnel conversion → present the root causes with clear charts.
31

How do you detect and handle skewed data?

Save to ▾
Show answer
Check histograms and skew(), then apply log, square-root or Box-Cox transforms, or use medians and robust statistics.
32

How do you create a dynamic dashboard in Excel?

ExcelMedium
Save to ▾
Show answer
Build PivotTables from a clean table, add PivotCharts and slicers, link KPIs with formulas, and refresh from Power Query so everything updates together.
33

How do you handle errors like #N/A and #DIV/0!?

ExcelMedium
Save to ▾
Show answer
Fix the root cause when possible, or wrap formulas with IFERROR or IFNA to return a clear fallback value.
34

What are indexes and when can they hurt?

SQLMedium
Save to ▾
Show answer
Indexes speed up lookups by keeping sorted pointers. They slow writes and use space, so index columns used in filters and joins, not every column.
35

Explain correlation vs regression.

Save to ▾
Show answer
Correlation shows the strength and direction of association; regression builds an equation to predict one variable from others.
36

What are relationships and cardinality in Power BI?

Power BIMedium
Save to ▾
Show answer
Links between tables on key columns; cardinality can be one-to-many, many-to-one or many-to-many, and cross-filter direction controls how filters flow.
37

Explain row context and filter context.

Power BIMedium
Save to ▾
Show answer
Row context evaluates one row at a time (calculated columns); filter context is the set of filters from slicers, visuals and relationships that a measure sees.
38

Write SQL for a running total of sales by date.

SQLMedium
Save to ▾
Show answer
SELECT order_date, SUM(amount) OVER (ORDER BY order_date) AS running_total FROM sales;
39

What is Power Query and why is it useful?

Power BIMedium
Save to ▾
Show answer
An ETL tool inside Excel for importing, cleaning and shaping data with recorded steps that refresh automatically when the source changes.
40

How would you investigate a sudden 20% drop in daily sales?

Save to ▾
Show answer
Check data pipelines first, then segment by channel, region, product and device, compare to the same period last year, and look for launches, outages or campaigns.
41

What is statistical significance vs practical significance?

Save to ▾
Show answer
A result can be statistically significant yet too small to matter; always report effect size and business impact together with the p-value.
42

What is normalisation?

SQLMedium
Save to ▾
Show answer
Organising tables to reduce redundancy and anomalies by splitting data into related tables, commonly up to third normal form.
43

How do you handle a dataset with 30% missing values in a key column?

Save to ▾
Show answer
Understand why it is missing, consider imputation or a missing flag, test sensitivity, and talk to data owners about fixing collection if it is systematic.
44

What is the difference between a dashboard and a report?

Save to ▾
Show answer
A report is multi-page and interactive from one dataset; a dashboard is a single-page canvas of pinned tiles from many reports in the Service.
45

What is the difference between a clustered and a non-clustered index?

SQLMedium
Save to ▾
Show answer
A clustered index defines the physical order of rows (one per table); a non-clustered index is a separate structure with pointers to the rows.
46

How do you change data types and parse dates?

Save to ▾
Show answer
df['date'] = pd.to_datetime(df['date']); df['amount'] = pd.to_numeric(df['amount'], errors='coerce'); astype('category') for repeated strings.
47

How do you handle large CSV files that do not fit in memory in Python?

Save to ▾
Show answer
Read in chunks with chunksize, load only needed columns, set efficient dtypes or switch to Dask, Polars or a database.
48

What is a CTE and when would you use one?

SQLMedium
Save to ▾
Show answer
A Common Table Expression (WITH name AS (...)) is a named temporary result used inside one query. Use it to break complex logic into readable steps or for recursive queries.
49

How do SUMIFS and SUMPRODUCT differ?

ExcelMedium
Save to ▾
Show answer
SUMIFS sums values meeting several criteria and is fast. SUMPRODUCT multiplies arrays and adds them, handling more complex conditions and weighted totals.
50

How do you connect Python to a SQL database?

Save to ▾
Show answer
Create an engine with SQLAlchemy or a driver such as psycopg2, then run pd.read_sql(query, engine) to load results into a DataFrame.
51

What is a CTE and why use it?

SQLMedium
Save to ▾
Show answer
A Common Table Expression is a named temporary result defined with WITH that makes complex queries readable and allows recursion.
52

What is cohort analysis?

Save to ▾
Show answer
Grouping users by a shared start date or trait and tracking behaviour over time, for example monthly retention per signup month.
53

How do you clean messy text data in Excel?

Save to ▾
Show answer
Use TRIM, CLEAN, UPPER or PROPER, Text to Columns, Flash Fill, SUBSTITUTE, and Power Query for repeatable cleaning steps.
54

What does CASE WHEN do?

SQLMedium
Save to ▾
Show answer
It adds conditional logic inside queries, for example bucketing ages or flagging values, returning different results per condition.
55

Explain Matplotlib vs Seaborn.

Save to ▾
Show answer
Matplotlib is the low-level plotting library with full control; Seaborn builds on it with attractive statistical charts and simpler syntax.
56

DAX: calculated column vs measure?

Power BIMedium
Save to ▾
Show answer
A calculated column is computed row by row and stored in the model. A measure is computed at query time using the filter context, e.g. Total Sales = SUM(Sales[Amount]). Prefer measures for aggregations.
57

What is the difference between a calculated field and a helper column in Excel?

ExcelMedium
Save to ▾
Show answer
A calculated field lives inside a PivotTable and works on summarised data; a helper column is a normal column of formulas that feeds the PivotTable or other formulas.
58

What is the difference between melt and pivot?

Save to ▾
Show answer
melt converts wide data to long format; pivot converts long data to wide, and they are used to reshape data for analysis or charts.
59

What is hypothesis testing in simple words?

Save to ▾
Show answer
You assume no effect (null), collect evidence and decide whether the data is surprising enough to reject that assumption at a chosen significance level.
60

What is the difference between a view and a materialised view?

SQLMedium
Save to ▾
Show answer
A view stores a query and runs it each time; a materialised view stores the result physically and must be refreshed, making reads faster.
61

What are bookmarks and drill-through in Power BI?

Power BIMedium
Save to ▾
Show answer
Bookmarks save a report view state for navigation; drill-through jumps to a detail page filtered to the item you picked.
62

How do you calculate a rolling average?

SQLMedium
Save to ▾
Show answer
df['sales'].rolling(window=7).mean() gives a 7-period moving average, useful to smooth daily noise.
63

How are NULLs handled in SQL?

SQLMedium
Save to ▾
Show answer
NULL means unknown, so comparisons with = fail; use IS NULL, COALESCE for defaults and remember most aggregates ignore NULLs except COUNT(*).
64

Which KPIs would you track for an e-commerce app?

Save to ▾
Show answer
DAU/MAU, conversion rate, average order value, cart abandonment, retention/churn, CAC, LTV, return rate and NPS.
65

Difference between a CTE, a subquery and a temp table?

SQLMedium
Save to ▾
Show answer
A subquery is inline; a CTE is a named, readable block for one statement; a temp table is physically stored for the session and can be indexed and reused.
66

How do you find duplicate rows in a table?

SQLMedium
Save to ▾
Show answer
SELECT col, COUNT(*) FROM t GROUP BY col HAVING COUNT(*) > 1; use ROW_NUMBER() partitioned by the key to delete extras.
67

What is a star schema?

Power BIMedium
Save to ▾
Show answer
A central fact table (sales, numeric events) linked to dimension tables (date, product, customer). It keeps Power BI models simple, fast and correct when filtering.
68

How would you find customers who never placed an order?

SQLMedium
Save to ▾
Show answer
LEFT JOIN customers to orders and keep rows where order_id IS NULL, or use NOT EXISTS, which also handles NULLs safely.
69

How do you define and choose KPIs?

Save to ▾
Show answer
Pick metrics tied to a business goal that are measurable, actionable and owned by someone, and pair a lagging metric with a leading one.
70

What do the match_mode and search_mode arguments of XLOOKUP control?

ExcelMedium
Save to ▾
Show answer
match_mode decides how a value is matched: 0 exact (default), -1 exact or next smaller, 1 exact or next larger, and 2 wildcard. search_mode decides direction: 1 searches first to last, -1 searches last to first, and 2 or -2 use binary search on sorted data. Searching last to first is a quick way to fetch the latest entry for a customer without sorting, and next-smaller matching handles tax slabs or commission bands.
71

How does the FILTER function work in Excel? Write a formula to list all North region orders.

ExcelMedium
Save to ▾
Show answer
-- A2:D500 holds Order, Customer, Region, Amount =FILTER(A2:D500, C2:C500="North", "No orders") -- two conditions (AND) multiply the tests =FILTER(A2:D500, (C2:C500="North")*(D2:D500>10000), "No orders") -- OR conditions add the tests =FILTER(A2:D500, (C2:C500="North")+(C2:C500="East"))
72

What is the LET function in Excel and why would you use it?

ExcelMedium
Save to ▾
Show answer
LET assigns names to intermediate results inside a single formula, for example =LET(sales, SUM(D2:D100), cost, SUM(E2:E100), (sales-cost)/sales). It makes long formulas readable and faster, because a repeated sub-calculation is evaluated once instead of several times. It is especially useful with dynamic arrays, where the same FILTER result might otherwise be recalculated three or four times in one nested formula.
73

What is Power Pivot and the Excel Data Model?

ExcelMedium
Save to ▾
Show answer
The Data Model is an in-memory columnar store inside Excel that holds several related tables, and Power Pivot is the interface to manage it. Instead of flattening data with VLOOKUPs, you load fact and dimension tables, create relationships and write DAX measures. It handles millions of rows that would not fit on a sheet, and PivotTables built on it can slice across tables. It is the same engine idea that Power BI uses.
74

Write an Excel formula to put invoices into ageing buckets (0-30, 31-60, 61-90, 90+ days).

ExcelMedium
Save to ▾
Show answer
-- C2 = invoice date, TODAY() = as-of date =LET(age, TODAY()-C2, IFS(age<=30, "0-30", age<=60, "31-60", age<=90, "61-90", TRUE, "90+")) -- then a PivotTable with bucket in rows and SUM of amount gives the ageing report
75

What is a Data Table in Excel's What-If Analysis?

ExcelMedium
Save to ▾
Show answer
A Data Table shows how a formula's result changes when one or two inputs vary. For example, place a loan EMI formula in a corner, list interest rates down the column and tenures across the row, then use What-If Analysis, Data Table to fill every combination. It is ideal for sensitivity analysis in pricing or budgeting. Large Data Tables slow recalculation, so set calculation to automatic except tables when needed.
76

You share a forecasting workbook and users keep overwriting formulas. How do you protect it?

ExcelMedium
Save to ▾
Show answer
Separate input cells from calculation cells and colour inputs clearly. Unlock only the input cells through Format Cells, Protection, then protect the sheet so formulas cannot be edited, and optionally hide formulas. Add data validation on inputs to block wrong values such as negative quantities. Protect workbook structure so sheets cannot be deleted, keep a version history, and add a short instructions sheet so users know where to type.
77

Tell me about a time you automated a manual Excel task.

ExcelMedium
Save to ▾
Show answer
Situation: our team spent about four hours every Monday copying sales exports from five branches into one summary sheet. Task: I was asked to cut that time. Action: I built a Power Query that read every file in a shared folder, cleaned headers and appended them, then a PivotTable and a few formulas produced the summary on refresh. Result: the report took ten minutes, copy-paste errors stopped, and two other teams reused the template.
78

What is the difference between SUM and SUMX in DAX?

Power BIMedium
Save to ▾
Show answer
SUM adds up a single column in the current filter context. SUMX is an iterator: it goes row by row over a table, evaluates an expression for each row, then sums the results. Use SUMX when the value must be computed per row first, for example SUMX(Sales, Sales[Qty] * Sales[Price]). Iterators are flexible but can be slower on very large tables, so storing a simple column is sometimes better.
79

Tell me about a time requirements kept changing on a report you were building.

Power BIMedium
Save to ▾
Show answer
Situation: a sales head kept adding new metrics while I was building a Power BI report. Task: deliver on time without endless rework. Action: I wrote a one-page scope with the agreed KPIs, shared a rough mock-up first, and logged new asks in a backlog with effort estimates. We agreed phase one and phase two. Result: phase one went live on schedule, and later requests were planned instead of disrupting the work.
80

Write a DAX measure for year-over-year sales growth percentage.

Power BIMedium
Save to ▾
Show answer
Sales LY = CALCULATE([Total Sales], SAMEPERIODLASTYEAR('Date'[Date])) Sales YoY % = VAR cur = [Total Sales] VAR prev = [Sales LY] RETURN DIVIDE(cur - prev, prev) -- needs a marked date table; format the measure as a percentage
81

Write a DAX measure for cumulative sales from the start of the data to the selected date.

Power BIMedium
Save to ▾
Show answer
Cumulative Sales = VAR maxDate = MAX('Date'[Date]) RETURN CALCULATE( [Total Sales], FILTER(ALL('Date'[Date]), 'Date'[Date] <= maxDate) ) -- for a running total that resets each year use TOTALYTD([Total Sales], 'Date'[Date])
82

What is bidirectional cross-filtering in Power BI and when is it risky?

Power BIMedium
Save to ▾
Show answer
Normally filters flow from the one side to the many side, for example from Product to Sales. Bidirectional filtering lets filters also flow back, so a Sales filter can limit Product. It helps in some many-to-many or bridge-table cases. The risks are ambiguous filter paths, unexpected results and slower performance. Prefer single direction and use CROSSFILTER inside a specific measure when you need both directions only there.
83

What are variables (VAR) in DAX and why are they useful?

Power BIMedium
Save to ▾
Show answer
VAR stores the result of an expression inside a measure, and RETURN gives the final output. Variables make measures readable, avoid evaluating the same expression twice, and are evaluated in the filter context where they are defined, which helps avoid subtle bugs inside CALCULATE. They also make debugging easy, because you can temporarily RETURN a variable to check its value before returning the final result.
84

What is a dataflow in Power BI?

Power BIMedium
Save to ▾
Show answer
A dataflow is Power Query running in the Power BI Service. It extracts and cleans data once and stores the result so many datasets can reuse it. For example, a single cleaned Customer table can feed sales, finance and marketing reports, ensuring consistent logic and reducing load on the source. Dataflows suit shared, reusable preparation; logic that only one report needs can stay in that report's Power Query.
85

What are field parameters in Power BI?

Power BIMedium
Save to ▾
Show answer
Field parameters let report users switch which measure or dimension a visual uses through a slicer. For example, one chart can switch between Sales, Profit and Quantity, or between grouping by Region, Category and Channel. This replaces many duplicate visuals or bookmark tricks, keeping the report lighter and easier to maintain. They are created from Modeling, New parameter, Fields, which generates a small table behind the slicer.
86

A stakeholder says the Power BI report shows different revenue than their Excel file. How do you troubleshoot?

Power BIMedium
Save to ▾
Show answer
I would first agree on definitions: gross or net, including tax or returns, order date or invoice date. Then compare one small slice, such as one month and one region, in both. I check filters on the report and page, relationships that drop unmatched rows, refresh time versus the Excel extract time, and duplicate rows. Once the gap is explained, I document the definition in the report so the question does not repeat.
87

What does apply do in pandas and why can it be slow?

Save to ▾
Show answer
apply runs a Python function on each row or column of a DataFrame, or each value of a Series. It is flexible but slow on large data because it loops in Python rather than using optimised C code. For example, df['total'] = df['qty'] * df['price'] is far faster than an apply with a lambda. Prefer vectorised operations, np.where, np.select, map with a dictionary, or string accessor methods first.
88

Write pandas code to calculate monthly revenue from an orders DataFrame.

Save to ▾
Show answer
import pandas as pd orders = pd.read_csv('orders.csv', parse_dates=['order_date']) orders['revenue'] = orders['qty'] * orders['unit_price'] monthly = ( orders .groupby(orders['order_date'].dt.to_period('M'))['revenue'] .sum() .reset_index(name='revenue') ) print(monthly)
89

Write pandas code for a pivot table of sales by region and category with sum and count.

Save to ▾
Show answer
import pandas as pd summary = pd.pivot_table( df, index='region', columns='category', values='sales', aggfunc=['sum', 'count'], fill_value=0, margins=True # adds an All row and column ) print(summary)
90

What is method chaining in pandas and why is it useful?

Save to ▾
Show answer
Method chaining writes a sequence of transformations as one expression, each step returning a new DataFrame, for example df.query('sales > 0').assign(margin=lambda x: x.profit / x.sales).groupby('region').agg(total=('sales', 'sum')). It avoids many temporary variables, reads top to bottom like a recipe, and reduces SettingWithCopy issues. Wrap the chain in brackets with one step per line, and use pipe for custom functions.
91

Write pandas code to compute month-on-month percentage change and cumulative sales for each store.

Save to ▾
Show answer
df = df.sort_values(['store', 'month']) df['mom_pct'] = ( df.groupby('store')['sales'].pct_change() * 100 ).round(1) df['cum_sales'] = df.groupby('store')['sales'].cumsum() # first month of each store has NaN for mom_pct, which is expected
92

Your pandas script shows SettingWithCopyWarning and a new column does not update. What is happening and how do you fix it?

Save to ▾
Show answer
It warns that you may be modifying a temporary copy of a slice, so the change might not reach the original DataFrame, for example df[df.sales > 0]['flag'] = 1. Avoid it by using a single loc call, df.loc[df.sales > 0, 'flag'] = 1, or by calling .copy() when you intentionally create a new subset. Newer pandas versions with copy-on-write make behaviour more predictable, but clear loc assignments remain best practice.
93

What is broadcasting in NumPy?

Save to ▾
Show answer
Broadcasting lets NumPy perform operations on arrays of different shapes without copying data, by virtually stretching the smaller array. For example, subtracting a 1D array of column means from a 2D array centres every column in one line: X - X.mean(axis=0). Shapes are compatible when trailing dimensions are equal or one of them is 1. It is a key reason vectorised code is much faster than Python loops.
94

Write a Python function that reads all Excel files in a folder and combines them into one DataFrame.

Save to ▾
Show answer
from pathlib import Path import pandas as pd def combine_excel(folder): frames = [] for f in Path(folder).glob('*.xlsx'): df = pd.read_excel(f) df['source_file'] = f.name frames.append(df) return pd.concat(frames, ignore_index=True) all_sales = combine_excel('monthly_reports')
95

What is the logical order in which SQL executes a SELECT query?

SQLMedium
Save to ▾
Show answer
Although written as SELECT first, a query is logically processed as FROM and JOIN, then WHERE, GROUP BY, HAVING, SELECT, DISTINCT, ORDER BY and finally LIMIT. This explains common errors: you cannot use a SELECT alias in WHERE because SELECT runs later, but you can use it in ORDER BY. It also explains why aggregates belong in HAVING, not WHERE, and why window functions cannot be filtered in the same query level.
96

Write SQL using LAG to compare each month's revenue with the previous month.

SQLMedium
Save to ▾
Show answer
WITH monthly AS ( SELECT DATE_TRUNC('month', order_date) AS month, SUM(amount) AS revenue FROM orders GROUP BY 1 ) SELECT month, revenue, LAG(revenue) OVER (ORDER BY month) AS prev_revenue, ROUND(100.0 * (revenue - LAG(revenue) OVER (ORDER BY month)) / NULLIF(LAG(revenue) OVER (ORDER BY month), 0), 1) AS mom_pct FROM monthly ORDER BY month;
97

Write SQL to show each category's percentage share of total revenue.

SQLMedium
Save to ▾
Show answer
SELECT category, SUM(amount) AS revenue, ROUND(100.0 * SUM(amount) / SUM(SUM(amount)) OVER (), 2) AS pct_share FROM sales GROUP BY category ORDER BY revenue DESC; -- SUM(SUM(amount)) OVER () is the grand total across all groups
98

Your NOT IN query unexpectedly returns zero rows. Why might that happen, and how do EXISTS and IN differ?

SQLMedium
Save to ▾
Show answer
IN checks whether a value is in a list or subquery result; EXISTS checks whether a subquery returns at least one row and stops at the first match. Results are the same in most cases, and modern optimisers often run them similarly. The big difference is NOT IN with NULLs: if the subquery returns any NULL, NOT IN returns no rows. NOT EXISTS behaves correctly, so prefer it for anti-joins.
99

What is a correlated subquery?

SQLMedium
Save to ▾
Show answer
A correlated subquery refers to a column from the outer query, so it is logically evaluated once per outer row. Example: find employees earning above their department average with WHERE salary > (SELECT AVG(salary) FROM emp e2 WHERE e2.dept_id = e1.dept_id). It is readable but can be slow on large tables. The same result is often faster with a window function such as AVG(salary) OVER (PARTITION BY dept_id).
100

After joining orders to payments, your revenue total doubles. What went wrong?

SQLMedium
Save to ▾
Show answer
This is a join fan-out: an order has more than one matching payment row, for example split payments or retries, so each order line is repeated and sums are inflated. Check by counting rows per key on both sides. Fix it by aggregating payments to one row per order before joining, joining at the correct grain, or using the right key. Always compare row counts and totals before and after a join.
101

How do you pivot rows into columns in SQL, for example sales by quarter as columns?

SQLMedium
Save to ▾
Show answer
SELECT region, SUM(CASE WHEN quarter = 'Q1' THEN amount ELSE 0 END) AS q1, SUM(CASE WHEN quarter = 'Q2' THEN amount ELSE 0 END) AS q2, SUM(CASE WHEN quarter = 'Q3' THEN amount ELSE 0 END) AS q3, SUM(CASE WHEN quarter = 'Q4' THEN amount ELSE 0 END) AS q4 FROM sales GROUP BY region; -- conditional aggregation works in every database; some also offer PIVOT
102

Tell me about a time a query you wrote produced wrong results.

SQLMedium
Save to ▾
Show answer
Situation: my weekly active users number jumped 30 percent overnight. Task: find out whether it was real before the report went out. Action: I traced the query and found a new join to a device table created duplicate users. I changed the count to COUNT(DISTINCT user_id), added a row-count check, and informed my manager before publishing. Result: the corrected number went out on time, and I added that check to every report.
103

What is a transaction and what do the ACID properties mean?

SQLMedium
Save to ▾
Show answer
A transaction is a group of SQL statements that succeed or fail together, such as debiting one account and crediting another. ACID: Atomicity means all or nothing; Consistency means rules and constraints stay valid; Isolation means concurrent transactions do not see each other's partial work; Durability means committed data survives crashes. Analysts mostly read data, but knowing ACID explains why reports should read committed data.
104

What is the difference between a data warehouse, a data lake and a lakehouse?

SQLMedium
Save to ▾
Show answer
A data warehouse stores cleaned, structured data in modelled tables optimised for SQL reporting. A data lake stores raw data of any type, such as logs, JSON and images, cheaply in files, with structure applied when read. A lakehouse combines them: open table formats on lake storage add transactions, schemas and fast SQL on top of files. Analysts typically query the warehouse or the curated layer of a lakehouse.
105

What is a p-value, explained simply?

Save to ▾
Show answer
A p-value is the probability of seeing a result at least as extreme as yours if the null hypothesis, usually no effect, were true. A p-value of 0.03 means that if the new page truly made no difference, results this strong would appear only about 3 percent of the time by chance. Below a chosen threshold such as 0.05 we reject the null. It is not the probability that the hypothesis is true.
106

What are Type I and Type II errors?

Save to ▾
Show answer
A Type I error is a false positive: concluding there is an effect when there is none, for example launching a feature that does not actually lift sales. Its probability is alpha, often 0.05. A Type II error is a false negative: missing a real effect, with probability beta. Power is 1 minus beta. Larger samples reduce Type II errors, and the business cost of each mistake should guide which one you guard against more.
107

What is a confidence interval?

Save to ▾
Show answer
A confidence interval gives a range of plausible values for a population parameter based on a sample. A 95 percent interval for average order value of 820 to 880 rupees means that if we repeated the sampling many times, about 95 percent of such intervals would contain the true average. Wider intervals mean more uncertainty; larger samples narrow them. Reporting the interval is more honest than reporting one number.
108

What is the Central Limit Theorem and why does it matter for analysts?

Save to ▾
Show answer
The Central Limit Theorem says that the distribution of sample means approaches a normal distribution as sample size grows, usually from about 30 observations, even if the underlying data is skewed. This is why we can use z-tests, t-tests and confidence intervals for averages such as order value or session time. It does not make the raw data normal, and very heavy-tailed data may need larger samples.
109

Checkout conversion fell from 3.2% to 2.6% the week after an app release. How do you investigate?

Save to ▾
Show answer
First confirm it is real: check tracking events, data delays and whether the denominator changed. Then segment by app version, platform, device, payment method and traffic source. If the drop is concentrated in the new version or one payment option, it points to a bug or UX change. Look at funnel steps to find where users drop. Compare with seasonality and campaigns, then share findings with product and engineering quickly.
110

Tell me about a time you used data to challenge an assumption.

Save to ▾
Show answer
Situation: our team believed weekend discounts drove most sales. Task: I was preparing the monthly review. Action: I compared discount and non-discount weekends over six months and controlled for paydays and festivals. Discounts moved sales forward from the following week but added little overall. I presented it with one clear chart. Result: management trialled fewer discount weekends, and margin improved without a fall in monthly revenue.
111

When do you use a chi-square test?

Save to ▾
Show answer
A chi-square test of independence checks whether two categorical variables are related, using a contingency table of counts. Example: is preferred payment method related to city tier? It compares observed counts with the counts expected if there were no relationship. Use it with counts, not percentages, and make sure expected counts are not too small, roughly at least 5 per cell. A significant result shows association, not causation.
112

What is the difference between a t-test and a z-test?

Save to ▾
Show answer
Both compare means. A z-test assumes the population standard deviation is known or the sample is large, so the normal distribution applies. A t-test estimates standard deviation from the sample and uses the t-distribution, which has heavier tails for small samples. In practice analysts mostly use t-tests: one-sample, independent two-sample (Welch's version if variances differ) or paired, for before-after measurements on the same users.
113

Estimate how many cups of tea are sold in a city of 1 crore people in a day.

Save to ▾
Show answer
State assumptions clearly. Of 1 crore people, assume 70 percent drink tea, so 70 lakh. Say half of their cups are bought outside, at an average of one bought cup per drinker every day for that half, giving about 35 lakh purchased cups, with more at offices and stations. So roughly 30 to 40 lakh cups. Interviewers judge the structure, segmentation and sanity check more than the exact number.
114

What is sampling bias? Name common types.

Save to ▾
Show answer
Sampling bias occurs when the sample does not represent the population, so conclusions do not generalise. Common types: selection bias, such as surveying only app users about website issues; survivorship bias, studying only customers who stayed; non-response bias, when unhappy customers skip surveys; and convenience sampling, using whoever is easiest to reach. Random sampling, stratification and weighting help reduce it.
115

What is the difference between relationships, joins and data blending in Tableau?

TableauMedium
Save to ▾
Show answer
Relationships, the default logical layer, connect tables flexibly and Tableau decides join type and level per view, avoiding duplicated measures. Joins physically merge tables into one at a fixed level, which can duplicate rows if grains differ. Blending combines data from separate data sources at the view level using a primary and secondary source, aggregating the secondary first. Prefer relationships, use joins for specific row-level needs, and blending as a last resort.
116

Write a Tableau calculation to find each customer's first purchase date and flag new versus repeat orders.

TableauMedium
Save to ▾
Show answer
// First Purchase Date { FIXED [Customer ID] : MIN([Order Date]) } // Order Type IF [Order Date] = [First Purchase Date] THEN 'New' ELSE 'Repeat' END // Cohort Month for retention analysis DATETRUNC('month', [First Purchase Date])
117

What are table calculations in Tableau?

TableauMedium
Save to ▾
Show answer
Table calculations are computed on the aggregated results already in the view, not on the underlying rows. Examples are running total, percent of total, difference from previous, rank and moving average. Their result depends on the direction and partition you set with Compute Using, for example table across or by specific dimensions. They are quick to add from Quick Table Calculation, but incorrect Compute Using settings are a frequent cause of wrong numbers.
118

What are parameters in Tableau and how do you use them?

TableauMedium
Save to ▾
Show answer
A parameter is a single user-controlled value, such as a number, date or string, that is independent of the data. On its own it does nothing; you reference it in calculations, filters, reference lines or bins. Common uses are a Top N selector, a what-if growth rate, or a measure switcher where a CASE statement picks Sales, Profit or Quantity based on the parameter. Parameter actions let users set it by clicking a mark.
119

What is the difference between sets and groups in Tableau?

TableauMedium
Save to ▾
Show answer
A group combines dimension members into higher-level categories, such as merging small states into Others; it is static and each member belongs to one group. A set splits members into In and Out based on a selection or condition, such as top 10 customers by sales, and can be dynamic and recalculate with data. Sets can be combined, used in calculations and changed by set actions, making them more powerful for interactive analysis.
120

Your Top 10 products filter in Tableau ignores the category filter. Why, and how do you fix it?

TableauMedium
Save to ▾
Show answer
A context filter is applied before other dimension filters and before FIXED LOD calculations, creating a smaller dataset the rest of the view works on. Use it when a Top N filter should operate within a selected category, for example top 10 products within Electronics, or when a FIXED LOD must respect a filter. Add a filter to context from its right-click menu; it turns grey. Too many context filters can hurt performance.
121

What types of dashboard actions does Tableau offer?

TableauMedium
Save to ▾
Show answer
Filter actions filter other sheets when a user selects or hovers on a mark, such as clicking a region to filter a product table. Highlight actions emphasise related marks without removing others. URL actions open a web page with field values in the link. Go to Sheet navigates to another dashboard. Parameter and set actions update a parameter or set based on selection, enabling advanced interactions like dynamic drill-downs and comparisons.
122

Write a Tableau table calculation for year-over-year sales growth.

TableauMedium
Save to ▾
Show answer
// with YEAR(Order Date) in the view, Compute Using: Table (across) (ZN(SUM([Sales])) - LOOKUP(ZN(SUM([Sales])), -1)) / ABS(LOOKUP(ZN(SUM([Sales])), -1)) // the built-in Quick Table Calculation 'Year over Year Growth' generates similar logic // format the field as a percentage
123

How do you let users choose Top N customers with a parameter in Tableau?

TableauMedium
Save to ▾
Show answer
Create an integer parameter Top N with a range of 5 to 50 and show its control. Drag Customer to the Filters shelf, choose the Top tab, select By field, and set it to top Top N by SUM(Sales). Alternatively create a set based on the parameter so you can show Top N versus Others in one chart. If the Top N must respect a category filter, add that category filter to context.
124

Tell me about a time you migrated or rebuilt reports in a new BI tool.

TableauMedium
Save to ▾
Show answer
Situation: our team moved 15 Excel and older BI reports into Tableau. Task: I owned the sales set. Action: I listed every metric with its definition, rebuilt the shared data source first, then the dashboards, and ran side-by-side number checks for two weeks with the old reports. I held short demos for users. Result: all reports went live with matching numbers, and refresh effort fell from a day to an automatic schedule.
125

Tell me about a time you had to prioritise several dashboard requests at once.

TableauMedium
Save to ▾
Show answer
Situation: three managers asked for new dashboards in the same week. Task: I could not finish all of them on time. Action: I asked each about the decision the dashboard would support and its deadline, estimated effort, and shared a proposed order with my manager. I gave one requester a quick interim extract. Result: the most urgent dashboard, for a pricing review, shipped first, and nobody was left without any data.
126

A stakeholder wants a 40-column crosstab in Tableau that looks exactly like their Excel sheet. How do you handle it?

TableauMedium
Save to ▾
Show answer
I would ask what they do with it. If they export and work on it in Excel, a crosstab view with a download option or a scheduled extract is fine, and Tableau should not fight Excel. If they actually scan it for exceptions, I would suggest a summary view with highlights and a drill-down to the detail table. Often both: a short visual summary on top and the detailed table on a second tab.
127

What is the difference between extract filters and data source filters in Tableau?

TableauMedium
Save to ▾
Show answer
Extract filters decide which rows go into the extract file at all, which reduces its size and speeds every view; filtered rows are simply not available. Data source filters apply to all worksheets using that data source, for live or extract, and are useful for security or scope, such as only the India business. Both act before context filters. Normal worksheet filters only affect one sheet.
128

What are the main dimensions of data quality?

Save to ▾
Show answer
Common dimensions are accuracy, values reflect reality; completeness, required fields are present; consistency, the same fact matches across systems; validity, values follow formats and rules such as a 6-digit pin code; uniqueness, no unwanted duplicates; and timeliness, data is fresh enough for its use. Measuring these with simple checks, like percent missing or duplicate rate, turns vague complaints about bad data into fixable issues.
129

Write pandas code to standardise inconsistent city names such as 'delhi ', 'New Delhi' and 'DELHI'.

Save to ▾
Show answer
city_map = { 'delhi': 'Delhi', 'new delhi': 'Delhi', 'bombay': 'Mumbai', 'mumbai': 'Mumbai', 'bengaluru': 'Bengaluru', 'bangalore': 'Bengaluru', } clean = df['city'].str.strip().str.lower().str.replace(r'\s+', ' ', regex=True) df['city_clean'] = clean.map(city_map).fillna(clean.str.title()) print(df['city_clean'].value_counts())
130

When would you drop missing values, and when would you impute with mean or median?

Save to ▾
Show answer
Drop rows when few are missing, roughly under 5 percent, and missingness looks random. Impute when dropping would lose too much data. Use the median for skewed numbers such as income or order value, the mean for roughly symmetric data, and the mode or an Unknown category for categoricals. Group-wise imputation, such as median by city, is better than one global value. Always add a flag column showing what was imputed.
131

A file has dates in mixed formats, some dd/mm/yyyy and some mm/dd/yyyy. How do you handle it?

Save to ▾
Show answer
Find out which system or region produced each format, since a source column often explains it. Values with a day above 12 reveal the format unambiguously. Parse with an explicit format per source, for example pd.to_datetime(col, format='%d/%m/%Y', errors='coerce'), rather than letting the tool guess. Check failed or suspicious parses, such as future dates, and ask the source team to send ISO format yyyy-mm-dd going forward.
132

Write SQL to flag rows that fail basic validation rules in a customer table.

Save to ▾
Show answer
SELECT customer_id, CASE WHEN email IS NULL OR email NOT LIKE '%_@_%._%' THEN 1 ELSE 0 END AS bad_email, CASE WHEN LENGTH(pincode) <> 6 THEN 1 ELSE 0 END AS bad_pincode, CASE WHEN signup_date > CURRENT_DATE THEN 1 ELSE 0 END AS future_signup, CASE WHEN age NOT BETWEEN 18 AND 100 THEN 1 ELSE 0 END AS bad_age FROM customers; -- sum each flag to report the error rate per rule
133

What is the difference between an outlier and a data error?

Save to ▾
Show answer
An outlier is a genuine but unusual value, such as a bulk corporate order of 50 laptops; it is real and may be important. A data error is an incorrect value, such as an age of 250 or a price entered in paise instead of rupees. Errors should be fixed or removed. Outliers should be investigated and often kept, perhaps analysed separately or with median-based metrics so they do not distort averages.
134

What steps would you apply in Power Query to clean a messy system export?

Save to ▾
Show answer
Typical steps: remove top junk rows and promote the real header row, remove blank rows and columns, set correct data types, trim and clean text, split combined columns such as Name - City, replace error values, fill down for grouped labels, remove duplicates on the business key, and unpivot wide month columns. Rename steps meaningfully so others can follow them, and keep the query foldable when the source is a database.
135

An inner join between orders and customers returns fewer orders than the orders table has. What could be wrong?

Save to ▾
Show answer
Orphan records are child rows whose foreign key has no matching parent, such as orders with a customer_id that does not exist in the customer table. They break joins silently: an inner join drops them and totals fall short. Find them with a LEFT JOIN from the child to the parent and filter where the parent key IS NULL. Then fix the source, add an Unknown member, or report them separately.
136

How should you document data cleaning decisions?

Save to ▾
Show answer
Keep a cleaning log or README listing each rule, why it exists and its impact, for example removed 1,240 test orders flagged by email domain. Code-based cleaning in SQL, Python or Power Query steps is itself documentation if steps are named clearly. Record counts before and after each major step. This lets reviewers trust the numbers, helps a colleague rerun the work, and answers the question why your total differs from the raw file.
137

Write Python code to extract valid 10-digit Indian mobile numbers from a messy text column.

Save to ▾
Show answer
import re pattern = re.compile(r'(?:\+?91[\s-]?|0)?([6-9]\d{9})') def get_mobile(text): if not isinstance(text, str): return None digits = re.sub(r'[\s()-]', '', text) m = pattern.search(digits) return m.group(1) if m else None df['mobile'] = df['contact'].apply(get_mobile)
138

Customer names in your file show strange characters like 'é' instead of accented letters. What is wrong and how do you fix it?

Save to ▾
Show answer
This is an encoding mismatch: a UTF-8 file was read as a different encoding such as Latin-1 or Windows-1252. Re-read it with the right encoding, for example pd.read_csv(path, encoding='utf-8') or 'utf-8-sig' for files with a byte order mark, or set the file origin in Excel and Power Query import. Avoid re-saving through tools that change encoding, and agree on UTF-8 for all exchanges, especially for Hindi or other Indian language text.
139

Tell me about a time you found a serious data quality issue.

Save to ▾
Show answer
Situation: while building a returns report I noticed one warehouse had zero returns for three months. Task: confirm whether it was real. Action: I compared with the source system and found its return codes had changed after a software update, so my filter missed them. I informed the data owner, updated the mapping and back-filled the history. Result: the corrected report showed that warehouse had the highest return rate, which led to a packaging review.
140

Your sales data contains negative quantities. What do you do with them?

Save to ▾
Show answer
Do not delete them blindly. First find out what they mean: often they are returns, cancellations or credit notes, which are valid business events. Check with the source team or a documentation note. If they are returns, keep them but report gross sales, returns and net sales separately. If some are clearly entry errors, such as a negative quantity on a new order, flag and correct them and log the rule.
141

What are leading and lagging indicators? Give examples.

Save to ▾
Show answer
Lagging indicators report outcomes that have already happened, such as monthly revenue, profit or churn; they are accurate but too late to change. Leading indicators move earlier and predict outcomes, such as qualified leads, demo bookings, cart additions or support ticket backlog. A sales dashboard should pair them: pipeline coverage today signals revenue next quarter. Leading indicators need validation that they really predict the lagging result.
142

A stakeholder wants 20 more visuals added to an already crowded dashboard page. How do you respond?

Save to ▾
Show answer
I would ask which decisions each new visual supports and how often they will look at it. Usually a few are essential and the rest are nice to have. I would propose keeping the main page focused on core KPIs and moving detail into drill-through pages, tooltips or a separate analysis tab. Showing a quick mock-up of both versions helps them see that the cleaner page answers questions faster.
143

Which KPIs would you include in an HR attrition dashboard?

Save to ▾
Show answer
Core KPIs: headcount, monthly and annualised attrition rate, voluntary versus involuntary split, and early attrition within the first 90 days or first year. Breakdowns by department, location, manager, tenure band, performance rating and salary band show where it concentrates. Add hiring metrics such as time to fill and offer acceptance rate, and exit reasons from exit interviews. Protect privacy by hiding very small groups.
144

What KPIs would you track for a customer support call centre?

Save to ▾
Show answer
Volume and staffing: calls offered, answered, abandoned rate and average speed of answer. Efficiency: average handle time and occupancy. Quality and outcome: first contact resolution, customer satisfaction or CSAT score, and repeat contacts within 7 days. Service level, for example 80 percent of calls answered in 20 seconds, ties them together. Balance speed metrics with quality, otherwise agents rush calls to cut handle time.
145

You launched a dashboard a month ago and usage logs show almost nobody opens it. What do you do?

Save to ▾
Show answer
Talk to the intended users before redesigning. Find out whether they know it exists, whether it answers their real questions, whether they trust the numbers, and whether it fits their routine. Common fixes are fewer, sharper KPIs, faster loading, a scheduled email snapshot, or embedding it in a meeting that already happens. Then measure usage again. Sometimes the honest answer is that the dashboard is not needed and can be retired.
146

Tell me about a time you had to say no to a stakeholder's request.

Save to ▾
Show answer
Situation: a regional manager asked me to show his team's numbers excluding two weeks of a stock-out. Task: be helpful without misreporting. Action: I explained that removing the period would make his region incomparable with others, and offered an annotation and a separate view showing the stock-out impact. Result: he accepted, the leadership review understood the dip, and the main dashboard stayed consistent for every region.
147

Write a DAX measure for a KPI card showing achievement against target and a colour for conditional formatting.

Save to ▾
Show answer
Achievement % = DIVIDE([Total Sales], [Sales Target]) KPI Colour = VAR a = [Achievement %] RETURN SWITCH( TRUE(), ISBLANK(a), "#9E9E9E", a >= 1, "#2E7D32", a >= 0.9, "#F9A825", "#C62828" ) -- apply KPI Colour via Format > Callout value > fx > Field value
148

A manager asks for a dashboard that refreshes every minute. How do you decide the right refresh frequency?

Save to ▾
Show answer
Match refresh to how quickly decisions are made. A monthly board pack needs daily refresh at most, while a warehouse dispatch board may need 15-minute or live updates. Faster refresh costs more in source load, licensing and complexity, and can show incomplete data. Ask how quickly someone will act on a change, check when upstream systems finish loading, and always display the last refreshed time on the dashboard.
149

How do you make a dashboard accessible, for example for colour-blind users?

Save to ▾
Show answer
Avoid red-green as the only difference; use colour-blind-safe palettes such as blue and orange, and add icons, labels or patterns so meaning never depends on colour alone. Ensure enough contrast between text and background, use readable font sizes, and add alt text to visuals. Keep a logical tab order for keyboard users, and offer a table view of chart data. Accessible dashboards are usually clearer for everyone.
150

What questions do you ask a stakeholder before building a dashboard?

Save to ▾
Show answer
Who will use it and what decisions will they make with it? Which three to five questions must it answer? What are the KPI definitions, targets and comparison periods? Which data sources are trusted? How often will they look at it, and on what device? Who needs access and are there security restrictions? What does success look like in a month? I summarise the answers in a short brief and get sign-off before building.
151

Tell me about a time a dashboard you built changed a business decision.

Save to ▾
Show answer
Situation: our operations team assumed late deliveries were evenly spread. Task: I built a delivery performance dashboard. Action: I added a breakdown by courier partner and pin code cluster with a weekly trend, and reviewed it with the operations manager. Result: it showed one partner caused 60 percent of delays in two zones. The company shifted those zones to another partner, and on-time delivery rose from 84 to 92 percent in two months.
152

What is an action title and why should you use one?

Save to ▾
Show answer
An action title states the insight of a chart or slide as a sentence instead of a label. Instead of Monthly Sales by Region, write South region drove 70 percent of the decline since July. Busy executives may read only the titles, so each one should carry the message and, ideally, the so-what. The chart below then proves the title. Read only your titles in order: they should tell the whole story.
153

During a review, an executive asks a question about your numbers that you cannot answer on the spot. What do you do?

Save to ▾
Show answer
Do not guess. Say clearly that you do not have that cut ready, restate the question to confirm it, and give a time by which you will reply, for example by end of day. If you know a partial answer or a reasonable expectation, share it with a caveat. Then follow up on time with a short, precise answer. Being honest and reliable builds more trust than a confident wrong number.
154

How would you present the same churn analysis to the CEO and to the customer support team?

Save to ▾
Show answer
For the CEO, lead with the headline and money: churn rose 2 points, costing about 3 crore annually, mainly from one segment, with two recommended actions and their expected impact, all on one or two slides. For the support team, go deeper into drivers they control: ticket types, resolution times and specific customer pain points, with operational next steps and how progress will be tracked. Same data, different level and call to action.
155

How would you write a short email summarising an analysis for a manager?

Save to ▾
Show answer
Use a clear subject that states the finding, such as Q3 repeat purchase rate fell 4 points, mainly in Tier 2 cities. Open with one or two sentences of the key insight and the recommendation. Follow with three bullet-style lines of supporting evidence with numbers, then any caveats about data, and a clear next step or decision needed with a date. Attach or link the detailed workings instead of pasting large tables.
156

Your findings deck has 30 slides and you have 10 minutes with leadership. How do you cut it down?

Save to ▾
Show answer
Write the single key message first, then keep only slides that directly support it, usually three to five: the headline finding, the main driver, the impact in money, and the recommendation with next steps. Merge related charts, use action titles, and move everything else to an appendix for questions. Rehearse to fit in about seven minutes, leaving time for discussion, because the discussion is where decisions are made.
157

Tell me about a time your analysis was challenged in a meeting.

Save to ▾
Show answer
Situation: while presenting regional sales, a manager said my numbers were wrong because his team's tracker showed more. Task: handle it without derailing the meeting. Action: I acknowledged the concern, explained my source and definition briefly, and offered to reconcile after the meeting. That afternoon we found his tracker counted orders before cancellations. Result: we agreed on net orders as the standard, and he later asked me to rebuild his tracker.
158

Tell me about a time you found a mistake in a report after it had already been shared.

Save to ▾
Show answer
Situation: a day after sending a weekly report, I noticed one region's numbers included test orders. Task: correct it before decisions were made. Action: I quantified the impact, a 3 percent overstatement, and emailed the same audience with the corrected figures, a short explanation and the fix I had added to prevent repeats. Result: my manager appreciated the quick ownership, and the test-order filter became part of our shared dataset.
159

Tell me about a time you disagreed with your manager about how to measure something.

Save to ▾
Show answer
Situation: my manager wanted to report average resolution time for support tickets. Task: I felt a few very old tickets distorted the average. Action: I prepared a quick comparison showing mean versus median and the percentage resolved within 24 hours, and explained why the median was more representative. Result: we agreed to show median and the 24-hour rate, keeping the mean in a tooltip, and the team stopped chasing misleading spikes.
160

What is the grain of a fact table and why should you decide it first?

Save to ▾
Show answer
The grain is the exact meaning of one row in a fact table, such as one order line, one daily store total or one monthly account balance. You decide it first because it controls which dimensions can join, which measures are valid and how totals behave. Mixing grains in one table, for example order lines and order-level shipping charges, causes double counting. Always state the grain in one sentence before adding columns.
161

What are additive, semi-additive and non-additive facts?

Save to ▾
Show answer
Additive facts, like sales amount or quantity, can be summed across every dimension. Semi-additive facts, like account balance or stock on hand, can be summed across accounts or stores but not across time; for time you take the closing or average value. Non-additive facts, like percentages, ratios or unit prices, cannot be summed at all, so you store their components (profit and revenue) and calculate the ratio at query time.
162

What is a conformed dimension?

Save to ▾
Show answer
A conformed dimension is one dimension table with the same keys, attributes and meanings shared by several fact tables. For example, one date and one product dimension used by sales, returns and inventory facts. Because they conform, you can compare sales and returns by the same product category in one report without mismatched definitions. Conformed dimensions are the main way an enterprise warehouse stays consistent across departments.
163

What is a role-playing dimension?

Save to ▾
Show answer
A role-playing dimension is one physical dimension used several times by the same fact table in different roles. The classic case is the date dimension: an orders fact has order date, ship date and delivery date keys, all pointing to the same date table. In SQL you join it three times with different aliases; in Power BI you keep one active relationship and use USERELATIONSHIP or create separate date views for each role.
164

Write SQL to generate a simple date dimension for 2026.

Save to ▾
Show answer
-- PostgreSQL syntax CREATE TABLE dim_date AS SELECT TO_CHAR(d, 'YYYYMMDD')::INT AS date_key, d::DATE AS full_date, EXTRACT(YEAR FROM d) AS year, EXTRACT(QUARTER FROM d) AS quarter, EXTRACT(MONTH FROM d) AS month_no, TO_CHAR(d, 'Mon') AS month_name, TO_CHAR(d, 'Dy') AS weekday, EXTRACT(ISODOW FROM d) IN (6, 7) AS is_weekend FROM GENERATE_SERIES(DATE '2026-01-01', DATE '2026-12-31', INTERVAL '1 day') AS d;
165

Orders arrive in the warehouse with customer IDs that do not exist yet in the customer dimension. What do you do?

Save to ▾
Show answer
These are late-arriving dimensions. Do not drop the orders, or revenue will be understated. Common practice is to insert a placeholder customer row with the natural key and 'Unknown' attributes, link the order to it, and update that row when full details arrive. Alternatively map to a single Unknown member with key -1. Also monitor how many such rows appear daily, because a spike usually means a broken feed.
166

A query on a 2-billion-row fact table in a cloud warehouse scans the whole table even when you filter one week. How do you fix it?

Save to ▾
Show answer
Partition the table by date so the engine can prune partitions outside the filtered week, and cluster or sort by frequently filtered columns such as store or customer. Make sure the filter is on the partition column directly, not wrapped in a function like CAST or DATE_TRUNC that blocks pruning. Select only needed columns, because storage is columnar. For dashboards, also consider a pre-aggregated daily summary table.
167

What is columnar storage and why do analytical warehouses use it?

Save to ▾
Show answer
Columnar storage keeps all values of one column together on disk instead of storing full rows together. Analytical queries usually read a few columns across millions of rows, so the engine reads only those columns. Similar values sit side by side and compress very well, which cuts storage and scan cost. The trade-off is slower single-row inserts and updates, which is why OLTP databases stay row-based.
168

What is the medallion architecture (bronze, silver, gold)?

Save to ▾
Show answer
Medallion architecture organises a lakehouse into three layers. Bronze holds raw data exactly as ingested, for audit and reprocessing. Silver holds cleaned, deduplicated, typed and joined data. Gold holds business-ready tables such as star schemas and aggregates used by dashboards. Each layer is built from the previous one by repeatable jobs, so if a cleaning rule changes you can rebuild silver and gold from bronze.
169

A junior analyst wants to load one huge flat table with every column into Power BI instead of a star schema. How do you advise them?

Save to ▾
Show answer
A flat table is quick to start and fine for a small one-off analysis. But at scale it bloats the model because repeated text attributes compress poorly, makes DAX filters and time intelligence harder, and breaks when you add a second fact like targets or returns. I would show them a star schema with one fact and a few dimensions, compare model size and measure speed, and let the results convince them.
170

Tell me about a time you designed or improved a data model.

Save to ▾
Show answer
Situation: our sales reports used five separate Excel extracts and numbers never matched. Task: build one reliable model. Action: I listed the business questions, fixed the grain at invoice line, built conformed date, product and branch dimensions and moved logic into SQL views, then rebuilt the Power BI reports on top. Result: refresh time dropped from 40 to 6 minutes and month-end reconciliation queries fell sharply.
171

Write an Excel formula to look up a price using two criteria, product and city.

ExcelMedium
Save to ▾
Show answer
=XLOOKUP(1, (A2:A500=G2) * (B2:B500=H2), C2:C500, "Not found") -- A = product, B = city, C = price -- G2 and H2 hold the product and city to find -- each condition returns TRUE/FALSE; multiplying gives 1 only where both match
172

You inherit a monthly Excel report and suspect some numbers are hard-typed over formulas. How do you audit it?

ExcelMedium
Save to ▾
Show answer
Use Go To Special and select Constants with Numbers to highlight hard-typed values inside formula areas. Show Formulas (Ctrl+`) to scan columns for inconsistencies, and use Trace Precedents and Dependents on key totals. Inquire or Spreadsheet Compare, if available, can flag inconsistent formulas. Then fix the overwritten cells, protect formula ranges and add check totals that compare with the source data each month.
173

What is the difference between a calculated table in DAX and a table created in Power Query?

Power BIMedium
Save to ▾
Show answer
A Power Query table is built during data refresh using M, before data enters the model, and is compressed like any imported table. A DAX calculated table is computed after load from other model tables, using functions such as CALENDAR, SUMMARIZE or DISTINCT. Prefer Power Query for shaping and cleaning source data. Use calculated tables for model-dependent needs, such as a date table from existing data or a small what-if table.
174

A measure shows correct values per row in a table visual, but the grand total looks wrong. Why, and how do you fix it?

Power BIMedium
Save to ▾
Show answer
Totals in DAX are not the sum of visible rows; the measure is recalculated in the total's filter context. A measure like a distinct count, a ratio or an IF condition can give a different result at total level. If the business wants the sum of row values, iterate explicitly, for example SUMX ( VALUES ( Product[Name] ), [My Measure] ). Confirm with stakeholders which total is correct before changing it.
175

Write pandas code to find the top 2 products by revenue in each region.

Save to ▾
Show answer
top2 = ( df.groupby(['region', 'product'], as_index=False)['revenue'] .sum() .sort_values(['region', 'revenue'], ascending=[True, False]) .groupby('region') .head(2) ) print(top2)
176

Write SQL to find the median order value overall and per city.

SQLMedium
Save to ▾
Show answer
-- Works in PostgreSQL, Snowflake, SQL Server (with OVER for SQL Server) SELECT city, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY order_value) AS median_value, AVG(order_value) AS mean_value FROM orders GROUP BY city ORDER BY median_value DESC;
177

Many reporting queries in your team use SELECT DISTINCT to remove duplicate rows. What is the risk?

SQLMedium
Save to ▾
Show answer
SELECT DISTINCT often hides a real problem, such as a join on the wrong key or a one-to-many join that multiplies rows. The output looks clean, but sums computed before the DISTINCT, or legitimate repeated rows, can be wrong, and DISTINCT adds a costly sort on large tables. Instead, find why duplicates appear, fix the join or aggregate the child table first, and add a uniqueness test on the key.
178

What are statistical power and minimum detectable effect (MDE)?

Save to ▾
Show answer
Power is the probability that the test detects a real effect of a given size, commonly set at 80%. The minimum detectable effect is the smallest lift you care about and can reliably detect with your sample size. Smaller MDEs, lower baseline rates and higher power all need more users. If you can only get 10,000 users a week, you may only be able to detect large lifts, which should shape what you test.
179

Write Python code to calculate the sample size per group for a conversion test with a 4% baseline and a 10% relative lift.

Save to ▾
Show answer
from statsmodels.stats.power import NormalIndPower from statsmodels.stats.proportion import proportion_effectsize baseline = 0.04 target = baseline * 1.10 # 4.4% effect = proportion_effectsize(target, baseline) n = NormalIndPower().solve_power( effect_size=effect, alpha=0.05, power=0.8, alternative='two-sided' ) print(round(n)) # roughly 39,000 users per group
180

What is the unit of randomisation in an experiment, and how do you choose it?

Save to ▾
Show answer
The unit of randomisation is what gets assigned to control or treatment: a user, a session, a device, a store or a city. Usually it should be the user, so one person always sees the same version. Session-level randomisation can show one user both versions and contaminate results. Your analysis unit should match it; if you randomise by user but analyse per page view, standard errors become too small.
181

What is an A/A test and why would you run one?

Save to ▾
Show answer
An A/A test splits users into two groups that both see the same version. Since nothing differs, you expect no significant difference except about 5% of the time by chance. It checks that randomisation, tracking and the analysis pipeline work correctly, and it reveals sample ratio mismatches or metric variance before real tests depend on the platform. Running many A/A tests also confirms your false positive rate is near 5%.
182

Write Python code to test whether conversion differs between control and treatment.

Save to ▾
Show answer
from statsmodels.stats.proportion import proportions_ztest, proportion_confint conversions = [1180, 1295] # control, treatment visitors = [30000, 30100] z, p = proportions_ztest(conversions, visitors) print(f'z = {z:.2f}, p = {p:.4f}') for c, n in zip(conversions, visitors): low, high = proportion_confint(c, n, method='wilson') print(f'rate {c/n:.3%} 95% CI {low:.3%} to {high:.3%}')
183

Your test increased conversion rate by 3% but average order value dropped by 5%. What do you recommend?

Save to ▾
Show answer
Look at the metric that reflects business value, such as revenue or margin per visitor, which combines both effects. Here revenue per visitor is roughly 1.03 times 0.95, about 2% lower, so the change may hurt. Check whether the drop is significant, which segments drive it, and whether new buyers are making smaller first orders that grow later. Without a strong reason, I would not ship it as is.
184

On day 4 of a planned 14-day test, the product manager wants to stop because the dashboard shows treatment winning. What do you say?

Save to ▾
Show answer
I would explain that early results swing a lot and stopping on a good day inflates false positives, and that four days miss weekly patterns like weekend shopping. I would show how the lift has moved day by day and agree to the planned end date. If speed really matters, we can agree a sequential testing rule for future tests, but changing the rule mid-test after seeing data is not valid.
185

Tell me about a time an experiment result went against what the team expected.

Save to ▾
Show answer
Situation: the team was sure a shorter signup form would raise registrations. Task: I owned the test analysis. Action: registrations rose 6%, but I checked the guardrail and found seven-day activation fell, because we had removed a question that personalised onboarding. I shared both results with the segment breakdown. Result: we kept the short form but moved the question to the first screen after signup, which recovered activation.
186

Marketing wants to A/B test two email subject lines on a list of 2,000 subscribers. What do you advise?

Save to ▾
Show answer
With 1,000 per group and a typical click rate of 3%, only a very large difference, roughly 70% relative or more, would be detectable, so a small real lift would look like noise. I would suggest testing on a larger send, pooling several campaigns, or using open-to-click rate with a bigger effect. If they still run it, report the confidence interval and treat the result as directional.
187

Average delivery time improved by 4 minutes, but customer complaints about late deliveries went up. How do you investigate?

Save to ▾
Show answer
An average can improve while the tail gets worse. I would look at the distribution: median, 90th and 95th percentiles and the share of orders beyond the promised time. Then break it down by city, time slot and restaurant to see where late orders cluster. Also check whether promised times changed, whether complaint tracking changed and whether a few very fast orders pulled the mean down.
188

Why would you publish a Tableau data source separately instead of embedding it in each workbook?

TableauMedium
Save to ▾
Show answer
A published data source lives on Tableau Server or Cloud and can be reused by many workbooks. Calculations, joins, field names and extract refresh schedules are defined once, so every report uses the same revenue logic and the database is queried once per refresh instead of once per workbook. You can certify it and set permissions. Embedded sources are fine for a quick personal analysis but drift over time.
189

Write a Tableau calculated field that keeps only sales from the last 30 days.

TableauMedium
Save to ▾
Show answer
// Calculated field: Last 30 Days Flag DATEDIFF('day', [Order Date], TODAY()) <= 29 AND [Order Date] <= TODAY() // Put this field on Filters and keep True. // For a sales measure instead of a filter: // IF DATEDIFF('day', [Order Date], TODAY()) <= 29 THEN [Sales] END
190

Write pandas code to fill missing values in a column with the median of each group.

Save to ▾
Show answer
# Fill missing delivery_days with the median for that city df['delivery_days'] = ( df['delivery_days'] .fillna(df.groupby('city')['delivery_days'].transform('median')) ) # Rows in a city with no values at all stay NaN; fall back to overall median df['delivery_days'] = df['delivery_days'].fillna(df['delivery_days'].median())
191

What is referential integrity and how do orphan records appear in analytics data?

Save to ▾
Show answer
Referential integrity means every foreign key value points to an existing row in the parent table, for example every order's customer_id exists in customers. Orphan records break this rule. They appear when source systems load tables at different times, records are deleted without cascading, or IDs are formatted differently across systems. Detect them with a LEFT JOIN where the parent key is NULL, and decide whether to fix, map or flag them.
192

Your event logs store timestamps in UTC, but the business reports daily sales in IST, and late-night orders land on the wrong day. How do you fix it?

Save to ▾
Show answer
Convert timestamps to the business time zone before deriving the date. IST is UTC plus 5 hours 30 minutes, so an order at 20:00 UTC belongs to the next day in IST. In SQL use AT TIME ZONE or CONVERT_TZ, and in pandas use tz_localize('UTC') followed by tz_convert('Asia/Kolkata'). Store raw UTC, add a local date column in the model, and document which one each report uses.
193

Why do ratio metrics need extra care on a dashboard compared with count metrics?

Save to ▾
Show answer
A ratio like conversion rate or average order value can move because the numerator or the denominator changed, so always show both components nearby. Ratios can look dramatic on small bases, such as 2 of 4 users. They also cannot be averaged across segments; you must divide total numerator by total denominator, otherwise small segments get too much weight. Counts are simpler but need context like trends or targets.
194

Tell me about a time you defined a new metric for a team.

Save to ▾
Show answer
Situation: the support team was judged only on tickets closed, which encouraged rushed replies. Task: propose a better measure. Action: I analysed reopen rates and satisfaction scores, then proposed first-contact resolution rate with clear rules for what counts as resolved. I tested it on three months of history and reviewed edge cases with team leads. Result: it became the main KPI and reopen rates fell 18% in a quarter.
195

Explain the common marketing attribution models.

Save to ▾
Show answer
Attribution decides how credit for a conversion is shared across touchpoints. Last click gives all credit to the final touch, first click to the first one. Linear splits credit equally, time decay gives more to recent touches, and position-based gives most to first and last. Data-driven attribution uses an algorithm on your own paths to estimate each channel's contribution. Each model answers a different question, so state which one a report uses.
196

Write SQL to find the first-touch and last-touch channel for every user who converted.

Save to ▾
Show answer
WITH touches AS ( SELECT t.user_id, t.channel, t.touch_ts, ROW_NUMBER() OVER (PARTITION BY t.user_id ORDER BY t.touch_ts) AS first_rank, ROW_NUMBER() OVER (PARTITION BY t.user_id ORDER BY t.touch_ts DESC) AS last_rank FROM marketing_touches t JOIN conversions c ON c.user_id = t.user_id AND t.touch_ts <= c.converted_ts ) SELECT user_id, MAX(CASE WHEN first_rank = 1 THEN channel END) AS first_touch, MAX(CASE WHEN last_rank = 1 THEN channel END) AS last_touch FROM touches GROUP BY user_id;
197

Write Python code to extract UTM source, medium and campaign from a column of landing page URLs.

Save to ▾
Show answer
import pandas as pd from urllib.parse import urlparse, parse_qs def get_utms(url): params = parse_qs(urlparse(str(url)).query) return pd.Series({ 'source': params.get('utm_source', ['(direct)'])[0].lower(), 'medium': params.get('utm_medium', ['(none)'])[0].lower(), 'campaign': params.get('utm_campaign', ['(not set)'])[0].lower(), }) df[['source', 'medium', 'campaign']] = df['landing_url'].apply(get_utms)
198

Write SQL to calculate open rate and click-through rate for each email campaign.

Save to ▾
Show answer
SELECT s.campaign_id, COUNT(DISTINCT s.user_id) AS delivered, COUNT(DISTINCT o.user_id) AS opened, COUNT(DISTINCT c.user_id) AS clicked, ROUND(100.0 * COUNT(DISTINCT o.user_id) / COUNT(DISTINCT s.user_id), 1) AS open_rate, ROUND(100.0 * COUNT(DISTINCT c.user_id) / COUNT(DISTINCT s.user_id), 1) AS ctr FROM email_sends s LEFT JOIN email_opens o ON o.campaign_id = s.campaign_id AND o.user_id = s.user_id LEFT JOIN email_clicks c ON c.campaign_id = s.campaign_id AND c.user_id = s.user_id WHERE s.status = 'delivered' GROUP BY s.campaign_id;
199

Write pandas code to calculate customer acquisition cost and payback period in months for each channel.

Save to ▾
Show answer
# spend: channel, spend # customers: channel, customer_id, monthly_margin new_cust = customers.groupby('channel').agg( new_customers=('customer_id', 'nunique'), avg_margin=('monthly_margin', 'mean')) summary = spend.groupby('channel')['spend'].sum().to_frame().join(new_cust) summary['cac'] = summary['spend'] / summary['new_customers'] summary['payback_months'] = summary['cac'] / summary['avg_margin'] print(summary.round(1).sort_values('payback_months'))
200

Organic search traffic fell 40% overnight. How do you investigate?

Save to ▾
Show answer
First check whether it is a tracking problem: did the analytics tag break on some templates, did consent settings change, does server log or backend order data show the same fall? If the drop is real, check the search console for impressions and rankings, recent site releases such as changed URLs, missing redirects, noindex tags or robots.txt changes, and whether a search algorithm update or seasonal pattern matches. Then break the drop down by page group.
201

Traffic suddenly doubled from one city, with near-zero engagement time and no conversions. What is happening and what do you do?

Save to ▾
Show answer
This is very likely bot or spam traffic, or a misfiring tag. Check the user agents, IP ranges, hostnames, screen resolutions and landing pages for that traffic. If it is bots, exclude it with filters or data segments in analytics and in your reporting layer, and inform the web team so they can block it. Then restate the affected dashboard numbers, because bots inflate sessions and pull down conversion rate.
202

Analytics shows 1,820 purchases last month but the order database shows 2,150. Which is right, and how do you explain the gap?

Save to ▾
Show answer
The order database is the source of truth for counts and revenue. Analytics usually undercounts because of ad blockers, declined cookie consent, users closing the page before the confirmation tag fires, and payment redirects that break sessions. It can also overcount from duplicate tags on page refresh. Quantify the gap per month; if it is stable around 15%, use analytics for channel mix and trends and the database for totals.
203

Site conversion rate rose from 2.0% to 2.4%, but total revenue stayed flat. What would you check?

Save to ▾
Show answer
Check the components: sessions may have fallen, for example after cutting paid campaigns, which removes low-intent traffic and lifts the rate without new sales. Average order value may have dropped because of discounts or a mix shift towards cheaper products. Also check whether conversion definitions or tracking changed. Revenue equals sessions times conversion rate times AOV, so break down the change across those three factors by channel.
204

Email open rates suddenly jumped from 22% to 45% without any campaign change. Should you celebrate?

Save to ▾
Show answer
No. Privacy features in some mail apps pre-load email images, which fires the open tracking pixel even if the person never reads the email, so open rates get inflated. Check opens by email client to confirm. Move reporting towards clicks, click-to-send rate, conversions and unsubscribes, which reflect real behaviour, and avoid using opens alone to pick winning subject lines or to define engaged subscribers.
205

Tell me about a time you worked with a marketing team to improve a campaign using data.

Save to ▾
Show answer
Situation: a lead generation campaign had a high cost per lead and sales said leads were poor. Task: find what to change. Action: I joined ad data with CRM outcomes and found two audience segments produced most leads but almost no closed deals, while one smaller segment converted well. Result: we moved budget to that segment and changed the form questions; cost per qualified lead fell about 30% in six weeks.
206

Tell me about a time tracking broke and you had to fix the reporting.

Save to ▾
Show answer
Situation: after a checkout redesign, purchases in our analytics fell 35% overnight while orders were normal. Task: find the cause and protect the weekly report. Action: I compared analytics with the order table by page and device, found the purchase tag no longer fired on the new UPI payment success page, and worked with developers to fix it. Result: I backfilled the gap from order data, added a footnote and set up a daily mismatch alert.
207

You must present to the sales team that they missed their quarterly target by 18%. How do you handle it?

Save to ▾
Show answer
Lead with the fact clearly, then show where the gap came from, such as which regions, products or deal stages, so it becomes actionable rather than a blame session. Separate controllable causes like lower conversion from uncontrollable ones like a delayed product launch. Highlight what did work, and end with two or three specific actions and the metrics to track them. Share the numbers with sales leaders privately first, to avoid surprises.
208

Tell me about a time you had to present findings when the data was incomplete.

Save to ▾
Show answer
Situation: leadership wanted the impact of a new store format after three weeks, but two stores had missing POS data. Task: give a useful answer on time. Action: I presented results for the complete stores, showed the range of outcomes if missing stores performed like the best and worst cases, and clearly marked what was unknown. Result: they approved a limited extension, and the final four-week analysis confirmed the early direction.
209

Tell me about a time you retired or consolidated reports that nobody used.

Save to ▾
Show answer
Situation: our team maintained over 60 scheduled reports and spent two days a month fixing them. Task: reduce the load without upsetting users. Action: I checked usage logs, listed reports not opened in 90 days, contacted owners and merged overlapping ones into four dashboards with filters. I archived the rest with a 30-day notice. Result: we retired 38 reports, only two were requested back, and maintenance time halved.
210

Write SQL to find the number of days between each customer's consecutive orders and their average gap.

SQLMedium
Save to ▾
Show answer
WITH gaps AS ( SELECT customer_id, order_date, order_date - LAG(order_date) OVER ( PARTITION BY customer_id ORDER BY order_date) AS days_since_prev FROM orders ) SELECT customer_id, COUNT(*) AS orders, AVG(days_since_prev) AS avg_gap_days FROM gaps GROUP BY customer_id HAVING COUNT(*) > 1; -- order_date is DATE (PostgreSQL); use DATEDIFF in other databases
211

Your scheduled Python report failed silently and nobody noticed for a week. How do you make it reliable?

Save to ▾
Show answer
Add logging to a file or central log, wrap the main steps in try and except that send an alert by email or chat on failure, and exit with a non-zero code so the scheduler marks the job failed. Add data checks, such as row counts above a minimum and no missing dates, before sending output. Use a proper scheduler or orchestrator with retries, and include the data date in every report.
212

Write pandas code to convert daily sales into weekly totals, showing zero for days with no sales.

Save to ▾
Show answer
df['date'] = pd.to_datetime(df['date']) daily = (df.groupby('date')['sales'].sum() .asfreq('D', fill_value=0)) # adds missing days as 0 weekly = daily.resample('W-MON', label='left', closed='left').sum() print(weekly.head()) # W-MON with label/closed left gives weeks starting on Monday
213

Users say a Power BI report still shows yesterday morning's data, although a refresh is scheduled every few hours. What do you check?

Power BIMedium
Save to ▾
Show answer
Open the semantic model's refresh history in the Service to see whether refreshes failed, for example due to expired credentials, an offline gateway or a timeout. Check whether the report is connected to a different copy of the model, whether the source itself was updated, and whether incremental refresh only covers some partitions. Also confirm the schedule time zone. Finally, add a 'data as of' timestamp on the report.
214

Tell me about a time a stakeholder rejected your first dashboard design.

TableauMedium
Save to ▾
Show answer
Situation: I built a Tableau operations dashboard, and the warehouse head said it was too complex to use on the floor. Task: make it useful for them. Action: I watched how supervisors worked, learned they needed three numbers on a tablet every hour, and rebuilt it with large KPI tiles and one drill-down. Result: daily usage went from a handful of users to every shift supervisor within two weeks.

Frequently asked questions

Who should practise medium Data Analytics questions?

Anyone with some hands-on practice: most real interview time is spent on medium questions like these.

How should I practise these?

Answer each question aloud before opening the answer, mark it as solved only when your answer matches the key idea, and save misses to Last-Minute Revision.

Other difficulty levels