Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
2 years ago

transforming excel sheet in power query editor

I am new to power query editor. I have an excel sheet with three columns, Notification, Stat., and Date. Each column has 1311 rows. I want the notification column to stay where it is. I need all 1311 rows in the Stat. column to become the 1st row. I then need the entire date column to become rows. 


This is how it looks like:

NotificaitionStat.Date
300642957E00025/22/2024
300634015E00421/24/2024

 

I need it to look like this:

 

NotificationE0002E0042
3006340155/22/20241/24/2024

 

Is this even possible? I have spent 5 hours using transpose and pivot/unpivot columns. 

Thank you!

- Intern

11 Replies

  • HotChilli's avatar
    HotChilli
    Community Champion

    I'm reasonably sure you don't really want to do this (in power query at least).

    If you did do it and if you want do anything with those new columns, you'll have to write a measure for each column => 1311 measures.

    Also, what happened to row with Notification 300642957?

    • Anonymous's avatar
      Anonymous
      Not applicable

      HotChilli,

       

      The row with notification 300642957 would be moved below the first notification. Atleast, that is what my boss wants. 

      NotificationE0002E0042
      300540151/24/202401/17/2024
      3006429575/22/20241/5/2024


      What does it mean to write a measure for each column?

  • I am assuming that you must have multiple rows with the same notification but different Stat and Date, and that your example is not realistic.

     

    Perhaps a more realistic data source would look like:

    That being the case, the below might be what you want:

    let
        Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Notification", Int64.Type}, {"Stat.", type text}, {"Date", type date}}),
        
    //will be used below in Pivot
        Stats = List.Sort(List.Distinct(#"Changed Type"[#"Stat."])),
    
        fieldTypes = List.Repeat({type nullable date}, List.Count(Stats)),
        rowColumnTypes = List.Transform(fieldTypes, (t) => [Type = t, Optional = false]),
        rowType = Type.ForRecord(Record.FromList(rowColumnTypes, Stats),false),
    
        #"Grouped Rows" = Table.Group(#"Changed Type", {"Notification"}, {
            {"Pivot", each Table.Pivot(_, Stats,"Stat.","Date"), type table rowType}}),
        #"Expanded Pivot" = Table.ExpandTableColumn(#"Grouped Rows", "Pivot", Stats)
    in
        #"Expanded Pivot"

    producing:

     

     

    • Anonymous's avatar
      Anonymous
      Not applicable

      You're a life saver! I am going to try this! I will have to find where I can enter M-code in power query editor! Thank you so much! I will update if this works!

  • Anonymous's avatar
    Anonymous
    Not applicable

    UPDATE: 
    I tried the M-code given in the earlier comment. It got me the correct format, however it got rid of most of my data. Unfortunatly, I now have 6 columns and 268 rows, despite me changing it to "column profiling based on entire data set".
    I havent lost hope yet! I still have 8 hours left in the work day! 

    Any more ideas to help this new intern out? Thank you!

    • ronrsnfld's avatar
      ronrsnfld
      Super User

      Hard to tell for sure without the data and expected outcome wrt the extra rows (and your screenshot is virtually useless to me in that regard), but it might be as simple as adding those other three column to the "key" argument. Basically you would group by all the columns except "Stat." and "Date". See if that works. If not, you'll need to provide more detail.

       

      ...
      #"Grouped Rows" = Table.Group(#"Changed Type", List.RemoveMatchingItems(Table.ColumnNames(Source),{"Date","Stat."}), ...
      • Anonymous's avatar
        Anonymous
        Not applicable

        Provided is a screenshot of the email from my boss: 


        Screenshot of Data, plus another 1000 and some entries, each column has 1310 entries:


        Screenshot of the format my boss gave me that they wanted:


        Thank you for being so patient, you have been so helpful!