skip to content

BI & Visualization

The tools where analysis becomes something other people look at: Tableau, Power BI, Looker, Qlik, and the Python data-app frameworks. Interviewers ask because dashboards are where modelling mistakes become visible and where performance complaints start.

on this pageshow

explore

questions

100 · 7 sections

In Tableau, what is the difference between a row-level and an aggregate calculated field?

level: juniorimportance: must knowfreq 76%
basics
~20 s

A row-level calculation evaluates once per underlying data row and can be used as a dimension. An aggregate calculation such as SUM([Profit])/SUM([Sales]) evaluates once per mark, after Tableau groups rows to the view's level of detail.

open as a page

In Tableau, what is the difference between a live connection and an extract?

level: juniorimportance: must knowfreq 84%
basics
~20 s

A live connection sends generated queries to the source database every time a view renders, so it always shows current data. An extract is a snapshot of the data stored in Tableau's own columnar Hyper file, refreshed on a schedule.

open as a page

In Tableau, why does changing a parameter value not filter the view by itself?

level: juniorimportance: must knowfreq 78%
basics
~20 s

A Tableau parameter is a typed single-value variable, not a filter. It is bound to no field, so it changes nothing until something references it: a calculated field, a top-N setting, a bin size, a set condition, or a reference line.

open as a page

In Tableau, what's the difference between publishing a workbook and publishing a data source?

level: juniorimportance: must knowfreq 60%
basics
~20 s

Publishing a workbook uploads the sheets and dashboards, and by default a private copy of their connection and extract. Publishing a data source uploads the connection, model and extract on its own, so many workbooks share one governed, separately refreshed copy.

open as a page

In Tableau, what is the difference between a dimension and a measure?

level: juniorimportance: must knowfreq 85%
basics
~20 s

In Tableau, dimensions are categorical fields that slice a view and set its granularity; measures are numeric fields that get aggregated inside each slice, SUM by default. Any field can be converted between the two roles.

open as a page

In Power BI, when should a calculation be a calculated column instead of a DAX measure?

level: juniorimportance: must knowfreq 85%
basics
~20 s

Use a calculated column when the value must physically exist per row — for slicers, axes, grouping or relationship keys. Use a measure for anything aggregated, because measures are computed at query time and store nothing in the model.

open as a page

In Power Query, how does Merge Queries differ from Append Queries?

level: juniorimportance: must knowfreq 70%
basics
~20 s

Merge Queries joins two Power Query queries side by side on matching key columns, producing a wider table. Append Queries stacks their rows, producing a taller table. Merge is a SQL-style join; Append behaves like UNION ALL.

open as a page

In a Power BI report, what happens to other visuals when you click a bar in one chart?

level: juniorimportance: must knowfreq 72%
basics
~20 s

By default the clicked point cross-highlights the page: other charts keep their full bars but shade the selected share, while tables, matrices and cards are filtered outright. Edit interactions sets each target visual to Filter, Highlight or None.

open as a page

When you publish a Power BI Desktop file to a workspace, what items appear in the Service?

level: juniorimportance: must knowfreq 70%
basics
~10 s

Publishing a .pbix creates two workspace items: the report (pages and visuals) and the semantic model (queries, relationships, DAX and imported data). A file that live-connects to an existing model publishes the report only.

open as a page

In Power BI, what do a relationship's cardinality and cross-filter direction control?

level: middleimportance: must knowfreq 75%
basics
~20 s

Cardinality declares which side of the relationship holds unique key values; cross-filter direction declares which way a filter travels along it. A one-to-many relationship filters from the one side down to the many side, and by default not back.

open as a page

In Looker, what is the difference between a LookML view and an explore?

level: juniorimportance: must knowfreq 76%
basics
~20 s

A LookML view declares the fields — dimensions and measures — available from one table. An explore is the query entry point declared in the model file: it names a base view, joins other views to it, and is what users actually open.

open as a page

In Looker, why does a summed order amount inflate after joining order items?

level: middleimportance: must knowfreq 55%
basics
~20 s

