replace multiple values by using DAX in Power BI

Substitute multiple values by using DAX in Power BI

Sometimes it is necessary to replace multiple values at once using DAX, and the first thing that might come to mind is function SUBSTITUTE. Maybe because of Excel background but in that case, the solution is not straightforward.

Here is my data with the M code below that you can use in a blank query.

data sample with text Power BI

    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtRU8CxJzTVU0lEKycgsVgCiktSKEj2lWJ1oJSOIpBFQ0is/I09Bozg/N7UkIzMvXSE1pzhVU8E5vygvtQis1hii1hioNhiuSqM0TzMvNTk5tTixqBJoZiwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Text1 = _t, Text2 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Text1", type text}, {"Text2", type text}})
    #"Changed Type"

Consider using REPLACE instead of SUBSTITUTE

Function replace works differently, and sometimes it is suitable for the solution. REPLACE uses a position of the start and end of the string. Of course, you can write nested SUBSTITUTE functions, but REPLACE is often the best to substitute multiple values by using DAX.

Text1 REPLACE = REPLACE('Table'[Text1], 1, 3, "")


Dynamically change how DAX REPLACE works

If there is no constant starting point or endpoint for the replacement, you can locate necessary positions with DAX functions like SEARCH or FIND.

Escape characters in DAX

As you can see in the sample above, there are brackets that I can use to find the start and end of the text that I want to remove. The problem is that I cant use brackets as the search parameter straightforward in DAX.

To escape the character in DAX, it is possible to use the corresponding Unicode number. You can find that out in Excel using the function CODE.

VAR char1 =
    UNICHAR ( 40 )
VAR char2 =
    UNICHAR ( 41 )
VAR pos1 =
    SEARCH ( char1, 'Table'[Text2],, BLANK () )
VAR pos2 =
    SEARCH ( char2, 'Table'[Text2],, BLANK () )
    IF (
        ISBLANK ( pos1 ),
        TRIM ( REPLACE ( 'Table'[Text2], pos1, pos2 - pos1 + 1, "" ) )

REPLACE dynamically in Power BI


DAX SEARCH and FIND might look familiar to Excel users, but there are significant differences that you can quickly find out in another Datacornering post.

Sometimes the task is too complicated for both of those functions. Like in this post, where accented characters are replaced with unaccented characters. Therefore, sometimes there is a valid reason to use Power BI capability to run R or Python scripts.




Leave a Reply

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