Power BI Tutorial for Beginners: Build Your First Dashboard

7 min read

Power BI turns a table of raw rows into a dashboard that refreshes on a schedule. Six steps get you there: load the data, clean it in Power Query, connect your tables into a model, write a few DAX measures, place visuals on a canvas, and publish. Power BI Desktop costs nothing, so the only real barrier is knowing which button does what.

This tutorial builds one report end to end using shipment data from a Pune logistics firm. There are no screenshots, which is deliberate: every click path is written out in full, and every measure is given as text you can type straight in.

The three things people call Power BI

Power BI Desktop is the free Windows application where you build, saving work as a .pbix file that holds the data, model and visuals together. Power BI Service is the website where you publish that file so colleagues can open it, and where scheduled refresh is configured. Power BI Mobile renders published reports on a phone.

Desktop runs on Windows only, so Mac users need a Windows virtual machine or a cloud Windows desktop. Building is free; sharing a report needs a paid per-user licence.

The data used throughout

One scenario runs through this article: a Pune logistics firm moving consignments out of four branches. shipments is the fact table, one row per consignment:

shipment_id ship_date branch_id revenue weight_kg on_time
5001 2026-04-02 B1 18400 620 Yes
5002 2026-04-02 B2 9250 310 No
5003 2026-04-05 B3 27600 940 Yes

branches is a lookup table, one row per branch:

branch_id branch_name city region
B1 Hadapsar Pune West
B2 Bhosari Pune West
B3 Hubballi Hubballi South

The real file has forty thousand rows. What matters is the shape: one long transaction table plus short lookup tables that describe it.

The Power BI Desktop window, described

The ribbon runs along the top, and Home carries the two buttons you will use most, Get data and Transform data. The middle is the canvas, blank at first, where visuals go. Down the right sit three stacked panes: Filters, then Visualizations (chart icons over a set of empty field wells), then Data (your tables, expandable to show their columns).

Down the far left edge are three icons that switch views. Report view, a chart icon, is the canvas. Table view, a grid icon, shows your data as rows and is labelled Data view in older builds. Model view, three linked boxes, is the relationship diagram.

Step 1: Get the data in

Step Click path What happens
1 Home ribbon, Get data A short menu of common sources: Excel, Text/CSV, SQL Server, Web
2 Get data, then More The full connector list, well over a hundred sources
3 Choose the file or server Navigator opens, listing the sheets or tables it found
4 Tick your tables, then Transform Data Power Query Editor opens, data loaded but not committed

Take Transform Data rather than Load, every time. Load drops raw data into the model, and you end up cleaning it later with visuals already sitting on top of it.

Step 2: Clean it in Power Query

Power Query Editor is a separate window: queries down the left, a data preview in the middle, and an Applied Steps list on the right recording every change in order. That list is the point of it. Clean a column in Excel and you have cleaned it once; clean it here and the step replays on every refresh.

Transform Where it is What it does When you need it
Remove Columns Home ribbon, Manage Columns Drops columns from the load entirely Almost always; free-text columns bloat a model
Change Type Transform ribbon, Data Type Sets a column to text, number, decimal or date When dates or amounts arrive as text
Unpivot Columns Transform ribbon, or right-click a header Turns wide columns into rows Monthly figures spread across twelve columns
Merge Queries Home ribbon Joins two queries on a key, much like a SQL join Attaching a lookup value before load
Close and Apply Home ribbon, far left Commits every step and loads into the model Once the cleaning is done

Unpivot is the one beginners never find and then use constantly: finance teams hand over sheets with a column per month, and Power BI wants a date column and a value column.

Step 3: Build the model

Switch to Model view. Drag branch_id from shipments onto branch_id in branches, and Power BI draws a relationship line with a 1 at the branches end and an asterisk at the shipments end. Read that as one branch, many shipments. Filters flow from the one side to the many side, which is why clicking Hubballi on a slicer filters the shipment list and not the reverse.

The shape you want is a star: one fact table in the middle, lookup tables around it, each joined by a single relationship.

Add a proper date table. Time intelligence in DAX does not behave reliably against a date column living inside a fact table. Build one: Modeling ribbon, New table, write a CALENDAR expression, then select the new table, open Table tools and click Mark as date table.

