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

The Power BI DataViz World Championships are on! With four chances to enter, you could win a spot in the LIVE Grand Finale in Las Vegas. Show off your skills.

Reply
han_rj
Advocate II
Advocate II

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
Resolver I
Resolver I

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
Solution Sage
Solution Sage

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!

FebPBI_Carousel

Power BI Monthly Update - February 2025

Check out the February 2025 Power BI update to learn about new features.

Feb2025 NL Carousel

Fabric Community Update - February 2025

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

Top Solution Authors