<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Data Cleansing Questions in Power Query</title>
    <link>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3759080#M123716</link>
    <description>&lt;P&gt;Hello, thank you very much&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="664745" data-lia-user-login="dufoq3" class="lia-mention lia-mention-user"&gt;dufoq3&lt;/a&gt;&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="430441" data-lia-user-login="jgeddes" class="lia-mention lia-mention-user"&gt;jgeddes&lt;/a&gt;&amp;nbsp;for the great responses.&amp;nbsp;&lt;/P&gt;&lt;P&gt;For (2) It would be nice not to trust in the number of spaces (one or two spaces) or the number of integers (1 or 11 or 111). As you pointed out, the ideal approach would be one that dynamically adapts regardless of the number of spaces or numbers.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Doesn't Power Query have a means to find and separate into columns numbers from text and vice versa?&lt;/P&gt;&lt;P&gt;Maybe running a Python or R script for (2) would more dynamic?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you very much, kind regards&lt;/P&gt;</description>
    <pubDate>Tue, 12 Mar 2024 23:39:38 GMT</pubDate>
    <dc:creator>himynameisjuan</dc:creator>
    <dc:date>2024-03-12T23:39:38Z</dc:date>
    <item>
      <title>Data Cleansing Questions</title>
      <link>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3758724#M123691</link>
      <description>&lt;P&gt;Hello.&amp;nbsp;&lt;/P&gt;&lt;P&gt;When using Power Query to cleanse data from a table, before normalizing it, I wonder how to do the following please:&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;(a) How is it possible in Power Query for a given column, to perform an action if a cell starts with a number, and a different action if a cell starts with a character? For example when adding a custom column to label the values as "number" or "text".&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(b) Another question please: how is it possible to split a column based on a custom separator like the following?: "(Comma)(space)(integer)(dot)(space)"?&lt;BR /&gt;example:&lt;BR /&gt;1. Option A, 2. Option B, 71. Option C&lt;BR /&gt;would be split into:&lt;BR /&gt;Column1: 1. Option A&lt;BR /&gt;Column2: Option B&lt;BR /&gt;Column3: Option C&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Thank you very much, kind regards&lt;/P&gt;</description>
      <pubDate>Tue, 12 Mar 2024 18:09:37 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3758724#M123691</guid>
      <dc:creator>himynameisjuan</dc:creator>
      <dc:date>2024-03-12T18:09:37Z</dc:date>
    </item>
    <item>
      <title>Re: Data Cleansing Questions</title>
      <link>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3758791#M123695</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="624912" data-lia-user-login="himynameisjuan" class="lia-mention lia-mention-user"&gt;himynameisjuan&lt;/a&gt;,&amp;nbsp;answer to question no. 1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Result&lt;/P&gt;&lt;P&gt;&lt;img /&gt;&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;let
    Source = #table({"Data"}, {{1}, {"A"}, {25}, {"B"}, {"10"}}),
    v1 = Table.AddColumn(Source, "v1", each if [Data] is number then "Number" else "Text", type text),
    v2 = Table.AddColumn(v1, "v2", each if (try Number.From([Data]) otherwise [Data]) is number then "Number" else "Text", type text)
in
    v2&lt;/LI-CODE&gt;</description>
      <pubDate>Tue, 12 Mar 2024 18:59:01 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3758791#M123695</guid>
      <dc:creator>dufoq3</dc:creator>
      <dc:date>2024-03-12T18:59:01Z</dc:date>
    </item>
    <item>
      <title>Re: Data Cleansing Questions</title>
      <link>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3758794#M123696</link>
      <description>&lt;P&gt;For a) you can use Table.TransformColumns and check if the character in the first position is a letter or number. The code below is an example.&lt;/P&gt;&lt;LI-CODE lang="cpp"&gt;let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTwLyjJzM9TcFSK1YlWcoJxjcBcZxg3GcxVhHFNlGJjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    changeDataType = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    Custom1 = Table.TransformColumns(changeDataType, {{"Column1", each if Text.PositionOfAny(_, {"0".."9"}) = 0 then "Starts With A Number" else if (Text.PositionOfAny(_, {"A".."Z", "a".."z"})) = 0 then "Starts With A Letter" else "What does it start with?"}})
in
    Custom1&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For b) you can split the column into rows by comma delimiter and then extract the text after the second space delimiter for rows that start with a space. The code below is and example.&lt;/P&gt;&lt;LI-CODE lang="cpp"&gt;let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtRT8C8oyczPU3DUUTCCc5x0FMwRUs5KsbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"Column1", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
    #"Extracted Text After Delimiter" = Table.TransformColumns(#"Split Column by Delimiter", {{"Column1", each if Text.StartsWith(_, " ") then Text.AfterDelimiter(_, " ", {1, RelativePosition.FromStart}) else _, type text}})