Turn off auto date/time. File, Options and settings, Options, Data Load, and clear the “Auto date/time for new files” box. Left on, it builds a hidden date table behind every date column in the file, for no benefit once you have your own.

Step 4: Write the measures in DAX

DAX is the formula language, and it builds two things beginners routinely confuse. A calculated column is worked out row by row when the data refreshes, and stored in the file. A measure is worked out at the moment a visual asks for it, inside whatever filters that visual has. Revenue per kilo on an individual row is a column; total revenue for whatever the reader has clicked is a measure. When in doubt, write a measure.

To create one: Home ribbon, New measure, then type the definition into the formula bar. The table below covers most beginner reporting, with syntax and a worked example against the tables above.

Function What it does Syntax Example
SUM Adds up a numeric column SUM(table[column]) Total Revenue = SUM(shipments[revenue])
COUNTROWS Counts rows in a table COUNTROWS(table) Shipment Count = COUNTROWS(shipments)
DISTINCTCOUNT Counts unique values in a column DISTINCTCOUNT(table[column]) Active Branches = DISTINCTCOUNT(shipments[branch_id])
DIVIDE Divides safely, returning blank not an error DIVIDE(numerator, denominator) Revenue per Kg = DIVIDE([Total Revenue], SUM(shipments[weight_kg]))
CALCULATE Evaluates an expression after changing filters CALCULATE(expression, filter) On Time = CALCULATE(COUNTROWS(shipments), shipments[on_time] = “Yes”)
FILTER Returns a filtered copy of a table FILTER(table, condition) Big Jobs = COUNTROWS(FILTER(shipments, shipments[revenue] > 20000))
SUMX Evaluates row by row, then sums the results SUMX(table, expression) Handling Cost = SUMX(shipments, shipments[weight_kg] * 12)
RELATED Pulls a value across a relationship RELATED(table[column]) Branch City = RELATED(branches[city])
CALENDAR Generates a date table between two dates CALENDAR(start date, end date) Date = CALENDAR(DATE(2024,4,1), DATE(2027,3,31))
SAMEPERIODLASTYEAR Shifts the date filter back one year SAMEPERIODLASTYEAR(date column) LY Revenue = CALCULATE([Total Revenue], SAMEPERIODLASTYEAR(‘Date'[Date]))
VAR and RETURN Holds an intermediate result for readability VAR name = expression RETURN result VAR t = [Total Revenue] RETURN DIVIDE(t, 100000)

Four measures give the Pune firm a usable dashboard, and every visual on the page can then reuse them.

Measure Definition
Total Revenue SUM(shipments[revenue])
Shipment Count COUNTROWS(shipments)
On Time Rate DIVIDE(CALCULATE(COUNTROWS(shipments), shipments[on_time] = “Yes”), COUNTROWS(shipments))
Revenue per Kg DIVIDE([Total Revenue], SUM(shipments[weight_kg]))

Select On Time Rate, open Measure tools and set Format to Percentage; that formatting follows the measure into every visual.

Step 5: Put visuals on the canvas

Back in Report view, click a chart icon in the Visualizations pane and an empty visual lands on the canvas. With it selected, drag fields from the Data pane into the wells below.

Visual Good for Category well Values well
Card One headline number nothing Total Revenue
Clustered column chart Comparing a measure across categories branch_name Total Revenue
Line chart A measure moving over time Date, from the date table Total Revenue
Stacked bar chart Composition inside each category city, with on_time as legend Shipment Count
Slicer Letting the reader filter the page region nothing

The Filters pane works at three levels worth keeping apart: this visual affects one chart, this page affects one tab, all pages affects the report. Beginners filter each visual separately, then wonder why two charts disagree.

Step 6: Publish and refresh

Home ribbon, Publish, sign in, choose a workspace. The file uploads and the Service hands you a link.

A published report holds a snapshot of the data as of the last refresh, not a live view of the source. In the Service, open the settings for the published semantic model and set a schedule; Pro workspaces allow up to eight scheduled refreshes a day as the limits currently stand, so check yours. If the source is a database or a file on an office machine rather than in the cloud, you also need the on-premises data gateway running on a machine that stays switched on.

The mistakes beginners actually make

Building calculated columns where measures belong. Columns are stored, so several across a large table make the file heavy. Worse, a ratio computed row by row gives the wrong answer once aggregated, because the average of per-row percentages is not the overall percentage.

Skipping the date table. Time intelligence functions return blank without one, and they fail quietly. If a year-on-year measure is blank everywhere, check this first.

Turning a relationship bidirectional to make a visual work. It usually does fix that visual, and it introduces ambiguity elsewhere that produces wrong totals nobody notices for weeks. Leave relationships single-direction until you can say why one needs to change.

Leaving implicit measures in place. Drag revenue into a visual and Power BI sums it without asking. It works, and it buries your business logic inside that one visual instead of a named measure anyone can reuse.

Ignoring Indian number formats until the end. Power BI’s display units step up in thousands, millions and billions, so a card reads 1.2M where an Indian audience expects 12 lakh. There is no lakh or crore option in that dropdown. Fix it with a custom format string on the measure, and decide it early: retro-fitting across twenty visuals is a bad afternoon.

What Power BI will not do for you

Power BI is a modelling and presentation layer. It will not repair a source system that records the same customer three different ways, and it will not tell you which question is worth asking. Analysts strong in Power BI and weak in SQL hit a ceiling fast, because most of the real work happens while joining and reshaping data, long before anything reaches a chart.

Frequently asked questions

Is Power BI free?

Power BI Desktop is free to download and use on Windows, and you can build a complete report without paying anything. Sharing is what costs money: publishing to a workspace colleagues can open needs a paid per-user licence. Microsoft revises that price, so check its India pricing page.

How long does it take to learn Power BI?

A week of evening practice usually gets a working dashboard out of a clean Excel file. Two to three months of regular use gets you comfortable with data modelling and DAX filter context, which is where the difficulty actually sits. The clicking is learned in days; the modelling takes a good while longer.

Do I need SQL or Python to use Power BI?

Not for your first report. You will need SQL quickly in a real job, because most business data sits in databases and you will be asked to pull from them directly rather than from an exported file. Python is optional for analyst roles built around Power BI.

What is DAX in Power BI?

DAX stands for Data Analysis Expressions, the formula language used to write measures and calculated columns. It looks like Excel formulas while behaving quite differently, because every DAX expression is evaluated inside the filters the visual is applying. That filter context is the main hurdle.

What is the difference between a measure and a calculated column?

A calculated column is worked out row by row when the data refreshes and stored in the file, adding to its size. A measure is worked out when a visual requests it, using that visual’s filters, and stores nothing. Use a column for a per-row value you group by, and a measure for anything you aggregate.

Can I run Power BI Desktop on a Mac?

Not natively. Microsoft ships Power BI Desktop for Windows only, so Mac users run it inside a Windows virtual machine or a cloud Windows desktop. You can open published reports in a browser on macOS, but the modelling and DAX work belongs in Desktop.

Learn Power BI where it is actually used

A dashboard is worth only as much as the data behind it, which is why Power BI is best learned next to SQL and Excel. SkilloVilla’s Data Analytics with Python track covers Excel, SQL, Python and a dedicated Power BI visualisation module over 4 to 5 months of live classes at ₹71,999, currently ₹58,999, with 1:1 mentorship from working analysts and placement support. The Data Analytics and Generative AI track adds a generative AI layer for ₹84,999, currently ₹71,999, and scholarships are available depending on profile.

Fees and ratings last checked August 2026; confirm current numbers with the provider before enrolling.

What Does a Data Analyst Actually Do? A Real…

What does a data analyst do all day? A realistic Monday to Friday at an Indian company, where the hours actually go, and what...
SkilloVilla Team
7 min read

Data Analyst Salary for Freshers in India: The Entry…

Data analyst fresher salary in India sits at roughly 3.5 to 5.5 LPA. What the aggregators report, what moves the number, and what you...
SkilloVilla Team
6 min read

Data Analyst Salary in India (2026): What the Numbers…

Data analyst salary in India 2026: median CTC, bands by experience, city and industry splits, and why four salary sources disagree by lakhs.
SkilloVilla Team
6 min read

Leave a Reply