ThoughtSpot Data Analytics Interview Questions & Answers
Curated interview practice questions with answers. These are practice scenarios, not a verified list of past interview questions.
About ThoughtSpot hiring for Data Analytics roles
ThoughtSpot is an analytics software company known for search and AI-driven business intelligence that lets users ask questions of data in natural language. Its platform connects to cloud data warehouses and creates interactive charts and dashboards. It has an engineering presence in India and hires software engineers, data engineers, quality engineers and customer-facing technical roles.
For Data Analytics roles, this ThoughtSpot practice set focuses most on Python for Analysis (6), SQL (4), Excel (4), Web & Marketing Analytics (4). It has 26 medium, 14 hard questions, so you can start easy and work up to the harder ones.
Company type
Product
Headquarters
Mountain View, California, USA
Main India offices
Bengaluru
ThoughtSpot Data Analytics interview process
Online coding assessment
Technical round 1 (DSA)
Technical round 2 (system design or domain)
Hiring manager round
Typical pattern based on public candidate experiences. Rounds vary by role, team and year.
Solved for ThoughtSpotStart 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 would you find customers who never placed an order?
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.
# 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())
06
Write a Tableau calculation to find each customer's first purchase date and flag new versus repeat orders.
// 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])
07
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.
08
Your analysis shows that a flagship initiative championed by leadership is not working. How do you present it?
Prepare carefully and stay factual. Share the finding early with the initiative owner privately so they are not surprised in a big meeting. Lead with the question asked, the method and the evidence, acknowledge limitations and what is working, and avoid blaming anyone. Offer options, such as fixing a specific step, narrowing the scope or stopping, with estimated impact. Bad news delivered with solutions is received far better.
09
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.
10
Write a Tableau calculated field that keeps only sales from the last 30 days.
// 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
11
Write SQL to find the top 3 products by revenue within each category.
WITH ranked AS (
SELECT category,
product,
SUM(amount) AS revenue,
DENSE_RANK() OVER (
PARTITION BY category
ORDER BY SUM(amount) DESC
) AS rnk
FROM sales
GROUP BY category, product
)
SELECT category, product, revenue
FROM ranked
WHERE rnk <= 3
ORDER BY category, rnk;
-- 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
14
What is the difference between a clustered and a non-clustered index?
Start from the business questions, show 4–6 top KPIs with trend vs target, allow drill-downs, keep colours consistent, remove clutter, add time/region filters and give one clear insight per visual.
17
Write pandas code to find the top 2 products by revenue in each region.
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.
19
Write SQL to group raw page events into sessions using a 30-minute inactivity rule.
WITH ordered AS (
SELECT user_id, event_ts,
LAG(event_ts) OVER (PARTITION BY user_id ORDER BY event_ts) AS prev_ts
FROM page_events
),
flagged AS (
SELECT *,
CASE WHEN prev_ts IS NULL
OR event_ts - prev_ts > INTERVAL '30 minutes'
THEN 1 ELSE 0 END AS new_session
FROM ordered
)
SELECT user_id, event_ts,
SUM(new_session) OVER (PARTITION BY user_id ORDER BY event_ts) AS session_no
FROM flagged;
20
What KPIs would you track for a customer support call centre?
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.
21
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.
Peeking means checking the p-value repeatedly during a test and stopping as soon as it drops below 0.05. Each look is another chance for random noise to look significant, so the real false positive rate can rise from 5% to 20% or more. Fix it by fixing the sample size in advance and analysing once, or by using methods built for continuous monitoring, such as sequential testing or always-valid confidence intervals.
23
When would you drop missing values, and when would you impute with mean or median?
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.
24
A stakeholder wants 20 more visuals added to an already crowded dashboard page. How do you respond?
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.
25
Write SQL to get each order's customer city as it was on the order date, using an SCD Type 2 customer dimension.
-- dim_customer has valid_from, valid_to (NULL for current row)
SELECT o.order_id,
o.order_date,
c.customer_id,
c.city
FROM fact_orders o
JOIN dim_customer c
ON c.customer_id = o.customer_id
AND o.order_date >= c.valid_from
AND o.order_date < COALESCE(c.valid_to, DATE '9999-12-31');
26
Tell me about a time you mentored or guided a junior analyst.
Situation: a new analyst on my team kept getting review comments for inconsistent numbers. Task: help him become independent. Action: I paired with him on two reports, shared a checklist covering definitions, row-count checks and chart standards, and set a weekly 30-minute review where he presented his work. Result: within six weeks his reports passed review with minor edits, and the checklist became part of team onboarding.
27
Write Python code to fit a simple linear regression of sales on ad spend.
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.
29
Write pandas code to convert daily sales into weekly totals, showing zero for days with no sales.
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
31
How would you present the same churn analysis to the CEO and to the customer support team?
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.
32
A stakeholder says the Power BI report shows different revenue than their Excel file. How do you troubleshoot?
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.
33
Write a DAX measure that counts new customers, meaning customers who bought in the selected period but never before it.
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.
35
Write Python code to bootstrap a 95% confidence interval for the difference in revenue per user between two groups.
-- create an inactive relationship Sales[ShipDate] -> 'Date'[Date] in the model
Sales by Ship Date =
CALCULATE(
[Total Sales],
USERELATIONSHIP(Sales[ShipDate], 'Date'[Date])
)
-- the measure uses the inactive relationship only inside this CALCULATE
-- the alternative is a second role-playing date table
37
Write Python code to extract UTM source, medium and campaign from a column of landing page URLs.
Keep two fact tables at their natural grains: fact_sales at order line and fact_target at region-month. Never spread targets onto order lines. Both share conformed dimensions at a common level, such as a month attribute in the date dimension and region in the geography dimension. In reports, compare them only at month and region or higher. In Power BI, relate targets to month-level or region-level tables, not to daily keys.
39
You share a forecasting workbook and users keep overwriting formulas. How do you protect it?
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.
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.
Tips to crack the ThoughtSpot Data Analytics interview
Practise DSA problems carefully, as engineering interviews at product analytics companies often focus on strong problem-solving fundamentals.
Revise SQL, query execution basics and data warehouse concepts to discuss how analytics queries run on large datasets.
Try the product's free trial or demos so you can talk about search-based analytics from a user's perspective.
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; ThoughtSpot interviewers usually ask follow-ups on your first answer.
Frequently asked questions
How many rounds are there in the ThoughtSpot Data Analytics interview?
Candidates usually go through 4 stages: Online coding assessment; Technical round 1 (DSA); Technical round 2 (system design or domain); Hiring manager 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 ThoughtSpot Data Analytics interview?
This practice set leans on Python for Analysis (6), SQL (4), Excel (4), Web & Marketing Analytics (4). Revise those first, then practise explaining one or two of your own projects end to end, because most ThoughtSpot interviewers ask you to walk through real work.
Are these the exact questions asked at ThoughtSpot?
No. These are curated practice questions that match the skills and difficulty usually tested in product interviews like ThoughtSpot's. They are not a leaked or verified list of past questions.
Where does ThoughtSpot hire Data Analytics professionals in India?
ThoughtSpot has large teams in Bengaluru. Openings and locations change often, so check the ThoughtSpot careers page and filter by city and experience.