in
    #"Extracted Text After Delimiter"&lt;/LI-CODE&gt;</description>
      <pubDate>Tue, 12 Mar 2024 19:00:31 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3758794#M123696</guid>
      <dc:creator>jgeddes</dc:creator>
      <dc:date>2024-03-12T19:00:31Z</dc:date>
    </item>
    <item>
      <title>Re: Data Cleansing Questions</title>
      <link>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3758816#M123699</link>
      <description>&lt;P&gt;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="624912" data-lia-user-login="himynameisjuan" class="lia-mention lia-mention-user"&gt;himynameisjuan&lt;/a&gt;,&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="430441" data-lia-user-login="jgeddes" class="lia-mention lia-mention-user"&gt;jgeddes&lt;/a&gt;&amp;nbsp;found great solution for 2nd question, but it is not easy to find a pattern. It will be even harder if you add 2 more value i.e.:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;1. Option A, 2. Option B, 71. Option C, 100. Option D,&amp;nbsp; 102. Option E&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;and you would like to have outcome like this:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#800080"&gt;&lt;SPAN&gt;Column1: 1. Option A&lt;BR /&gt;Column2: Option B&lt;BR /&gt;Column3: Option C&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#800080"&gt;&lt;SPAN&gt;Column4: 100. Option D&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#800080"&gt;&lt;SPAN&gt;Column5: Option E&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;What I'm trying to tell is that to do this there has to be such pattern. If there is a pattern, than there are usually many ways.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 12 Mar 2024 19:18:10 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3758816#M123699</guid>
      <dc:creator>dufoq3</dc:creator>
      <dc:date>2024-03-12T19:18:10Z</dc:date>
    </item>
    <item>
      <title>Re: Data Cleansing Questions</title>
      <link>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3759080#M123716</link>
      <description>&lt;P&gt;Hello, thank you very much&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="664745" data-lia-user-login="dufoq3" class="lia-mention lia-mention-user"&gt;dufoq3&lt;/a&gt;&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="430441" data-lia-user-login="jgeddes" class="lia-mention lia-mention-user"&gt;jgeddes&lt;/a&gt;&amp;nbsp;for the great responses.&amp;nbsp;&lt;/P&gt;&lt;P&gt;For (2) It would be nice not to trust in the number of spaces (one or two spaces) or the number of integers (1 or 11 or 111). As you pointed out, the ideal approach would be one that dynamically adapts regardless of the number of spaces or numbers.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Doesn't Power Query have a means to find and separate into columns numbers from text and vice versa?&lt;/P&gt;&lt;P&gt;Maybe running a Python or R script for (2) would more dynamic?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you very much, kind regards&lt;/P&gt;</description>
      <pubDate>Tue, 12 Mar 2024 23:39:38 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3759080#M123716</guid>
      <dc:creator>himynameisjuan</dc:creator>
      <dc:date>2024-03-12T23:39:38Z</dc:date>
    </item>
    <item>
      <title>Re: Data Cleansing Questions</title>
      <link>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3759151#M123720</link>
      <description>&lt;P&gt;For splitting on your complex delimiter, you can use Regular Expressions.&lt;/P&gt;&lt;P&gt;I've not used Python much in Power Query, so there may be more efficient methods, but this does work on your data:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtRT8C8oyczPU3DUUTCCc5x0FMwRUs5KsTrRSqYIgWQdBUMTOC8CyLOA86KUYmMB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    
//Use regex to split    
    #"Run Python script" = Python.Execute("dataset['Split'] = dataset['Column1'].str.split(r',\s\d+\.\s*')#(lf)",[dataset=#"Changed Type"]),

//remove unneeded columns and expand the table
    #"Removed Columns" = Table.RemoveColumns(#"Run Python script",{"Name"}),
    #"Expanded Value" = Table.ExpandTableColumn(#"Removed Columns", "Value", {"Split"}),

//Replace single quote with double quote to create a valid Json
    #"Replaced Value" = Table.ReplaceValue(#"Expanded Value","'","""",Replacer.ReplaceText,{"Split"}),

//Convert the Python array to an M List
    #"To List" = Table.TransformColumns(#"Replaced Value",{"Split", Json.Document}),