Joining a one-to-many table fans out the base rows, so a plain SUM adds each order's amount once per matching item. Looker normally corrects this with symmetric aggregates, but only when the view declares a primary key and the measure uses a typed aggregate.

open as a page

In LookML, how do dimensions and measures differ in the SQL Looker generates?

level: middleimportance: should knowfreq 68%
basics
~10 s

A LookML dimension becomes a non-aggregated expression that lands in SELECT and GROUP BY. A measure becomes an aggregate such as SUM or COUNT. Measures may reference dimensions; dimensions may never reference measures.

open as a page

In Looker, how do access_filter and user attributes limit rows an explore returns?

level: seniorimportance: should knowfreq 46%
basics
~20 s

An access_filter declared on a Looker explore maps a field to a user attribute, so every query that explore generates gets a WHERE clause built from the signed-in user's attribute value. It is query-time filtering by the model layer, not database-level security.

open as a page

When should logic live in a Looker PDT rather than an upstream warehouse table?

level: principalimportance: should knowfreq 36%
basics
~20 s

Keep logic in a Looker persistent derived table when it is BI-specific shaping and iteration speed matters. Move it upstream when other tools consume the same result, or when it needs tests, lineage and orchestration alongside the rest of the pipeline.

open as a page

In Qlik Sense, what do the green, white and grey field values mean after a selection?

level: juniorimportance: must knowfreq 75%
basics
~20 s

Green marks the values you selected, white marks values still possible given those selections, and grey marks values ruled out. Qlik keeps the ruled-out values on screen, so absence of data is visible rather than silently filtered away.

open as a page

In Qlik, what does Sum({<Year={2023}>} Sales) return when the user has selected Year 2024?

level: middleimportance: must knowfreq 65%
basics
~10 s

It returns 2023 sales. The set modifier replaces the user's Year selection for that one aggregation only, while every other current selection still applies, and the rest of the app keeps showing 2024.

open as a page

In a Qlik load script, why do two tables sharing two field names produce a synthetic key?

level: middleimportance: should knowfreq 52%
basics
~20 s

Qlik associates tables automatically on identically named fields. With two names in common there is no single key to associate on, so the engine generates a hidden $Syn table holding the distinct combinations of those fields and links both tables to it.

open as a page

In Qlik Sense, what fails first as an app's in-memory model outgrows the server's RAM?

level: seniorimportance: should knowfreq 42%
basics
~20 s

Reloads fail first. The engine builds the new model while the previous one is still resident and serving users, so a reload needs headroom well above the app's steady-state footprint. Chart calculation under concurrency degrades next.

open as a page

When would you standardize an organization on Qlik's associative model over a SQL-generating BI tool?

level: principalimportance: nice to knowfreq 25%
basics
~20 s

Choose Qlik when free exploration across messy, multi-source data matters more than a single warehouse-side metric definition, and the organization can pay in RAM and reload latency. Choose a SQL-generating tool when the warehouse is already the governed source of truth.

open as a page

In an Excel PivotTable, why does a numeric field default to Count instead of Sum?

level: juniorimportance: must knowfreq 60%
basics
~20 s

A PivotTable uses Sum only when every cell in that source column is numeric. One blank or one number stored as text makes it fall back to Count. Fix the source column and refresh rather than just switching the setting.

open as a page

In Excel, what does XLOOKUP do that VLOOKUP cannot?

level: juniorimportance: must knowfreq 70%
basics
~20 s

XLOOKUP takes a separate lookup array and return array, so it can return values to the left of the key, defaults to exact match, and accepts a built-in not-found value. VLOOKUP scans only the first column and returns by column number.

open as a page

In Excel, why do IDs like 00123 or SEP-1 change when you open a CSV?

level: middleimportance: should knowfreq 45%
basics
~20 s

A CSV carries no types, so Excel guesses per value: 00123 parses as the number 123, SEP-1 as a date, and long digit strings keep only 15 significant digits. Import through Get Data with the column typed as Text instead.

open as a page

