Curated interview practice questions with answers. These are practice scenarios, not a verified list of past interview questions.
About KPMG hiring for Data Analytics roles
KPMG is one of the Big Four professional services networks, providing audit, tax and advisory services. KPMG in India and its global delivery centres support clients with technology consulting, data and analytics, risk advisory and cybersecurity. It hires in India for analysts and consultants in data analytics, governance and risk, IT audit, testing and ERP implementation.
For Data Analytics roles, this KPMG practice set focuses most on Power BI (7), Python for Analysis (6), Excel (6), Data Cleaning (5). It has 6 easy, 27 medium, 7 hard questions, so you can start easy and work up to the harder ones.
Company type
Consulting
Headquarters
Amstelveen, Netherlands
Main India offices
Gurugram, Bengaluru, Mumbai, Hyderabad, Pune
KPMG Data Analytics interview process
Online assessment or screening test
Technical interview
Managerial or case round
Partner or HR round
Typical pattern based on public candidate experiences. Rounds vary by role, team and year.
Solved for KPMGStart 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
Orders arrive in the warehouse with customer IDs that do not exist yet in the customer dimension. What do you do?
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.
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
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.
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.
07
A measure shows correct values per row in a table visual, but the grand total looks wrong. Why, and how do you fix it?
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.
08
Numbers in an Excel column are stored as text and SUM returns zero. How do you fix it?
Signs are left-aligned numbers, green triangles, and COUNT returning less than COUNTA. Fix options: select the column and use the warning menu Convert to Number; use Data, Text to Columns and Finish; or a helper column with =VALUE(TRIM(A2)). If there are hidden characters, use =VALUE(SUBSTITUTE(TRIM(A2), CHAR(160), "")) to remove non-breaking spaces from web exports. In Power Query, simply change the column type to number.
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.
pd.cut bins values into intervals you define or into equal-width ranges, for example age groups 18-25, 26-35 and 36-50. pd.qcut bins by quantiles so each bin has roughly the same number of rows, for example dividing customers into spend quartiles. Use cut when business-defined boundaries matter and qcut when you want balanced groups such as deciles. Both return a categorical column you can group by.
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.
15
Your A/B test ends with no significant difference. How do you report it?
A flat result is still useful. Report the observed difference with its confidence interval, for example -0.3% to +0.8%, which shows the range of effects still possible. State whether the test had enough power for the planned MDE. If it did, conclude that any effect is probably small and the team can choose based on cost or simplicity. Share learnings so the same idea is not retested blindly.
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.
17
Write a Tableau table calculation for year-over-year sales growth.
// 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
18
Sales dropped 20% last month. How will you analyse it?
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.
19
Your pandas script shows SettingWithCopyWarning and a new column does not update. What is happening and how do you fix it?
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.
20
You inherit a monthly Excel report and suspect some numbers are hard-typed over formulas. How do you audit it?
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.
21
Describe a time you influenced a decision without having formal authority.
Situation: the marketing team planned to spend most of its budget on a channel with high clicks. Task: as the analyst, I believed the channel brought low-quality customers. Action: I built a cohort view showing 90-day repeat purchase and revenue per customer by channel, and walked the marketing lead through it before the planning meeting. Result: they shifted 30 percent of that budget to better channels, and the next quarter's cost per retained customer fell noticeably.
22
What is method chaining in pandas and why is it useful?
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.
23
What is a percentile and what is the interquartile range?
A percentile is the value below which a given percentage of data falls; the 90th percentile delivery time means 90 percent of deliveries were faster. The interquartile range is the 75th percentile minus the 25th percentile, the spread of the middle half. IQR is robust to outliers, and values beyond 1.5 times the IQR from the quartiles are often flagged as outliers in box plots.
24
The CMO asks which marketing channel should lose 20% of its budget. How do you approach it?
I would compare channels on incremental return, not last-click ROAS. Gather spend, attributed conversions under two models, customer quality such as repeat rate and margin, and any lift test or mix model results. Look at diminishing returns: the last rupee in a saturated channel is worth less than the average. Then recommend cutting where marginal return is lowest, ideally phased with a holdout to confirm the impact.
25
A stakeholder wants a 40-column crosstab in Tableau that looks exactly like their Excel sheet. How do you handle it?
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.
26
Write Python code to extract valid 10-digit Indian mobile numbers from a messy text column.
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)
27
Analytics shows 1,820 purchases last month but the order database shows 2,150. Which is right, and how do you explain the gap?
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.
28
Write a DAX measure for year-over-year sales growth percentage.
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
29
Sales data from different countries mixes currencies and some weights are in grams while others are in kilograms. How do you handle it?
Never add mixed units. Identify the unit for each row from a currency or unit column, or infer it from the source system. Convert to one standard, for example INR using a dated exchange rate table joined on transaction date, and kilograms using a conversion factor. Keep the original value and unit columns for audit. Document which rates were used, and flag rows where the unit could not be determined.
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.
31
An inner join between orders and customers returns fewer orders than the orders table has. What could be wrong?
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.
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.
34
Your pandas script takes 40 minutes on 10 million rows. How do you speed it up?
First profile to find the slow step instead of guessing. Common fixes: replace row-wise apply and loops with vectorised operations, convert repeated strings to category dtype, downcast numeric types, read only needed columns with usecols, and filter early. Push heavy joins and aggregations into SQL. If it is still slow, use a columnar engine such as DuckDB or Polars, or store intermediate data as Parquet instead of CSV.
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.
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).
37
Tell me about a time requirements kept changing on a report you were building.
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.
38
Your workbook has 200,000 rows and hundreds of VLOOKUPs and takes minutes to recalculate. What do you do?
First switch calculation to manual to work safely, then find the cause. Replace whole-column references with Tables, swap repeated VLOOKUPs for one XLOOKUP or INDEX-MATCH helper column, and remove volatile functions like OFFSET, INDIRECT and TODAY used in many cells. Better still, move the joins into Power Query or the Data Model so lookups happen once at refresh. Finally paste values for historic data that never changes and keep formulas only where needed.
39
Find customers who ordered in January but not in February.
It automatically formats cells based on rules such as colour scales, data bars or highlighting values above a target, making patterns visible at a glance.
Tips to crack the KPMG Data Analytics interview
Learn basics of IT audit, internal controls and risk frameworks, since advisory roles often combine data with governance work.
Practise structured answers for guesstimates and business problems, explaining assumptions clearly step by step.
Prepare examples of working with stakeholders and meeting deadlines, which are common themes in Big Four interviews.
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; KPMG interviewers usually ask follow-ups on your first answer.
Frequently asked questions
How many rounds are there in the KPMG Data Analytics interview?
Candidates usually go through 4 stages: Online assessment or screening test; Technical interview; Managerial or case round; Partner or HR 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 KPMG Data Analytics interview?
This practice set leans on Power BI (7), Python for Analysis (6), Excel (6), Data Cleaning (5). Revise those first, then practise explaining one or two of your own projects end to end, because most KPMG interviewers ask you to walk through real work.
Are these the exact questions asked at KPMG?
No. These are curated practice questions that match the skills and difficulty usually tested in consulting interviews like KPMG's. They are not a leaked or verified list of past questions.
Where does KPMG hire Data Analytics professionals in India?
KPMG has large teams in Gurugram, Bengaluru, Mumbai, Hyderabad, Pune. Openings and locations change often, so check the KPMG careers page and filter by city and experience.