Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
4 years ago
Solved

Need help with Data Cleansing

Hey guys,

I need to do some data cleansing and I'm not really sure if this topic needs to be posted here at Power Query or at Dax.
I have a table containing the following columns:
Personeel.In-/Extern
Uren Registratie 2.CategorieID
WBS Code
Klantnum.

I need to 'overwrite' the value of Uren Registratie 2.CategorieID (which is 1) with the following logic:
IF Personeel.In-/Extern = "Extern" AND
WBS Code = "731/7011.01" AND
Klantnum. is empty
THEN 
Uren Registratie 2.CategorieID = 6

Should I do this in Power Query or use Dax?
How can I do this?

With kind regards,

Lazzanova


  • For overwriting the values, DAX can't be used. For this purpose, you will need to use PQ.

    See the working here - Open a blank query - Home - Advanced Editor - Remove everything from there and paste the below code to test (later on when you use the query on your dataset, you will have to change the source appropriately. If you have columns other than these, then delete Changed type step and do a Changed type for complete table from UI again)

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wcq0oSS3KU9JRMgJic2NDfXMDQ0M9IAZyDZVidXCrAPLA8okpKSlAtjFI1ghZ1ggsbWIMhECeCYZuI0LGA+2PBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Personeel.In-/Extern" = _t, #"Uren Registratie 2.CategorieID" = _t, #"WBS Code" = _t, #"Klantnum." = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Personeel.In-/Extern", type text}, {"Uren Registratie 2.CategorieID", Int64.Type}, {"WBS Code", type text}, {"Klantnum.", Int64.Type}}),
        Custom1 = Table.ReplaceValue(#"Changed Type", each [Uren Registratie 2.CategorieID], each if  [#"Personeel.In-/Extern"] = "Extern" and [WBS Code] = "731/7011.01" and [#"Klantnum."] =null then 6 else [Uren Registratie 2.CategorieID], Replacer.ReplaceValue,{"Uren Registratie 2.CategorieID"})
    in
        Custom1

9 Replies

  • Vijay_A_Verma's avatar
    Vijay_A_Verma
    Most Valuable Professional

    For overwriting the values, DAX can't be used. For this purpose, you will need to use PQ.

    See the working here - Open a blank query - Home - Advanced Editor - Remove everything from there and paste the below code to test (later on when you use the query on your dataset, you will have to change the source appropriately. If you have columns other than these, then delete Changed type step and do a Changed type for complete table from UI again)

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wcq0oSS3KU9JRMgJic2NDfXMDQ0M9IAZyDZVidXCrAPLA8okpKSlAtjFI1ghZ1ggsbWIMhECeCYZuI0LGA+2PBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Personeel.In-/Extern" = _t, #"Uren Registratie 2.CategorieID" = _t, #"WBS Code" = _t, #"Klantnum." = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Personeel.In-/Extern", type text}, {"Uren Registratie 2.CategorieID", Int64.Type}, {"WBS Code", type text}, {"Klantnum.", Int64.Type}}),
        Custom1 = Table.ReplaceValue(#"Changed Type", each [Uren Registratie 2.CategorieID], each if  [#"Personeel.In-/Extern"] = "Extern" and [WBS Code] = "731/7011.01" and [#"Klantnum."] =null then 6 else [Uren Registratie 2.CategorieID], Replacer.ReplaceValue,{"Uren Registratie 2.CategorieID"})
    in
        Custom1
    • Anonymous's avatar
      Anonymous
      Not applicable

      Hey Vijay,

      Thanks for the quick response. I tried doing what you have suggested, but failed in doing so.
      But I did try adding another step in PQ:


      I've copy pasted then the last part of your code:
      = Table.ReplaceValue(#"Namen van kolommen gewijzigd2", each [Uren Registratie 2.CategorieID], each if [#"Personeel.In-/Extern"] = "Extern" and [WBS Code] = "731/7011.01" and [#"Klantnum."] =null then 6 else [Uren Registratie 2.CategorieID], Replacer.ReplaceValue,{"Uren Registratie 2.CategorieID"})

      I thought this would change the values of the table of the previous step, but it didn't. What am I doing wrong here?

      With kind regards,

      Lazzanova

      • Vijay_A_Verma's avatar
        Vijay_A_Verma
        Most Valuable Professional

        I am not sure whether your Klantnum. column is null or blanks. You can try following

        = Table.ReplaceValue(#"Namen van kolommen gewijzigd2", each [Uren Registratie 2.CategorieID], each if [#"Personeel.In-/Extern"] = "Extern" and [WBS Code] = "731/7011.01" and ([#"Klantnum."] =null or [#"Klantnum."] ="") then 6 else [Uren Registratie 2.CategorieID], Replacer.ReplaceValue,{"Uren Registratie 2.CategorieID"})
    • Anonymous's avatar
      Anonymous
      Not applicable

      The code you've posted here results in this query:

      Not really sure why these values exist.

      • Vijay_A_Verma's avatar
        Vijay_A_Verma
        Most Valuable Professional

        My source is a sample one, just for example. I need some sample data from your side to check on this. Also point out which value should have changed. 

  • Anonymous's avatar
    Anonymous
    Not applicable

    You are totally right... Best close this topic before I feel more ashamed 😄
    Anyway Vijay thank you very much for your time! Much appreciated!