//Expand the list to new rows (could expand to columns if preferred
    #"Expanded Split" = Table.ExpandListColumn(#"To List", "Split"),
    #"Changed Type1" = Table.TransformColumnTypes(#"Expanded Split",{{"Split", type text}})
in
    #"Changed Type1"&lt;/LI-CODE&gt;&lt;P&gt;&lt;STRONG&gt;Source&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;img /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Results&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;img /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 13 Mar 2024 01:34:03 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3759151#M123720</guid>
      <dc:creator>ronrsnfld</dc:creator>
      <dc:date>2024-03-13T01:34:03Z</dc:date>
    </item>
    <item>
      <title>Re: Data Cleansing Questions</title>
      <link>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3761986#M123802</link>
      <description>&lt;P&gt;I have modified my code to&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&amp;nbsp;Split the strings into columns&lt;/LI&gt;&lt;LI&gt;Adjust for any number of spaces&lt;/LI&gt;&lt;LI&gt;The existing code already accomodated any number of digits&lt;/LI&gt;&lt;/UL&gt;&lt;LI-CODE lang="markup"&gt;let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtRT8C8oyczPU3DUUTCCc5x0FMwRUs5KsTrRSqYIgWQdBUMTOC8CyLOA86LAiokzF6jRwADOddFRAPIRil2VYmMB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    
//Use regex to split    
    #"Run Python script" = Python.Execute("dataset['Split'] = dataset['Column1'].str.split(r',\s+\d+\.\s+')#(lf)",[dataset=#"Changed Type"]),

//remove unneeded columns and expand the table
    #"Removed Columns" = Table.RemoveColumns(#"Run Python script",{"Name"}),
    #"Expanded Value" = Table.ExpandTableColumn(#"Removed Columns", "Value", {"Split"}),

//Replace single quote with double quote to create a valid Json
    #"Replaced Value" = Table.ReplaceValue(#"Expanded Value","'","""",Replacer.ReplaceText,{"Split"}),

//Convert the Python array to an M List
    #"To List" = Table.TransformColumns(#"Replaced Value",{"Split", Json.Document}),

//Max number of Columns
    numCols = List.Max(List.Transform(#"To List"[Split], each List.Count(_))),
    #"Extracted Values" = Table.TransformColumns(#"To List", {"Split", each Text.Combine(List.Transform(_, Text.From), ";"), type text}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "Split", 
        Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), List.Transform({1..numCols}, each "Split." &amp;amp; Text.From(_)))
in
    #"Split Column by Delimiter"&lt;/LI-CODE&gt;&lt;P&gt;&lt;STRONG&gt;Source Data&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;img /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Results&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;img /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Mar 2024 01:57:17 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3761986#M123802</guid>
      <dc:creator>ronrsnfld</dc:creator>
      <dc:date>2024-03-14T01:57:17Z</dc:date>
    </item>
    <item>
      <title>Re: Data Cleansing Questions</title>
      <link>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3768618#M123995</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="624912" data-lia-user-login="himynameisjuan" class="lia-mention lia-mention-user"&gt;himynameisjuan&lt;/a&gt;,&amp;nbsp;you're welcome.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It is possible to do such split also in PQ, but it is useless for sample data you provided.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Column1 splitted:&lt;/P&gt;&lt;P&gt;&lt;img /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSkxKNjQyTklNU4rViVZydHIG8lxc3ZRiYwE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    Ad_Separated = Table.AddColumn(Source, "Separated", each 
        [ a = Splitter.SplitTextByCharacterTransition((x)=&amp;gt; not List.Contains({"0".."9"}, x), {"0".."9"})([Column1]),
          b = List.Combine(List.Transform(a, Splitter.SplitTextByCharacterTransition({"0".."9"}, (x)=&amp;gt; not List.Contains({"0".."9"}, x)))),
          c = Text.Combine(b, "|")
        ][c], type text),
    Ad_SplitCount = Table.AddColumn(Ad_Separated, "SplitCount", each Text.Length(Text.Select([Separated], "|")) +1, Int64.Type),
    SplitColumnByDelimiter = Table.SplitColumn(Ad_SplitCount, "Separated", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), {"1"..Text.From(List.Max(Ad_SplitCount[SplitCount]))} ),
    RemovedColumns = Table.RemoveColumns(SplitColumnByDelimiter,{"SplitCount"})
in
    RemovedColumns&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 16 Mar 2024 11:22:52 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-Query/Data-Cleansing-Questions/m-p/3768618#M123995</guid>
      <dc:creator>dufoq3</dc:creator>
      <dc:date>2024-03-16T11:22:52Z</dc:date>
    </item>
  </channel>
</rss>

