Forum Discussion
Create Matrix or Table with compare data between dates in PowerBi
Hello Experts,
Could you please support me? I can not solve it in PowerBi.
I have a table with demands below. The columns are the months(with format date), de rows is the days when we needed to check the demands. We do not have rule for the dates of days, for example: every second day...etc., if we would like to see, we refresh it.
| Days | 2025.May | 2025.June | 2025.July | 2025.August | 2025.September |
| 2025.05.28 | 5 000 | 5 000 | 10 000 | 13 000 | 15 000 |
| 2025.05.26 | 10 000 | 13 000 | 5 000 | 6 000 | 5 000 |
| 2025.05.23 | 15 000 | 6 000 | 15 000 | 7 000 | 13 000 |
| 2025.05.19 | 13 000 | 7 000 | 13 000 | 8 000 | 6 000 |
| 2025.05.18 | 6 000 | 8 000 | 6 000 | 4 000 | 7 000 |
| 2025.05.16 | 7 000 | 4 000 | 7 000 | 5 000 | 8 000 |
| 2025.05.10 | 8 000 | 5 000 | 8 000 | 15 000 | 4 000 |
| 2025.05.09 | 4 000 | 15 000 | 4 000 | 10 000 | 10 000 |
I would like to see in the cells only the changes between the two days in the new other table or matrix. What is it mean:
How can i solve it? I could not find any solution.
Thank you in advance!
Hi Someone22 ,
To calculate the change in demand between consecutive days for each month in Power BI, you need to reshape your data first using Power Query. Start by unpivoting all the month columns (like 2025.May, 2025.June, etc.) so they become values in a single column instead of being separate headers. This transforms your table into a long format with columns for the Date, Month, and Demand.
Once loaded into Power BI in this format, you can create a DAX measure that calculates the difference in demand between the current row and the previous date for the same month. Here's the DAX measure you can use:
Demand Change = VAR CurrentDate = MAX('YourTable'[Date]) VAR CurrentMonth = SELECTEDVALUE('YourTable'[Month]) VAR CurrentDemand = MAX('YourTable'[Demand]) VAR PrevDate = CALCULATE( MAX('YourTable'[Date]), FILTER( ALL('YourTable'), 'YourTable'[Date] < CurrentDate && 'YourTable'[Month] = CurrentMonth ) ) VAR PrevDemand = CALCULATE( MAX('YourTable'[Demand]), 'YourTable'[Date] = PrevDate && 'YourTable'[Month] = CurrentMonth ) RETURN IF(ISBLANK(PrevDemand), BLANK(), CurrentDemand - PrevDemand)Replace 'YourTable' with the name of your actual table. This measure compares each date’s demand to the demand from the previous date for the same month and returns the difference. Then, place Date in the rows, Month in the columns, and this measure as the value in a Matrix visual. This will give you exactly what your Excel mock-up shows—highlighting daily changes across months. You can then apply conditional formatting to match your Excel color coding.
Best regards,
Hello DataNinja777 ,
Based on your DAX, i start to thinking about the operation of it. After some hours i found the right changes and now it is working :D. I changed 2 MAX to SUM and it is perfect(RED highlight).
Demand Change =VAR CurrentDate = MAX('YourTable'[Date])VAR CurrentMonth = SELECTEDVALUE('YourTable'[Month])VAR CurrentDemand = SUM('YourTable'[Demand])VAR PrevDate =CALCULATE(MAX('YourTable'[Date]),FILTER(ALL('YourTable'),'YourTable'[Date] < CurrentDate &&'YourTable'[Month] = CurrentMonth))VAR PrevDemand =CALCULATE(SUM('YourTable'[Demand]),'YourTable'[Date] = PrevDate &&'YourTable'[Month] = CurrentMonth)RETURNIF(ISBLANK(PrevDemand), BLANK(), CurrentDemand - PrevDemand)Thank you again for your support! 🙂
8 Replies
- DataNinja777Super User
Hi Someone22 ,
To calculate the change in demand between consecutive days for each month in Power BI, you need to reshape your data first using Power Query. Start by unpivoting all the month columns (like 2025.May, 2025.June, etc.) so they become values in a single column instead of being separate headers. This transforms your table into a long format with columns for the Date, Month, and Demand.
Once loaded into Power BI in this format, you can create a DAX measure that calculates the difference in demand between the current row and the previous date for the same month. Here's the DAX measure you can use:
Demand Change = VAR CurrentDate = MAX('YourTable'[Date]) VAR CurrentMonth = SELECTEDVALUE('YourTable'[Month]) VAR CurrentDemand = MAX('YourTable'[Demand]) VAR PrevDate = CALCULATE( MAX('YourTable'[Date]), FILTER( ALL('YourTable'), 'YourTable'[Date] < CurrentDate && 'YourTable'[Month] = CurrentMonth ) ) VAR PrevDemand = CALCULATE( MAX('YourTable'[Demand]), 'YourTable'[Date] = PrevDate && 'YourTable'[Month] = CurrentMonth ) RETURN IF(ISBLANK(PrevDemand), BLANK(), CurrentDemand - PrevDemand)Replace 'YourTable' with the name of your actual table. This measure compares each date’s demand to the demand from the previous date for the same month and returns the difference. Then, place Date in the rows, Month in the columns, and this measure as the value in a Matrix visual. This will give you exactly what your Excel mock-up shows—highlighting daily changes across months. You can then apply conditional formatting to match your Excel color coding.
Best regards,
- Someone22Helper I
Hello DataNinja777 ,
I tried it, working, but it show wrong values. You see in below.
In the database there are other columns, not just Date, Months and Demand. It is cause maybe the problem? But the other columns are needed because of the filters.
Thank you in advance again if you can check what would be the problem!
- Someone22Helper I
Hello DataNinja777 ,
I am new in PBI and i think i missed something really important. Sorry for that. The database in power query, it is not the same what i sent in my first post. The table in my first post is the summary table about raw table from query and i think this is the problem why the dax can not show what i want because in the same Day and Month rows there are more different demands.
So, for an example review my raw database in power query after unpivot the months columns:
Raw database in power query:
Days Material Type City Months Demand 2025.05.30 A X Big 2025. May 500 2025.05.30 B X Small 2025. May 700 2025.05.30 C X Medium 2025. May 300 2025.05.30 A Y Big 2025. May 500 2025.05.30 B Y Small 2025. May 600 2025.05.30 C Y Medium 2025. May 900 2025.05.30 A X Big 2025.June 1100 2025.05.30 B X Small 2025.June 1500 2025.05.30 C X Medium 2025.June 400 2025.05.30 A Y Big 2025.June 700 2025.05.30 B Y Small 2025.June 320 2025.05.30 C Y Medium 2025.June 675 2025.05.30 A X Big 2025.July 456 2025.05.30 B X Small 2025.July 234 2025.05.30 C X Medium 2025.July 953 2025.05.30 A Y Big 2025.July 1134 2025.05.30 B Y Small 2025.July 1054 2025.05.30 C Y Medium 2025.July 454 2025.05.30 A X Big 2025.August 245 2025.05.30 B X Small 2025.August 1034 2025.05.30 C X Medium 2025.August 103 2025.05.30 A Y Big 2025.August 567 2025.05.30 B Y Small 2025.August 345 2025.05.30 C Y Medium 2025.August 876 2025.05.30 A X Big 2025.September 1256 2025.05.30 B X Small 2025.September 2210 2025.05.30 C X Medium 2025.September 222 2025.05.30 A Y Big 2025.September 621 2025.05.30 B Y Small 2025.September 453 2025.05.30 C Y Medium 2025.September 389 2025.05.28 A X Big 2025. May 550 2025.05.28 B X Small 2025. May 750 2025.05.28 C X Medium 2025. May 350 2025.05.28 A Y Big 2025. May 550 2025.05.28 B Y Small 2025. May 650 2025.05.28 C Y Medium 2025. May 950 2025.05.28 A X Big 2025.June 1150 2025.05.28 B X Small 2025.June 1550 2025.05.28 C X Medium 2025.June 450 2025.05.28 A Y Big 2025.June 750 2025.05.28 B Y Small 2025.June 370 2025.05.28 C Y Medium 2025.June 725 2025.05.28 A X Big 2025.July 506 2025.05.28 B X Small 2025.July 284 2025.05.28 C X Medium 2025.July 1003 2025.05.28 A Y Big 2025.July 1184 2025.05.28 B Y Small 2025.July 1104 2025.05.28 C Y Medium 2025.July 504 2025.05.28 A X Big 2025.August 295 2025.05.28 B X Small 2025.August 1084 2025.05.28 C X Medium 2025.August 153 2025.05.28 A Y Big 2025.August 617 2025.05.28 B Y Small 2025.August 395 2025.05.28 C Y Medium 2025.August 926 2025.05.28 A X Big 2025.September 1306 2025.05.28 B X Small 2025.September 2260 2025.05.28 C X Medium 2025.September 272 2025.05.28 A Y Big 2025.September 671 2025.05.28 B Y Small 2025.September 503 2025.05.28 C Y Medium 2025.September 439 2025.05.27 A X Big 2025. May 450 2025.05.27 B X Small 2025. May 650 2025.05.27 C X Medium 2025. May 250 2025.05.27 A Y Big 2025. May 450 2025.05.27 B Y Small 2025. May 550 2025.05.27 C Y Medium 2025. May 850 2025.05.27 A X Big 2025.June 1050 2025.05.27 B X Small 2025.June 1450 2025.05.27 C X Medium 2025.June 350 2025.05.27 A Y Big 2025.June 650 2025.05.27 B Y Small 2025.June 270 2025.05.27 C Y Medium 2025.June 625 2025.05.27 A X Big 2025.July 406 2025.05.27 B X Small 2025.July 184 2025.05.27 C X Medium 2025.July 903 2025.05.27 A Y Big 2025.July 1084 2025.05.27 B Y Small 2025.July 1004 2025.05.27 C Y Medium 2025.July 404 2025.05.27 A X Big 2025.August 195 2025.05.27 B X Small 2025.August 984 2025.05.27 C X Medium 2025.August 53 2025.05.27 A Y Big 2025.August 517 2025.05.27 B Y Small 2025.August 295 2025.05.27 C Y Medium 2025.August 826 2025.05.27 A X Big 2025.September 1206 2025.05.27 B X Small 2025.September 2160 2025.05.27 C X Medium 2025.September 172 2025.05.27 A Y Big 2025.September 571 2025.05.27 B Y Small 2025.September 403 2025.05.27 C Y Medium 2025.September 339 2025.05.15 A X Big 2025. May 600 2025.05.15 B X Small 2025. May 800 2025.05.15 C X Medium 2025. May 400 2025.05.15 A Y Big 2025. May 600 2025.05.15 B Y Small 2025. May 700 2025.05.15 C Y Medium 2025. May 1000 2025.05.15 A X Big 2025.June 1200 2025.05.15 B X Small 2025.June 1600 2025.05.15 C X Medium 2025.June 500 2025.05.15 A Y Big 2025.June 800 2025.05.15 B Y Small 2025.June 420 2025.05.15 C Y Medium 2025.June 775 2025.05.15 A X Big 2025.July 556 2025.05.15 B X Small 2025.July 334 2025.05.15 C X Medium 2025.July 1053 2025.05.15 A Y Big 2025.July 1234 2025.05.15 B Y Small 2025.July 1154 2025.05.15 C Y Medium 2025.July 554 2025.05.15 A X Big 2025.August 345 2025.05.15 B X Small 2025.August 1134 2025.05.15 C X Medium 2025.August 203 2025.05.15 A Y Big 2025.August 667 2025.05.15 B Y Small 2025.August 445 2025.05.15 C Y Medium 2025.August 976 2025.05.15 A X Big 2025.September 1356 2025.05.15 B X Small 2025.September 2310 2025.05.15 C X Medium 2025.September 322 2025.05.15 A Y Big 2025.September 721 2025.05.15 B Y Small 2025.September 553 2025.05.15 C Y Medium 2025.September 489 2025.05.05 A X Big 2025. May 350 2025.05.05 B X Small 2025. May 550 2025.05.05 C X Medium 2025. May 150 2025.05.05 A Y Big 2025. May 350 2025.05.05 B Y Small 2025. May 450 2025.05.05 C Y Medium 2025. May 750 2025.05.05 A X Big 2025.June 950 2025.05.05 B X Small 2025.June 1350 2025.05.05 C X Medium 2025.June 250 2025.05.05 A Y Big 2025.June 550 2025.05.05 B Y Small 2025.June 170 2025.05.05 C Y Medium 2025.June 525 2025.05.05 A X Big 2025.July 306 2025.05.05 B X Small 2025.July 84 2025.05.05 C X Medium 2025.July 803 2025.05.05 A Y Big 2025.July 984 2025.05.05 B Y Small 2025.July 904 2025.05.05 C Y Medium 2025.July 304 2025.05.05 A X Big 2025.August 95 2025.05.05 B X Small 2025.August 884 2025.05.05 C X Medium 2025.August 47 2025.05.05 A Y Big 2025.August 417 2025.05.05 B Y Small 2025.August 195 2025.05.05 C Y Medium 2025.August 726 2025.05.05 A X Big 2025.September 1106 2025.05.05 B X Small 2025.September 2060 2025.05.05 C X Medium 2025.September 72 2025.05.05 A Y Big 2025.September 471 2025.05.05 B Y Small 2025.September 303 2025.05.05 C Y Medium 2025.September 239 2025.05.01 A X Big 2025. May 0 2025.05.01 B X Small 2025. May 0 2025.05.01 C X Medium 2025. May 0 2025.05.01 A Y Big 2025. May 0 2025.05.01 B Y Small 2025. May 0 2025.05.01 C Y Medium 2025. May 0 2025.05.01 A X Big 2025.June 0 2025.05.01 B X Small 2025.June 0 2025.05.01 C X Medium 2025.June 0 2025.05.01 A Y Big 2025.June 0 2025.05.01 B Y Small 2025.June 0 2025.05.01 C Y Medium 2025.June 0 2025.05.01 A X Big 2025.July 0 2025.05.01 B X Small 2025.July 0 2025.05.01 C X Medium 2025.July 0 2025.05.01 A Y Big 2025.July 0 2025.05.01 B Y Small 2025.July 0 2025.05.01 C Y Medium 2025.July 0 2025.05.01 A X Big 2025.August 0 2025.05.01 B X Small 2025.August 0 2025.05.01 C X Medium 2025.August 0 2025.05.01 A Y Big 2025.August 0 2025.05.01 B Y Small 2025.August 0 2025.05.01 C Y Medium 2025.August 0 2025.05.01 A X Big 2025.September 0 2025.05.01 B X Small 2025.September 0 2025.05.01 C X Medium 2025.September 0 2025.05.01 A Y Big 2025.September 0 2025.05.01 B Y Small 2025.September 0 2025.05.01 C Y Medium 2025.September 0 Summary and compare(what i want to see in PBI) matrix:
I am really sorry again :).
Thank you in advance!
- Someone22Helper I
Hello DataNinja777 ,
Based on your DAX, i start to thinking about the operation of it. After some hours i found the right changes and now it is working :D. I changed 2 MAX to SUM and it is perfect(RED highlight).
Demand Change =VAR CurrentDate = MAX('YourTable'[Date])VAR CurrentMonth = SELECTEDVALUE('YourTable'[Month])VAR CurrentDemand = SUM('YourTable'[Demand])VAR PrevDate =CALCULATE(MAX('YourTable'[Date]),FILTER(ALL('YourTable'),'YourTable'[Date] < CurrentDate &&'YourTable'[Month] = CurrentMonth))VAR PrevDemand =CALCULATE(SUM('YourTable'[Demand]),'YourTable'[Date] = PrevDate &&'YourTable'[Month] = CurrentMonth)RETURNIF(ISBLANK(PrevDemand), BLANK(), CurrentDemand - PrevDemand)Thank you again for your support! 🙂
- v-achippaCommunity Support
Hi Someone22,
Thank you for reaching out to Microsoft Fabric Community.
Based on your description, please follow below steps:
- Open Power Query Editor select all month columns (2025.May to 2025.September) and click Unpivot Columns.
- Sort the Days column in descending order.
- Go to Add Column --> Index Column and add a custom index column from 0 and name it as Index.
- Duplicate the table and name it PreviousRow and rename its Index column to PreviousIndex.
- And merge the original table with PreviousRow, on Month = Month and on Index = PreviousIndex + 1.
- Expand the merged table and extract the previous demand value.
- After the merge create a new column to calculate the difference:
= [Demand] - [PreviousRow.Demand] - Click Close & Apply and load the data back to power bi.
- Create a Matrix visual and use Days in Rows, Month in Columns and calculated difference in Values.
This matrix will now show the demand changes compared to the previous snapshot date for each month.
If this post helps, then please consider Accepting as solution to help the other members find it more quickly, don't forget to give a "Kudos" – I’d truly appreciate it!
Thanks and regards,
Anjan Kumar Chippa
- v-achippaCommunity Support
Hi Someone22,
Thank you for the response, when working with large datasets the Index and Merge method can be slow or even freeze the power query. So please follow this below performance optimized approach:
- Open Power Query Editor select all month columns (2025.May to 2025.September) and click Unpivot Columns. Rename columns to Days, Month, Demand.
- Make sure Days column is in date format, and sort by Month and then Days in descending order
- Duplicate the table and name it as PreviousRow.
- In the original table, rename the Days column to CurrentDay. And in the PreviousRow, rename the Days column to PreviousDay.
- Add a new custom column and name it as NextSnapshotDay and use the below code:
= Date.AddDays([PreviousDay], 1) - Now merge the original table with PreviousRow, on Month = Month and CurrentDay from original table = NextSnapshotDay from PreviousRow
- Expand the merged PreviousRow table and extract PreviousDay and Demand. Rename the extracted Demand column to PreviousDemand.
- After the merge add a new column to calculate the difference:
= [Demand] - [PreviousDemand] - Click Close & Apply to load the transformed data.
- Create a Matrix visual and use CurrentDay in Rows, Month in Columns and calculated difference in Values.
This approach avoids heavy index operations and performs better on large datasets and It will show the change in demand between the current snapshot and the previous one for each month.
If this post helps, then please consider Accepting as solution to help the other members find it more quickly, don't forget to give a "Kudos" – I’d truly appreciate it!
Thanks and regards,
Anjan Kumar Chippa