BlogData Analytics BasicsChapter 9
BASICS · CHAPTER 9Beginner → Advanced

Power BI for Data Analysts — Complete Guide

Data model, Power Query, relationships, DAX measures, visuals, and publishing — every Power BI skill a data analyst needs, with Indian sales and supply chain examples and the DAX patterns used in real dashboards.

Power BI WorkflowPower QueryData Model & RelationshipsDAXVisualsBuilding a Complete Power BI Dashboard
DATA ANALYTICS SERIES:← Ch 8: PythonCh 9: Power BI ←Ch 10: Data Visualisation →
POWER BI WORKFLOW — 6 STAGES
1
Connect
2
Transform (Power Query)
3
Model (Star Schema)
4
Calculate (DAX)
5
Visualise
6
Publish & Share

Power BI Workflow — How It All Connects

Beginner

Power BI Desktop is a free Windows application where you build reports. The workflow has five stages: 1. Connect & Load — point Power BI at your data source (Excel, CSV, SQL database, SharePoint) 2. Transform — clean and shape the data in Power Query Editor (M language runs behind the scenes) 3. Model — set up relationships between tables (the star schema) 4. Calculate — write DAX measures for your business metrics 5. Visualise — build charts, tables, KPI cards, and slicers on the report canvas 6. Publish — upload to Power BI Service (the web version) and share with your team

Data sources Power BI connects to

Excel/CSV files, SQL Server, MySQL, PostgreSQL, Oracle, Azure SQL, SharePoint, Salesforce, SAP, REST APIs, and 150+ other connectors. In Indian companies: most common sources are Excel files, SQL Server, MySQL, and SAP export files.

Power BI Desktop vs Power BI Service

Desktop = free application for building reports (Windows only). Service = web platform at app.powerbi.com where reports are published, shared, and scheduled to refresh. Power BI Pro licence (included in Microsoft 365 E3/E5) is required to share reports within an organisation. Many Indian companies already have this licence included in their Microsoft subscription.

Power Query — Loading & Transforming Data

Beginner–Intermediate

Power Query is Power BI's data transformation engine — the same tool available in Excel. Every step you apply (filter rows, rename columns, split a column, change a data type) is recorded and replays automatically on every refresh.

Common Power Query steps for Indian data
// Step 1: Remove top rows (Excel exports often have title rows at top)
Table.Skip(Source, 2)

// Step 2: Promote first row to headers
Table.PromoteHeaders(PreviousStep)

// Step 3: Rename columns
Table.RenameColumns(Source, {{"Amt", "amount_inr"}, {"Dt", "order_date"}})

// Step 4: Change data types
Table.TransformColumnTypes(Source, {
    {"order_date",  type date},
    {"amount_inr",  type number},
    {"customer_id", type text}
})

// Step 5: Filter out test orders
Table.SelectRows(Source, each [order_id] <> "TEST")

// Step 6: Add a conditional column (like CASE WHEN in SQL)
Table.AddColumn(Source, "value_tier", each
    if [amount_inr] >= 2000 then "High Value"
    else if [amount_inr] >= 500 then "Mid Value"
    else "Low Value")

// Step 7: Replace city name inconsistencies
Table.ReplaceValue(Source, "New Delhi", "Delhi", Replacer.ReplaceText, {"city"})
ANALYST NOTE: In Power Query, every transformation is a step in the Applied Steps pane. You can click any step to see the data at that point. If something goes wrong after a refresh, the Applied Steps pane tells you exactly which step failed and why.

Data Model & Relationships — The Star Schema

Intermediate

The data model is the set of tables and the relationships between them. A correct star schema — one fact table connected to multiple dimension tables — makes DAX simpler, queries faster, and filters work correctly.

Star schema for an Indian e-commerce dataset

Fact table: fact_orders
  → order_id, customer_id (FK), product_id (FK), date_key (FK), amount_inr, quantity, status

Dimension tables:
  dim_customers → customer_id (PK), name, city, segment, signup_date
  dim_products  → product_id (PK), product_name, category, brand, cost_price
  dim_date      → date_key (PK), date, day, month, month_name, quarter, year, financial_year

Relationships (all one-to-many, single direction):
  dim_customers → fact_orders  (on customer_id)
  dim_products  → fact_orders  (on product_id)
  dim_date      → fact_orders  (on date_key)

