Forum Discussion

hdhillon's avatar
hdhillon
Icon for Advocate III rankAdvocate III
5 years ago
Solved

Replace non blanks with 1

All,

 

In Power Query, How do I replace all non blanks with 1

 

I have tried the Excel Find and Replace method of   *  to   1 

However this does not seem to work in Power BI

 

 

  • Hi hdhillon , try this:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSi/KLy1QMFTSUQJhUwOlWB10QUMDrKLmpmiiRljVGuMUNUIRNYKai2KsEZoTgEwQAjETi1PSYNxYAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Group = _t, Month = _t, Value = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Value", Int64.Type}, {"Month", Int64.Type}}),
        #"Replaced Value" = 
            Table.ReplaceValue(
                #"Changed Type",
                each [Group],
                each
                    let
                        varReplacementValue = if Text.Length([Group]) > 0 then "1" else [Group]
                    in
                varReplacementValue,
                Replacer.ReplaceText,
                {"Group"}
            )
    in
        #"Replaced Value"

    It turns this:

    Into this:

    It looks for any field that has a length greater than 0 and replaces that field with "1" if it does.

     

    How to use M code provided in a blank query:
    1) In Power Query, select New Source, then Blank Query
    2) On the Home ribbon, select "Advanced Editor" button
    3) Remove everything you see, then paste the M code I've given you in that box.
    4) Press Done
    5) See this article if you need help using this M code in your model.

     

     

6 Replies

  • edhans's avatar
    edhans
    Icon for Community Champion rankCommunity Champion

    Hi hdhillon , try this:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSi/KLy1QMFTSUQJhUwOlWB10QUMDrKLmpmiiRljVGuMUNUIRNYKai2KsEZoTgEwQAjETi1PSYNxYAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Group = _t, Month = _t, Value = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Value", Int64.Type}, {"Month", Int64.Type}}),
        #"Replaced Value" = 
            Table.ReplaceValue(
                #"Changed Type",
                each [Group],
                each
                    let
                        varReplacementValue = if Text.Length([Group]) > 0 then "1" else [Group]
                    in
                varReplacementValue,
                Replacer.ReplaceText,
                {"Group"}
            )
    in
        #"Replaced Value"

    It turns this:

    Into this:

    It looks for any field that has a length greater than 0 and replaces that field with "1" if it does.

     

    How to use M code provided in a blank query:
    1) In Power Query, select New Source, then Blank Query
    2) On the Home ribbon, select "Advanced Editor" button
    3) Remove everything you see, then paste the M code I've given you in that box.
    4) Press Done
    5) See this article if you need help using this M code in your model.

     

     

  • wdx223_Daniel's avatar
    wdx223_Daniel
    Icon for Community Champion rankCommunity Champion

    hdhillon click the button beside the Edit Bar and input this formula

    =Table.ReplaceValue(LastStepName,null,1,(x,y.z)=>if x=y or x="" then x else z,Table.ColumnNames(LastStepName))

    LastStepName, is the last step name in your original M code

     

  • Anonymous's avatar
    Anonymous
    Not applicable

    I know you said replace, but you could easily add a column like this:

    Table.AddColumn(PriorStep, "NewColumnName", each if [Column] <> null then 1 else [Column], type number)

  • Anonymous's avatar
    Anonymous
    Not applicable

    Powerquery

    = IFERROR(IF(LEN(related(column_name))>0,"Y","-"),"-")

  • I had this issue as well where I wanted to replace dates with 1 and leave null values. I converted the dates to whole numbers then I added a custom column and divided the whole number by itself giving a 1 for the date values and null for null values.

    • dufoq3's avatar
      dufoq3
      Icon for Community Champion rankCommunity Champion

      Hi Lon7171, you could do something like this:

       

      Before

       

      After

      let
          Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjIwMtE1MAQipVgdJK4RKtcYzEUQcAkzpdhYAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t]),
          ChangedType = Table.TransformColumnTypes(Source,{{"Date", type date}}),
          ReplacedDate = Table.TransformColumns(ChangedType, {{"Date", each if _ <> null then 1 else null, Int64.Type}})
      in
          ReplacedDate