Skip to content

Zerodha Data Analytics Interview Questions & Answers

Curated interview practice questions with answers. These are practice scenarios, not a verified list of past interview questions.

About Zerodha hiring for Data Analytics roles

Zerodha is an Indian stockbroker known for discount brokerage and platforms like Kite, Console and Coin. It runs a relatively small in-house technology team that builds trading and back-office systems. Hiring for technical and analytics roles is limited and tends to value practical skills, open-source work and self-learning.

For Data Analytics roles, this Zerodha practice set focuses most on Power BI (6), Data Cleaning (6), Statistics and Case Studies (6), Tableau (4). It has 4 easy, 33 medium, 3 hard questions, so you can start easy and work up to the harder ones.

Company type
Fintech
Headquarters
Bengaluru, India
Main India offices
Bengaluru

Zerodha Data Analytics interview process

  1. Application review (projects or GitHub)
  2. Technical discussion
  3. Assignment or practical task
  4. Founder or team round

Typical pattern based on public candidate experiences. Rounds vary by role, team and year.

Solved for ZerodhaStart 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

What is a dataflow in Power BI?

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.
02

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
03

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.
04

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

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])
05

How would you design a sales dashboard for executives?

Save to ▾
Show answer
Start with KPIs (revenue, margin, growth), add trend and comparison to target, allow drill-down by region and product, keep it to one screen and test with the audience.
06

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.
07

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

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
08

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.
09

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

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.
10

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.
11

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

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.
12

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.
13

What is a PivotTable and when do you use it?

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.
14

What is the difference between COUNT, COUNTA and COUNTIF?

Save to ▾
Show answer
COUNT counts numbers, COUNTA counts non-empty cells and COUNTIF counts cells meeting one condition; COUNTIFS handles several conditions.
15

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.
16

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

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.
17

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.
18

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

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.
19

How do you optimise a slow SQL query?

Save to ▾
Show answer
Read the execution plan, add or fix indexes, select only needed columns, filter early, avoid functions on indexed columns, and replace correlated subqueries with joins.
20

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.
21

What is the difference between SUM and SUMX in DAX?

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.
22

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.
23

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;
24

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

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.
25

Import mode vs DirectQuery?

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.
26

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())
27

SUMIFS vs COUNTIFS?

Save to ▾
Show answer
SUMIFS adds values that meet several conditions; COUNTIFS counts rows that meet several conditions. Example: =SUMIFS(Sales, Region, "North", Month, "Jan")
28

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.
29

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.
30

What is a holdout group and why do teams keep one?

Save to ▾
Show answer
A holdout group is a small share of users, often 5-10%, kept out of a feature or of all marketing campaigns for a long time. Comparing them with everyone else shows the cumulative long-term impact, which individual short tests miss, and checks whether many small wins really add up. For example, a notification holdout shows whether push messages raise monthly retention or just shift activity earlier.
31

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.
32

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.
33

How would you reconcile two large lists in Excel?

Save to ▾
Show answer
Use XLOOKUP or COUNTIF to flag missing items in each list, or merge them in Power Query with a full outer join and filter unmatched rows.
34

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.
35

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.
36

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;
37

How do you unpivot a wide monthly sales sheet into a long table in Power Query?

Save to ▾
Show answer
Load the table into Power Query. Select the identifier columns such as Region and Product, then choose Transform, Unpivot Other Columns. The month columns become two columns, Attribute and Value; rename them Month and Sales. Change Month to a date type and Sales to a decimal number. Using Unpivot Other Columns rather than Unpivot Columns means new months added later are picked up automatically on refresh.
38

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

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.
39

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.
40

What types of dashboard actions does Tableau offer?

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.

Tips to crack the Zerodha Data Analytics interview

  • Build and share real projects on GitHub, as Zerodha is known to value practical work and open-source contributions.
  • Read Zerodha Varsity to understand trading, markets and investment concepts in depth.
  • Learn about Zerodha's tech stack and engineering blog, including its use of Go and open-source tools.
  • Keep a one-minute story ready for every project on your CV: problem, your part, tools, result.
  • Practise the hard questions on this page aloud; Zerodha interviewers usually ask follow-ups on your first answer.

Frequently asked questions

How many rounds are there in the Zerodha Data Analytics interview?

Candidates usually go through 4 stages: Application review (projects or GitHub); Technical discussion; Assignment or practical task; Founder or team round. The exact rounds change with the role, team, location and your experience, so confirm the process with the recruiter.

Which topics should I prepare for the Zerodha Data Analytics interview?

This practice set leans on Power BI (6), Data Cleaning (6), Statistics and Case Studies (6), Tableau (4). Revise those first, then practise explaining one or two of your own projects end to end, because most Zerodha interviewers ask you to walk through real work.

Are these the exact questions asked at Zerodha?

No. These are curated practice questions that match the skills and difficulty usually tested in fintech interviews like Zerodha's. They are not a leaked or verified list of past questions.

Where does Zerodha hire Data Analytics professionals in India?

Zerodha has large teams in Bengaluru. Openings and locations change often, so check the Zerodha careers page and filter by city and experience.

Data Analytics questions for similar companies