Why a date dimension table is essential

Time intelligence DAX functions (SAMEPERIODLASTYEAR, TOTALYTD, DATEADD) require a proper date table marked as a date table in Power BI. A date table must: contain one row per date, have no gaps, cover the full range of dates in your fact table, be marked as a date table in the data model. Power BI can auto-generate a date table, but creating your own gives you Indian financial year columns (FY, FY Quarter) that the auto-generated one does not have.

Relationship cardinality and filter direction

Cardinality: One-to-many (1:*) is the standard in a star schema — one product in dim_products matches many orders in fact_orders. Filter direction: Single direction means filters flow from the dimension table (the "one" side) to the fact table (the "many" side). This is correct for a star schema. Avoid bidirectional relationships unless you understand exactly why you need them — they cause ambiguity in filter context and can produce unexpected DAX results.

DAX — Writing Measures for Business Metrics

Intermediate–Advanced

DAX (Data Analysis Expressions) is the formula language for Power BI measures. It looks like Excel formulas but operates on tables and respects filter context — what makes it powerful and what makes it confusing for beginners.

Basic measures — aggregations
// Total Revenue
Total Revenue =
SUM(fact_orders[amount_inr])

// Total Orders
Total Orders =
COUNTROWS(fact_orders)

// Average Order Value
AOV =
DIVIDE([Total Revenue], [Total Orders], 0)

// Delivered Revenue only
Delivered Revenue =
CALCULATE(
    SUM(fact_orders[amount_inr]),
    fact_orders[status] = "delivered"
)

// Return Rate %
Return Rate % =
DIVIDE(
    COUNTROWS(FILTER(fact_orders, fact_orders[status] = "returned")),
    [Total Orders],
    0
) * 100
Time intelligence — period comparisons
// Previous Month Revenue
PM Revenue =
CALCULATE(
    [Total Revenue],
    DATEADD(dim_date[date], -1, MONTH)
)

// Month-over-Month growth %
MoM Growth % =
DIVIDE(
    [Total Revenue] - [PM Revenue],
    [PM Revenue],
    0
) * 100

// Year-to-Date Revenue (resets each financial year)
YTD Revenue =
TOTALYTD(
    [Total Revenue],
    dim_date[date],
    "31-03"           // Indian financial year end
)

// Same period last year
SPLY Revenue =
CALCULATE(
    [Total Revenue],
    SAMEPERIODLASTYEAR(dim_date[date])
)

// YoY Growth %
YoY Growth % =
DIVIDE([Total Revenue] - [SPLY Revenue], [SPLY Revenue], 0) * 100
CALCULATE — the most important DAX function
// CALCULATE overrides the current filter context
// Syntax: CALCULATE(expression, filter1, filter2, ...)

// Electronics revenue — regardless of what category slicer is set to
Electronics Revenue =
CALCULATE(
    [Total Revenue],
    dim_products[category] = "Electronics"
)

// % of Total — Electronics as % of company total
Electronics % of Total =
DIVIDE(
    CALCULATE([Total Revenue], dim_products[category] = "Electronics"),
    CALCULATE([Total Revenue], ALL(dim_products)),  // ALL removes category filter
    0
) * 100

// Revenue excluding returns
Net Revenue =
CALCULATE(
    [Total Revenue],
    fact_orders[status] <> "returned",
    fact_orders[status] <> "cancelled"
)

// Noida customer count — ignoring city filter on a visual
All Cities Customer Count =
CALCULATE(COUNTROWS(dim_customers), ALL(dim_customers[city]))
Ranking and conditional measures
// Rank cities by revenue (1 = highest)
City Revenue Rank =
RANKX(
    ALL(dim_customers[city]),
    [Total Revenue],
    ,
    DESC
)

// Flag top 5 cities
Is Top 5 City =
IF([City Revenue Rank] <= 5, "Top 5", "Others")

// Running total (cumulative revenue over time)
Cumulative Revenue =
CALCULATE(
    [Total Revenue],
    FILTER(
        ALL(dim_date[date]),
        dim_date[date] <= MAX(dim_date[date])
    )
)
ANALYST NOTE: CALCULATE is the function that makes DAX different from Excel. It evaluates an expression inside a modified filter context. Every time intelligence measure (PM Revenue, YTD Revenue, SPLY Revenue) is a CALCULATE with a date filter modifier. Mastering CALCULATE is the key milestone in Power BI competency.