When a business-critical Excel workbook becomes a production pipeline, what breaks first?

level: seniorimportance: should knowfreq 50%
basics
~20 s

Correctness fails long before performance does. With no diff, no review and no tests, hardcoded plugs and drifted formulas ship wrong numbers silently, while a manual refresh ritual known to one person becomes the real single point of failure.

open as a page

How do you decide which parts of a team's Excel reporting to replace with a BI tool?

level: principalimportance: should knowfreq 30%
basics
~20 s

Replace what repeats on a schedule, is shared across teams, or carries a definition others depend on. Leave ad-hoc exploration, what-if modelling and human judgment inputs in Excel, give those inputs a governed home, and never remove the export path.

open as a page

In Streamlit, what happens to your Python script when a user moves a slider?

level: juniorimportance: must knowfreq 80%
basics
~10 s

Streamlit re-executes the whole script from top to bottom, and st.slider returns the new value on that run. Ordinary local variables are rebuilt from scratch; only session state and cached results survive between runs.

open as a page

In Streamlit, why does a counter variable reset unless it lives in st.session_state?

level: middleimportance: must knowfreq 70%
basics
~20 s

Each interaction re-executes the script from the top, so ordinary variables are re-initialised every run. st.session_state is a dict-like store tied to one browser session that Streamlit keeps across reruns, so values placed there persist.

open as a page

In Streamlit, when do you use st.cache_data instead of st.cache_resource?

level: middleimportance: should knowfreq 60%
basics
~20 s

Use st.cache_data for serializable return values such as DataFrames and API responses, where each caller gets its own copy. Use st.cache_resource for a single shared object like a database connection or a loaded model, returned by reference.

open as a page

In Streamlit, what is shared between two users of the same deployed app, and what is not?

level: seniorimportance: should knowfreq 42%
basics
~20 s

Each browser session gets its own script run and its own st.session_state. The Python process, module-level globals and everything in st.cache_data or st.cache_resource are shared by all sessions on that server, so shared mutable state is global by accident.

open as a page

When is a Streamlit app the right answer instead of a governed BI dashboard?

level: principalimportance: should knowfreq 30%
basics
~20 s

Choose Streamlit when the artifact is a Python workflow rather than a chart — simulations, model scoring, triage and writeback — for a small internal audience. You then own authentication, permissions, refresh, alerting, discoverability and metric consistency yourself.

open as a page

In Plotly Dash, how does a component id in app.layout connect to a callback?

level: juniorimportance: must knowfreq 72%
basics
~20 s

Each Dash component in the layout carries an id. A callback names that id plus a property — Input('dropdown','value'), Output('chart','figure') — and Dash wires them by matching the id string, so a typo silently means no wiring.

open as a page

In Plotly Dash, what is the difference between Input and State in a callback?

level: middleimportance: must knowfreq 68%
basics
~20 s

Both pass a component property into a Dash callback, but only Input triggers it. State values are read at fire time without causing a fire, which is how you build a form that recomputes on a button click rather than on every keystroke.

open as a page

In Plotly Dash, how does the callback model differ from Streamlit's script rerun?

level: middleimportance: should knowfreq 58%
basics
~20 s

Streamlit reruns the whole script top to bottom on every interaction, with per-session state kept by the server. Dash runs only the callbacks whose declared inputs changed, on a stateless server, with state living in the browser.

open as a page

Why does a Plotly Dash app that caches a DataFrame in a global break with many users?

level: seniorimportance: should knowfreq 48%
basics
~20 s

Dash callbacks are independent stateless requests. A module-level global is shared by every user of a worker process and absent from the other workers, so users see each other's filtered data or inconsistent results depending on which process answered.

open as a page

In Plotly Dash, how do you stop a 60-second query in a callback from freezing the app?

level: seniorimportance: nice to knowfreq 32%
basics
~20 s

Move the work off the request thread with a Dash background callback, which hands the job to a Celery or Diskcache manager and polls for the result. Add a running spec to disable the button and a cancel input, and show progress rather than a frozen page.

open as a page