PowerBI

6.1 : Power BI Text Functions: Full List of 21 DAX Commands for Clean Data (2025)

Mastering Power BI Text Functions: The Complete Guide (Module 6.1)

In the ever-evolving world of business intelligence, transforming raw text into structured, insightful information is key to driving clarity and making informed decisions. Power BI offers a suite of powerful text functions that allow data professionals to clean, format, analyze, and manipulate text-based data efficiently. These functions become indispensable when working with inconsistent data sources, messy labels, or human-entered data that doesn’t follow a predictable pattern.

Whether it’s extracting a domain from an email, formatting names into a standardized structure, or converting numeric strings into usable numbers, Power BI’s text functions help streamline the ETL (Extract, Transform, Load) process. Module 6.1 of this Power BI series dives deep into the 21 essential DAX text functions and their Power Query equivalents. Each function is explained with practical examples for seamless integration into real-world dashboards and models.

DAX & Power Query Text Functions with Explanation

1. COMBINEVALUES

Purpose: Joins two or more text values with a delimiter.

DAX: COMBINEVALUES(" - ", [First Name], [Last Name])
Power Query: Text.Combine({[First Name], [Last Name]}, " - ")

Use: Create a Full Name column.

2. CONCATENATE

Purpose: Combines exactly two text values.

DAX: CONCATENATE([City], [Pincode])
Power Query: [City] & Text.From([Pincode])

3. CONCATENATEX

Purpose: Concatenates values across a table or group.

DAX: CONCATENATEX(VALUES(Subject), Subject, ", ")
Power Query: Text.Combine(List.Transform([Subjects], each Text.From(_)), ", ")

4. EXACT

Purpose: Case-sensitive comparison.

let
  name = [First Name],
  firstLetter = Text.Start(name, 1),
  rest = Text.Middle(name, 1),
  isProper = firstLetter = Text.Upper(firstLetter) and rest = Text.Lower(rest)
in
  isProper

5. FIND

Purpose: Find position of substring (case-sensitive).

DAX: FIND("@", [Email], 1)
Power Query: Text.PositionOf([Email], "@")

Will Check wheter email has @ or not

 if Text.PositionOf([Email], "@") >= 0 then "Correct" else "Incorrect" 

6. FIXED

Purpose: Format number as text with fixed decimals.

DAX: FIXED([Maths], 1, TRUE)
Power Query: Number.ToText([Maths], "0.0")

7. FORMAT

Purpose: Format number or date as string.

DAX: FORMAT([Maths], "0.00")
Power Query: Number.ToText([Maths], "0.00")

8. LEFT

Purpose: Extract characters from the start of text.

DAX: LEFT([Email], 5)
Power Query: Text.Start([Email], 5)

9. LEN

Purpose: Count number of characters.

DAX: LEN([Last Name])
Power Query: Text.Length([Last Name])

10. LOWER

Purpose: Convert text to lowercase.

DAX: LOWER([City])
Power Query: Text.Lower([City])

11. MID

Purpose: Extract characters from middle of string.

DAX: MID([Email], 1, 5)
Power Query: Text.Middle([Email], 0, 5)

12. REPLACE

Purpose: Replace part of string by position.

DAX: REPLACE([First Name], 1, 2, "XX")
Power Query: "XX" & Text.Range([First Name], 2, Text.Length([First Name])-2)

Step-by-Step Explanation

Assume:
[First Name] = "Rohan"

🔹 Text.Length([First Name])

Returns number of characters in the name.

"Rohan"5

🔹 Text.Range([First Name], 2, Text.Length([First Name]) - 2)

This means:

  • Start from index 2 (3rd character, because indexing starts at 0)
  • Take length – 2 characters from that point

📘 Breakdown:

Text.Range("Rohan", 2, 3) → starting from 3rd character → "han"

🔹 Final Expression:

"XX" & "han" → "XXhan"

13. REPT

Purpose: Repeat a text string.

DAX: REPT("*", [Maths]/10)
Power Query: Text.Repeat("*", Number.RoundDown([Maths]/10))

14. RIGHT

Purpose: Extract characters from end of string.

DAX: RIGHT([Email], 10)
Power Query: Text.End([Email], 10)

15. SEARCH

Purpose: Find position of substring (case-insensitive).

DAX: SEARCH("@", [Email], 1)
Power Query: Text.PositionOf([Email], "@")

Find whether Rohan is present or not

if Text.PositionOf([Name], "Rohan") >= 0 then "Found" else "Not Found"

16. SUBSTITUTE

Purpose: Replace all instances of substring.

DAX: SUBSTITUTE([Email], ".com", ".edu")
Power Query: Text.Replace([Email], ".com", ".edu")

17. TRIM

Purpose: Remove extra spaces.

DAX: TRIM([Location])
Power Query: Text.Trim([Location])

18. UNICHAR

Purpose: Return Unicode character from number.

DAX: UNICHAR(9786)
Power Query: Character.FromNumber(9786)

19. UNICODE

Purpose: Return number from Unicode character.

DAX: UNICODE(LEFT([First Name], 1))
Power Query: Character.ToNumber(Text.Start([First Name], 1))

20. UPPER

Purpose: Convert text to uppercase.

DAX: UPPER([First Name])
Power Query: Text.Upper([First Name])

21. VALUE

Purpose: Convert text to numeric.

DAX: VALUE("85")
Power Query: Number.FromText("85")

Summary

Understanding and applying Power BI’s text functions can greatly enhance your ability to manage and analyze textual data. Whether you’re preparing data in Power Query or building calculated columns using DAX, each of these 21 text functions plays a crucial role in shaping readable, structured, and valuable outputs.

These tools not only save time but also enforce consistency across your reporting models. By mastering these formulas, you’ll significantly improve data quality, readability, and user experience in your dashboards.

Stay tuned for Module 6.2: Conditional Text Logic and String-Based Measures!

Leave a Reply

Your email address will not be published. Required fields are marked *