Visuals — Choosing & Configuring Charts

Intermediate

Power BI has 30+ built-in visuals plus a marketplace with hundreds more. For analyst work, 6–8 visuals cover 90% of real dashboards. The choice of visual matters — the wrong chart type misleads the reader.

KPI Card

Shows a single number prominently. Use for Total Revenue, Total Orders, AOV, Return Rate at the top of every dashboard. Add a comparison value (PM Revenue) to show the change. Best placement: top row of the report, 4–5 KPIs in a horizontal row.

Clustered Bar Chart (horizontal)

Best for comparing categories — revenue by city, orders by category, headcount by department. Use horizontal bars (not vertical columns) when there are more than 5–6 categories — labels are more readable. Sort by value descending so the reader sees the ranking immediately.

Line Chart

Best for time trends — monthly revenue, daily orders, weekly active users. Always put time on the X axis. Use markers for monthly data (easy to see individual data points). Use smooth lines for weekly/daily data only if the trend is actually smooth — jagged lines should remain jagged.

Matrix (Pivot Table equivalent)

Rows and columns with aggregated values — category × city revenue, month × product type orders. Use conditional formatting (background colour scale) to highlight high and low values. Show subtotals per row for row-level context.

Slicer

Interactive filter the user controls. Common slicers: Date range, City, Category, Product. Use a dropdown slicer for long lists (10+ items). Sync slicers across pages in the View → Sync Slicers panel so a filter on one page carries over to other pages.

Donut / Pie Chart

Use sparingly — only when showing 3–5 parts of a whole where proportions matter. Never use for time series. Never use when values are similar in size (the slices look the same). For most category comparisons, a bar chart communicates more clearly.

Building a Complete Power BI Dashboard

Intermediate–Advanced

A well-structured Power BI report follows a predictable layout that stakeholders can read without training. The pattern used in professional Indian corporate dashboards:

Page 1 — Executive Summary

Top row: 5 KPI cards — Total Revenue | Total Orders | AOV | Return Rate % | MoM Growth %
Middle: Line chart (monthly revenue trend) + Bar chart (revenue by city top 8)
Bottom: Matrix (category × month revenue) with conditional formatting
Slicers: Date range, City, Category — synced to all pages

Page 2 — Product & Category Deep Dive

Top row: 3 KPI cards specific to product — Total SKUs | Average Rating | Return Rate by Category
Bar charts: Revenue by Category | Return Rate by Category
Table: Top 20 products by revenue, with units sold, AOV, and return %
Slicer: Category (filters all visuals on this page)

Page 3 — Customer Analysis

KPIs: Total Customers | New Customers | Repeat Purchase Rate | CLTV (average)
Bar: Revenue by customer segment (new / returning / premium)
Scatter plot: Customer revenue vs order count (identify high-value customers)
Table: Top 50 customers by revenue with segment and city

Design principles for Indian corporate dashboards

Colour: Use 1–2 primary brand colours consistently. Avoid rainbow palettes.
Font: Segoe UI 10–12pt for body, 14–16pt for KPI values, 8–9pt for axis labels.
Background: White or very light grey. Avoid dark backgrounds for data-heavy reports.
Gridlines: Remove all gridlines from charts — they add noise without value.
Borders: Use subtle card borders to separate sections, not heavy dividers.
Mobile layout: Set up the mobile view for reports that managers check on phones.

DAX Quick Reference — Most-Used Functions

FunctionWhat It DoesExample
SUMAdd all values in a columnSUM(fact_orders[amount_inr])
COUNTROWSCount rows in a table or filtered tableCOUNTROWS(fact_orders)
AVERAGEAverage of a columnAVERAGE(fact_orders[amount_inr])
DIVIDESafe division — returns 0 if denominator is 0DIVIDE([Revenue],[Orders],0)
CALCULATEEvaluate expression with modified filterCALCULATE([Revenue], dim_products[category]="Electronics")
ALLRemove filters from a column or tableCALCULATE([Revenue], ALL(dim_products))
FILTERReturn a filtered tableFILTER(fact_orders, fact_orders[status]="delivered")
DATEADDShift dates by N periodsCALCULATE([Revenue], DATEADD(dim_date[date],-1,MONTH))
TOTALYTDYear-to-date with optional year-endTOTALYTD([Revenue], dim_date[date], "31-03")
SAMEPERIODLASTYEARSame period in the prior yearCALCULATE([Revenue], SAMEPERIODLASTYEAR(dim_date[date]))
RANKXRank items in a tableRANKX(ALL(dim_customers[city]),[Revenue],,DESC)
IFConditional logicIF([Return Rate %]>10, "High", "Normal")
Continue the Series
← Ch 8: PythonCh 10: Data Visualisation →

