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 pageshowhide
explore
- Tableau36 questions
- Data Connections6 questions
- Worksheets and Marks6 questions
- Calculated Fields and LOD6 questions
- Filters and Parameters6 questions
- Dashboards and Actions6 questions
- Publishing and Tableau Server6 questions
- Power BI36 questions
- Power Query (M)6 questions
- Data Modeling6 questions
- DAX Measures7 questions
- Report Visuals5 questions
- Power BI Service6 questions
- Row-Level Security6 questions
- Looker6 questions
- Qlik5 questions
- Excel6 questions
- Streamlit6 questions
- Plotly Dash5 questions
questions
100 · 7 sectionsIn Tableau, what is the difference between a row-level and an aggregate calculated field?
basics
~20 sA 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.
In Tableau, what is the difference between a live connection and an extract?
basics
~20 sA 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.
In Tableau, why does changing a parameter value not filter the view by itself?
basics
~20 sA 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.
In Tableau, what's the difference between publishing a workbook and publishing a data source?
basics
~20 sPublishing 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.
In Tableau, what is the difference between a dimension and a measure?
basics
~20 sIn 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.
In Power BI, when should a calculation be a calculated column instead of a DAX measure?
basics
~20 sUse 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.
In Power Query, how does Merge Queries differ from Append Queries?
basics
~20 sMerge 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.
In a Power BI report, what happens to other visuals when you click a bar in one chart?
basics
~20 sBy 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.
When you publish a Power BI Desktop file to a workspace, what items appear in the Service?
basics
~10 sPublishing 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.
In Power BI, what do a relationship's cardinality and cross-filter direction control?
basics
~20 sCardinality 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.
In Looker, what is the difference between a LookML view and an explore?
basics
~20 sA 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.
In Looker, why does a summed order amount inflate after joining order items?
basics
~20 sJoining 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.
In LookML, how do dimensions and measures differ in the SQL Looker generates?
basics
~10 sA 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.
In Looker, how do access_filter and user attributes limit rows an explore returns?
basics
~20 sAn 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.
When should logic live in a Looker PDT rather than an upstream warehouse table?
basics
~20 sKeep 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.
In Qlik Sense, what do the green, white and grey field values mean after a selection?
basics
~20 sGreen 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.
In Qlik, what does Sum({<Year={2023}>} Sales) return when the user has selected Year 2024?
basics
~10 sIt 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.
In a Qlik load script, why do two tables sharing two field names produce a synthetic key?
basics
~20 sQlik 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.
In Qlik Sense, what fails first as an app's in-memory model outgrows the server's RAM?
basics
~20 sReloads 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.
When would you standardize an organization on Qlik's associative model over a SQL-generating BI tool?
basics
~20 sChoose 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.
In an Excel PivotTable, why does a numeric field default to Count instead of Sum?
basics
~20 sA 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.
In Excel, what does XLOOKUP do that VLOOKUP cannot?
basics
~20 sXLOOKUP 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.
In Excel, why do IDs like 00123 or SEP-1 change when you open a CSV?
basics
~20 sA 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.
When a business-critical Excel workbook becomes a production pipeline, what breaks first?
basics
~20 sCorrectness 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.
How do you decide which parts of a team's Excel reporting to replace with a BI tool?
basics
~20 sReplace 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.
In Streamlit, what happens to your Python script when a user moves a slider?
basics
~10 sStreamlit 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.
In Streamlit, why does a counter variable reset unless it lives in st.session_state?
basics
~20 sEach 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.
In Streamlit, when do you use st.cache_data instead of st.cache_resource?
basics
~20 sUse 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.
In Streamlit, what is shared between two users of the same deployed app, and what is not?
basics
~20 sEach 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.
When is a Streamlit app the right answer instead of a governed BI dashboard?
basics
~20 sChoose 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.
In Plotly Dash, how does a component id in app.layout connect to a callback?
basics
~20 sEach 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.
In Plotly Dash, what is the difference between Input and State in a callback?
basics
~20 sBoth 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.
In Plotly Dash, how does the callback model differ from Streamlit's script rerun?
basics
~20 sStreamlit 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.
Why does a Plotly Dash app that caches a DataFrame in a global break with many users?
basics
~20 sDash 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.
In Plotly Dash, how do you stop a 60-second query in a callback from freezing the app?
basics
~20 sMove 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.