Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!Get Fabric certified for FREE! Don't miss your chance! Learn more
Power BI offers several slicer options, but each has limitations. Standard slicers support multiple fields only through hierarchies and still require manual selection, even with text search. The Text Slicer visual allows a “contains” search without selecting values, but it works on only one column and cannot search across multiple tables.
In this article, I’ll show how to achieve a similar free-text search experience in Power BI despite these limitations.
First approach
If the columns to be searched reside in the same table, they can be concatenated into a single column and used as the dimension in the Text Slicer visual. However, this approach is limited to a single table. In many real-world scenarios — especially with fact tables—only foreign keys are commonly available. As a result, it becomes impossible to search dimension attributes such as product SKU, model, description, or category directly.
Second approach
This approach builds a keyword search table that enables free-text filtering across multiple dimensions and selected fact-level fields using a single Text Slicer It requires a column in the fact table that uniquely identifies each row —if one doesn’t exist, an index column in the query editor works. Name the table UniversalSearch. In this blog, we’ll use the AdventureWorks dataset.
Below is a sample DAX to create such UniversalSearch table.
UniversalSearch =
VAR _product =
SELECTCOLUMNS (
'Sales',
"Sales Order Line", Sales[SalesOrderLineKey],
"Key", Sales[ProductKey],
"Category", "Product"
)
VAR _territory =
SELECTCOLUMNS (
'Sales',
"Sales Order Line", Sales[SalesOrderLineKey],
"Key", Sales[SalesTerritoryKey],
"Category", "Territory"
)
VAR _customer =
SELECTCOLUMNS (
'Sales',
"Sales Order Line", Sales[SalesOrderLineKey],
"Key", Sales[CustomerKey],
"Category", "Customer"
)
VAR _SO =
SELECTCOLUMNS (
'Sales',
"Sales Order Line", Sales[SalesOrderLineKey],
"Key", Sales[SalesOrderLineKey],
"Category", "Sales Order"
)
VAR _unionAll =
UNION ( _product, _territory, _customer, _SO )
RETURN
DISTINCT (
ADDCOLUMNS (
_unionAll,
"Keyword",
SWITCH (
[Category],
"Product", LOOKUPVALUE ( 'Product'[Keyword], 'Product'[ProductKey], [Key] ),
"Customer", LOOKUPVALUE ( 'Customer'[Keyword], Customer[CustomerKey], [Key] ),
"Territory",
LOOKUPVALUE (
'Sales Territory'[Keyword],
'Sales Territory'[SalesTerritoryKey], [Key]
),
"Sales Order", FORMAT ( [Sales Order Line], "0"
)
)
)
)
Note:
A vlog is availabe on YouTube in Taglish ( Tagalog/Filipino and English combination) - https://youtu.be/Tx_s8bMKxzU
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.