Frequently Asked Questions

Is Power BI important for data analyst jobs in India in 2026?

Power BI is one of the most in-demand tools for data analyst roles in India in 2026. It is required or preferred in the majority of data analyst job postings across industries — FMCG, banking, e-commerce, logistics, healthcare, and IT. The reason is Microsoft's dominance in Indian corporate environments: most companies already have Microsoft 365 subscriptions, which include Power BI Pro. Hiring managers who cannot do complex analysis themselves want analysts who can build dashboards that update automatically and are shareable within the organisation. The ability to build a clean, interactive Power BI dashboard from raw data — including correct data modelling and meaningful DAX measures — is the skill that separates strong candidates in interviews. At EVIKA ACADEMY, Power BI is part of the core curriculum for this reason.

What is the difference between a DAX measure and a calculated column in Power BI?

A calculated column is computed row by row when the data is loaded and is stored in the data model. It adds a new column to your table with a fixed value for each row — like adding a "Profit" column that is Revenue minus Cost for every row. A DAX measure is computed dynamically at query time, based on the current filter context (what slicers, filters, and row/column headers are active in the visual). Measures do not add columns to the table — they produce a single aggregated value for whatever context the visual applies. As a rule of thumb: use a calculated column when you need a value that belongs to a specific row (category, classification, a fixed calculation per transaction). Use a measure when you need an aggregation that should change based on filters — total revenue, average order value, percentage of total, YTD comparisons. Measures are always preferred for analytical aggregations because they are filter-aware and more efficient for large datasets.

What is a star schema in Power BI and why does it matter?

A star schema is the recommended way to organise tables in a Power BI data model. It has one central fact table (containing the transactions — orders, sales, events) surrounded by dimension tables (customers, products, dates, locations) connected by relationships. The fact table has many rows and contains numeric measures (amount, quantity) and foreign keys. Dimension tables have fewer rows and contain descriptive attributes (customer name, city, product category, date information). A star schema matters because: (1) it makes DAX measures simpler to write — most measures just SUM or AVERAGE a column in the fact table; (2) Power BI's query engine (VertiPaq) is optimised for this structure and performs significantly better than a flat denormalised table; (3) relationships between tables propagate filters automatically — selecting "Electronics" in a slicer connected to the Products dimension automatically filters the fact table. Building a correct star schema before writing DAX is the most important habit to develop in Power BI.

What Power BI skills are tested in data analyst interviews in India?

Common Power BI assessment tasks in Indian data analyst interviews: (1) Build a report from a provided CSV or Excel file — demonstrating data import, cleaning in Power Query, and a basic dashboard with 3–4 visuals; (2) Create a measure for Total Revenue, Previous Month Revenue, and MoM% change using DAX; (3) Explain the difference between a measure and a calculated column; (4) Set up a relationship between two tables and explain the filter direction; (5) Create a date table and explain why it is needed for time intelligence functions; (6) Use CALCULATE with a filter to compute a conditional total (e.g. revenue for Electronics only); (7) Add Row Level Security (RLS) so different regions only see their own data. Companies also ask conceptual questions: what is a star schema, when to use Power BI vs Excel, how does CALCULATE work. Practical build tasks are more common at analytics firms; conceptual questions are more common at IT companies and MNCs.

EVIKA ACADEMY · NOIDA SECTOR 51

Build Real Power BI Dashboards in Class

Our Power BI module covers star schema design, every DAX pattern in this guide, and full dashboard projects on Indian e-commerce and supply chain data. Mock interviews with real assessment questions included.

Book Free Demo Class →
🎓 Free Demo Class — Online & Offline · Noida Sector 51