Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Don't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.

Reply
han_rj
Helper III
Helper III

Advanced unpivot data query

Hi Team,

 

I have a scenario where I need to flatten/unpivot Orders and Unit Price columns as Years,Orders,Unit price columns. Please may I have help know how this can be achieved in power query

han_rj_1-1738906012614.png

 

 

 

1 ACCEPTED SOLUTION

let
    Source = Excel.CurrentWorkbook(){[Name="data"]}[Content],
    rows = List.Buffer(Table.ToList(Source, each _)),
    years = List.Buffer(List.Range(rows{1}, 3, 3)),
    trx = List.TransformMany(
        List.Skip(rows, 2), 
        (x) => List.Zip({years, List.Range(x, 3, 3), List.Range(x, 7, 3)}),
        (x, y) => List.FirstN(x, 3) & {x{6}} & {x{10}} & y
    ), 
    result = Table.FromList(trx, each _, {"Product", "Prod Cat", "Prod Code", "Sales", "Inv", "Year", "Order", "Unit Price"})
in
    result

View solution in original post

8 REPLIES 8
SundarRaj
New Member

Here's the solution to your query. It might be a long solution but do have a look.

SundarRaj_0-1738964417642.pngSundarRaj_1-1738964453734.png

 

Akash_Varuna
Resolver III
Resolver III

Hi @han_rj , Could you try these 
Unpivot Columns: Select year-based columns, right-click, and choose unpivot columns.
Combine Name & Year: Add a custom column with this formula:
Text.BeforeDelimiter([Attribute], " ") & "_" & Text.AfterDelimiter([Attribute], " ")
Rename & Cleanup: Rename columns as needed and remove unnecessary columns.
If this post helped please do give a kudos and accept this as a solution
Thanks In Advance

Hi Akash, Thanks For the Respose, Please may I have help on the updated request

Could You specify ?

I would like to get an output like this with Year , Sales and Unit sales like this

han_rj_0-1738906657382.png

 

let
    Source = Excel.CurrentWorkbook(){[Name="data"]}[Content],
    rows = List.Buffer(Table.ToList(Source, each _)),
    years = List.Buffer(List.Range(rows{1}, 3, 3)),
    trx = List.TransformMany(
        List.Skip(rows, 2), 
        (x) => List.Zip({years, List.Range(x, 3, 3), List.Range(x, 7, 3)}),
        (x, y) => List.FirstN(x, 3) & {x{6}} & {x{10}} & y
    ), 
    result = Table.FromList(trx, each _, {"Product", "Prod Cat", "Prod Code", "Sales", "Inv", "Year", "Order", "Unit Price"})
in
    result

Thank You @AlienSx , This was  very helpful

Hi @han_rj, if the bottom table is your expected result - it does not make sense for me.


Note: Check this link to learn how to use my query.
Check this link if you don't know how to provide sample data.

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Prices go up Feb. 11th.

Jan25PBI_Carousel

Power BI Monthly Update - January 2025

Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.

Jan NL Carousel

Fabric Community Update - January 2025

Find out what's new and trending in the Fabric community.