Course: Microsoft Power BI: Beginner to Advanced Intelligence
Here is a short composition (13 sentences) followed by the requested lecture sheet as semantic HTML. Composition (13 sentences) Power BI’s DAX (Data Analysis Expressions) is the language that unlocks advanced calculations and meaningful models inside reports. In this course we begin by establishing the practical foundations for using DAX in real-world Power BI work. You will learn why calculated tables are useful, and how a dedicated calendar table improves every time intelligence calculation. For example, a simple DAX calendar expression can generate a complete date dimension from the minimum to the maximum date in a fact table. We also demonstrate how to summarize and aggregate data using SUMMARIZECOLUMNS, and how measures such as Orders or Avg Profit per Order are produced. The DIVIDE function is emphasized because it safely handles division and prevents division-by-zero errors. Students will learn that DAX queries do not inherit Power BI visual sort orders; ORDER BY must be specified explicitly. The course introduces START AT for controlled query pagination so you can inspect records beginning at a chosen identifier. Throughout, we balance conceptual clarity with hands-on practice so you can build, test, and optimize models and queries. By the end of the chapter you will understand the who, what, and why of DAX and be ready to write safe, clear measures. The training emphasizes good practices: create date tables in the model, prefer measures over repeated calculations, and use filters thoughtfully. We’ll practice with examples such as summarizing clothing sales by month and computing average profit per order. Welcome aboard — this course is designed to make DAX useful, practical, and immediately applicable to your Power BI reports. Lecture sheet — semantic HTMLLesson
Topic: Power BI DAX Fundamentals — Calculated Tables, Summaries, Queries, and Practical Practices
Learning Outcomes
- Understand what DAX is and where it is used in Power BI.
- Create calculated tables (calendar table example) and know why a date dimension matters.
- Summarize data using SUMMARIZECOLUMNS and compute robust measures (Orders, Avg Profit per Order).
- Write DAX queries (EVALUATE) and control ordering (ORDER BY) and pagination (START AT).
- Handle errors and blanks with DIVIDE, IFERROR/COALESCE and manage filter contexts with CALCULATE/ALL/ALLEXCEPT/REMOVEFILTERS.
Conceptual Explanation
DAX (Data Analysis Expressions) is a formula language created for data modeling and analytics in Power BI and related Microsoft tools. Its primary artifacts are calculated columns, measures, and calculated tables. Calculated tables let you derive new tables from existing data; for time intelligence you typically create a calendar table using CALENDAR(MIN(...), MAX(...)). Aggregation and grouping in queries usually use SUMMARIZECOLUMNS (or SUMMARIZE) combined with measures. For per-row math or protections against divide-by-zero use DIVIDE; to handle missing data use COALESCE or IF(ISBLANK(...)). DAX queries (EVALUATE ...) return tables and must explicitly specify ORDER BY if you need a particular sort; Power BI visual sort order is not applied. START AT can be used to display rows beginning at a specific key. CALCULATE changes filter context and, together with USERELATIONSHIP or CROSSFILTER, lets you use alternate relationships in calculations. For advanced filtering control, functions like ALL, ALLEXCEPT, and REMOVEFILTERS are essential. Use variables (VAR ... RETURN ...) to simplify and optimize complex expressions. Finally, combine clean data preparation (Power Query) with DAX measures for best performance and clarity.
Bilingual (EN → বাংলা)
EN: Create a calendar table with DAX: Dim_Calendar = CALENDAR(MIN('Fact_StrategyPlan'[Datekey]), MAX('Fact_StrategyPlan'[Datekey])).
বাংলা: DAX দিয়ে ক্যালেন্ডার টেবিল তৈরি করুন: Dim_Calendar = CALENDAR(MIN('Fact_StrategyPlan'[Datekey]), MAX('Fact_StrategyPlan'[Datekey]))। এটি সময়ভিত্তিক বিশ্লেষণের জন্য প্রয়োজনীয়।
Important Notes
- Use Power Query for heavy cleaning. Use DAX for model-level calculations and measures.
- DAX queries do not inherit visual sort order — include
ORDER BYin your DAX queries. - Prefer measures to repeated expressions; use
VARfor readability and performance. - Protect against errors with
DIVIDEand handle blanks withCOALESCE/ISBLANK. - Document renamed/deleted fields; deleting referenced measures breaks visuals.
Exercises
True / False
- SUMMARIZECOLUMNS automatically inherits the sort order from Power BI visuals.
- DIVIDE(x, y) is safer than x / y when y might be zero.
- CALCULATE can change filter context and apply new filters.
Answer
False — DAX queries do not inherit visual sort order. Use ORDER BY explicitly.
Answer
True — DIVIDE includes an alternate result parameter and avoids division-by-zero errors.
Answer
True — CALCULATE evaluates an expression in a modified filter context.
Fill in the Blanks
- To create a continuous date table from a fact table you use the DAX function
________. - Use
________to concatenate multiple row values into a single string separated by a delimiter. - To remove all filters from a column inside CALCULATE use
________.
Answer
CALENDAR
Answer
CONCATENATEX
Answer
ALL (or REMOVEFILTERS)
Multiple Choice (MCQ)
- Which function returns a table grouped by columns and additional measures?
- A. FILTER
- B. SUMMARIZECOLUMNS
- C. DIVIDE
- D. SELECTCOLUMNS
- Which DAX expression handles division safely?
- A. /
- B. DIVIDE()
- C. QUOTIENT()
- D. SAFE_DIV()
- To keep a filter on Category but remove all other filters you use:
- A. ALL()
- B. ALLEXCEPT()
- C. REMOVEFILTERS()
- D. VALUES()
Answer
B. SUMMARIZECOLUMNS — groups by columns and can add measures.
Answer
B. DIVIDE()
Answer
B. ALLEXCEPT() — removes all filters except for specified columns.
Matching
Match the DAX function to its primary purpose:
| Function | Purpose |
|---|---|
| 1. CALCULATE | A. Create a range of dates |
| 2. CALENDAR | B. Modify filter context |
| 3. DIVIDE | C. Safe division |
Answer
1 → B, 2 → A, 3 → C
Descriptive
Describe the difference between a calculated column and a measure and when you would use each.
Answer
A calculated column is evaluated row-by-row during data refresh and stored in the model; use it when you need a persistent per-row value (e.g., a normalized category or full name). A measure is computed at query time within the current filter context and should be used for aggregations that need to be dynamic (e.g., Total Sales, Avg Profit per Order). Measures are more memory-efficient for aggregations and are preferred for report visuals.
Creative
Design a 3-card layout for a Wealth dashboard (title and three measures). Provide the DAX for each measure.
Answer
Title: Wealth Snapshot — Current Period
Card 1 (Total Assets): Total Assets = SUM('Assets'[MarketValue])
Card 2 (Total Liabilities): Total Liabilities = SUM('Liabilities'[Amount])
Card 3 (Net Worth): Net Worth = [Total Assets] - [Total Liabilities]
Activities, Vocabulary, Homework, Practice Task
Activities
- Create a calendar table and add Month and Year columns.
- Write a measure: Average Profit per Order using DIVIDE.
Answer
Use Dim_Calendar = CALENDAR(MIN(...), MAX(...)), then add Month = FORMAT(..., "MMMM") and Year = YEAR(...).
Answer
Avg Profit per Order = DIVIDE([Total Sales Profit], [Orders])
Vocabulary
- Context — The set of filters that affects a calculation.
- Measure — A dynamic aggregation calculated at query time.
Answer
Context can be row context (calculated columns) or filter context (measures, slicers).
Answer
Measures react to report filters and are not stored in the model as values.
Homework
- Build a page with: a calendar slicer, a summary table (Month × Category), and three cards (Total Sales, Orders, MoM Growth). Document DAX measures used.
Answer
Suggested measures: Total Sales = SUM('Fact_Sales'[SalesAmount]), Orders = COUNTROWS('Fact_Sales'), MoM Growth = DIVIDE([Total Sales] - CALCULATE([Total Sales], PREVIOUSMONTH(Dim_Calendar[Date])), CALCULATE([Total Sales], PREVIOUSMONTH(Dim_Calendar[Date])), 0).
Practice Task
Given a 'Sales' table and 'Product' table, create a query that shows month, product category, orders and avg profit per order for "Clothing" and sort by month.
Answer
EVALUATE
SUMMARIZECOLUMNS(
'Dim_Calendar'[Month Name],
'Dim_Calendar'[Month of Year],
'Product'[Category],
FILTER( VALUES('Product'[Category]), 'Product'[Category] = "Clothing" ),
"Orders", COUNTROWS('Sales'),
"Avg Profit per Order", DIVIDE( SUM('Sales'[Profit]), COUNTROWS('Sales') )
)
ORDER BY 'Dim_Calendar'[Month of Year] ASC
Further reading: Microsoft DAX reference, Power Query best practices, and the course exercises. Happy analyzing!