Forum Discussion
Help adding custom columns to matrix (based off the output, not the raw data)
Hi, I have a simple matrix I made from my data set in the reporting view in Power Bi:
Is it possible for Power Bi to add a % change column from quarter to quarter, in the report view such as this?
I guess I'm asking if Power Bi has the ability to make calculated columns once you've already made the matrix table in the report view.
I'm currently having to make these types of reports in Excel with their functions but I'd love to learn how to make this happen in Power Bi.
Thanks!
You have 2 options here:
1) Create a measure that can be used in every visual in your report.
QoQ % Change = VAR CurrentQ = [Value] VAR PrevQ = CALCULATE ( [Value], DATEADD ( 'Date'[Date], -1, QUARTER ) ) RETURN IF ( NOT ISBLANK ( PrevQ ), DIVIDE ( CurrentQ - PrevQ, PrevQ ) )2) Create a "Visual Calculation" as below which is going to work only with the visual that the calculation has been made.
QoQ % (visual) = VAR Prev = PREVIOUS ( [Value], COLUMNS ) RETURN DIVIDE ( [Value] - Prev, Prev )Hi tridino
Power BI doesn’t work like Excel where you can “add a calculated column” directly on top of a visual’s output. Matrix/visuals in Power BI are designed for visualization of the model, and their layout options are relatively rigid: the Columns/Rows structure is meant to be symmetric, driven by fields and measures, not by manually inserting any custom element anywhere you want.
In your case, you’re trying to display a non-symmetric layout (values for quarters, plus % deltas only after specific quarters, and not after others). That’s not something the Matrix can “just do” by itself.
A common workaround is to “bend the rules” by creating a disconnected helper table that defines the exact column headers and order you want (e.g., Q1, Q2, %Δ2-1, Q3, %Δ3-2, Q4, %Δ4-3, Total) and then use one measure that switches between returning the quarter value or the delta value based on the selected helper-table header.
Important note: each delta header must be unique per quarter pair (e.g., %Δ2-1, %Δ3-2, %Δ4-3). If deltas are not uniquely labeled, you won’t be able to distinguish which delta calculation should run for which “delta column”, and the measure won’t be able to separate them correctly.
High-level steps:
Create a disconnected helper table (no relationship) with:
Quarter
Label (Q1/Q2/%Δ2-1/…/Total)
Sort (to control the exact column order)
Example helper table:
Matrix Helper =
DATATABLE (
"Quarter", INTEGER,
"Label", STRING,
"Sort", INTEGER,
{
{ 1, "Q1", 10 },
{ 2, "Q2", 20 },
{ 2, "%Δ2-1", 25 },
{ 3, "Q3", 30 },
{ 3, "%Δ3-2", 35 },
{ 4, "Q4", 40 },
{ 4, "%Δ4-3", 45 },
{ 0, "Total", 90 }
}
)
Then set Label to “Sort by” = Sort.Create a base measure:
Amount :=
SUM ( 'Table'[Amount] )
Create a single measure for the Matrix that returns either:the selected quarter value, or
the QoQ delta for the relevant quarter pair
Matrix Value :=
VAR label = SELECTEDVALUE ( 'Matrix Helper'[Label] )
VAR q = SELECTEDVALUE ( 'Matrix Helper'[Quarter] )VAR valQ =
IF ( q >= 1 && q <= 4,
CALCULATE ( [Amount], 'Table'[Quarter] = q )
)VAR valPrev =
IF ( q >= 2 && q <= 4,
CALCULATE ( [Amount], 'Table'[Quarter] = q - 1 )
)RETURN
SWITCH (
TRUE(),
label = "Total", [Amount],
LEFT ( label, 1 ) = "Q", valQ,
LEFT ( label, 2 ) = "%Δ", DIVIDE ( valQ - valPrev, valPrev ),
BLANK()
)
Build the Matrix:Rows: Year (from your fact table)
Columns: Matrix Helper[Label]
Values: Matrix Value
This gives you the exact “custom column placement” effect you’re used to in Excel, but in a way that fits Power BI’s modeling + measure paradigm.
(Optional) Formatting: If you want integers for quarter values and one-decimal % for delta columns, you’ll need Dynamic Format Strings (best option) or a text formatting workaround.
Result:
The pbix with the example is attached
If this post helps, then please consider Accepting it as the solution to help the other members find it more quickly
Hi tridino
This solution assumes that you are using a dedicated dates/calendar table which is one of the best practices.
Create a disconnected table containing, the quarter and delta rows column plus other helper columns
Power BI's interface doesn't allow a distinct value to be sorted multiple times thus the need for Period2 which is what will be used in a visual.
Create this measure to get the QoQ variance %
QoQ % = VAR _prev = CALCULATE ( [Total Revenue], PREVIOUSQUARTER ( Dates[Date] ) ) VAR _diff = [Total Revenue] - _prev RETURN DIVIDE ( _diff, _prev )Create this measure:
Quarter Delta Measure = VAR _quarter = CALCULATE ( [Total Revenue], TREATAS ( VALUES ( QuarterDelta[Quarter] ), Dates[Quarter (Number)] ) ) VAR _QoQ = CALCULATE ( [QoQ %], TREATAS ( VALUES ( QuarterDelta[Quarter] ), Dates[Quarter (Number)] ) ) VAR _Total = IF ( not(HASONEVALUE(QuarterDelta[Sort])), [Total Revenue]) RETURN SWITCH ( SELECTEDVALUE ( QuarterDelta[Category] ), "Q", _quarter, "Delta", _QoQ, _Total )Dynamically format this measure with dynamic format strings.
Use the Period2 column from QuarterDelta table and the year column from Dates/Calendar table. Add the measure
Please see the attached pbix.
7 Replies
- Ritaf1983Super User
Hi tridino
Power BI doesn’t work like Excel where you can “add a calculated column” directly on top of a visual’s output. Matrix/visuals in Power BI are designed for visualization of the model, and their layout options are relatively rigid: the Columns/Rows structure is meant to be symmetric, driven by fields and measures, not by manually inserting any custom element anywhere you want.
In your case, you’re trying to display a non-symmetric layout (values for quarters, plus % deltas only after specific quarters, and not after others). That’s not something the Matrix can “just do” by itself.
A common workaround is to “bend the rules” by creating a disconnected helper table that defines the exact column headers and order you want (e.g., Q1, Q2, %Δ2-1, Q3, %Δ3-2, Q4, %Δ4-3, Total) and then use one measure that switches between returning the quarter value or the delta value based on the selected helper-table header.
Important note: each delta header must be unique per quarter pair (e.g., %Δ2-1, %Δ3-2, %Δ4-3). If deltas are not uniquely labeled, you won’t be able to distinguish which delta calculation should run for which “delta column”, and the measure won’t be able to separate them correctly.
High-level steps:
Create a disconnected helper table (no relationship) with:
Quarter
Label (Q1/Q2/%Δ2-1/…/Total)
Sort (to control the exact column order)
Example helper table:
Matrix Helper =
DATATABLE (
"Quarter", INTEGER,
"Label", STRING,
"Sort", INTEGER,
{
{ 1, "Q1", 10 },
{ 2, "Q2", 20 },
{ 2, "%Δ2-1", 25 },
{ 3, "Q3", 30 },
{ 3, "%Δ3-2", 35 },
{ 4, "Q4", 40 },
{ 4, "%Δ4-3", 45 },
{ 0, "Total", 90 }
}
)
Then set Label to “Sort by” = Sort.Create a base measure:
Amount :=
SUM ( 'Table'[Amount] )
Create a single measure for the Matrix that returns either:the selected quarter value, or
the QoQ delta for the relevant quarter pair
Matrix Value :=
VAR label = SELECTEDVALUE ( 'Matrix Helper'[Label] )
VAR q = SELECTEDVALUE ( 'Matrix Helper'[Quarter] )VAR valQ =
IF ( q >= 1 && q <= 4,
CALCULATE ( [Amount], 'Table'[Quarter] = q )
)VAR valPrev =
IF ( q >= 2 && q <= 4,
CALCULATE ( [Amount], 'Table'[Quarter] = q - 1 )
)RETURN
SWITCH (
TRUE(),
label = "Total", [Amount],
LEFT ( label, 1 ) = "Q", valQ,
LEFT ( label, 2 ) = "%Δ", DIVIDE ( valQ - valPrev, valPrev ),
BLANK()
)
Build the Matrix:Rows: Year (from your fact table)
Columns: Matrix Helper[Label]
Values: Matrix Value
This gives you the exact “custom column placement” effect you’re used to in Excel, but in a way that fits Power BI’s modeling + measure paradigm.
(Optional) Formatting: If you want integers for quarter values and one-decimal % for delta columns, you’ll need Dynamic Format Strings (best option) or a text formatting workaround.
Result:
The pbix with the example is attached
If this post helps, then please consider Accepting it as the solution to help the other members find it more quickly
- Ashish_MathurSuper User
Hi,
Drag the second measure to the matrix visual
Previous quarter sales = calculate([sales],previousquarter(calendar[date]))
Growth = divide(([Sales]-[Previous quarter sales]),[Previous quarter sales])
Hope this helps.
- cengizhanarslanSuper User
You have 2 options here:
1) Create a measure that can be used in every visual in your report.
QoQ % Change = VAR CurrentQ = [Value] VAR PrevQ = CALCULATE ( [Value], DATEADD ( 'Date'[Date], -1, QUARTER ) ) RETURN IF ( NOT ISBLANK ( PrevQ ), DIVIDE ( CurrentQ - PrevQ, PrevQ ) )2) Create a "Visual Calculation" as below which is going to work only with the visual that the calculation has been made.
QoQ % (visual) = VAR Prev = PREVIOUS ( [Value], COLUMNS ) RETURN DIVIDE ( [Value] - Prev, Prev ) - cengizhanarslanSuper User
You have 2 options here:
1) Create a measure that can be used in every visual in your report.
QoQ % Change = VAR CurrentQ = [Value] VAR PrevQ = CALCULATE ( [Value], DATEADD ( 'Date'[Date], -1, QUARTER ) ) RETURN IF ( NOT ISBLANK ( PrevQ ), DIVIDE ( CurrentQ - PrevQ, PrevQ ) )2) Create a "Visual Calculation" as below which is going to work only with the visual that the calculation has been made.
QoQ % (visual) = VAR Prev = PREVIOUS ( [Value], COLUMNS ) RETURN DIVIDE ( [Value] - Prev, Prev ) - danextianSuper User
Hi tridino
This solution assumes that you are using a dedicated dates/calendar table which is one of the best practices.
Create a disconnected table containing, the quarter and delta rows column plus other helper columns
Power BI's interface doesn't allow a distinct value to be sorted multiple times thus the need for Period2 which is what will be used in a visual.
Create this measure to get the QoQ variance %
QoQ % = VAR _prev = CALCULATE ( [Total Revenue], PREVIOUSQUARTER ( Dates[Date] ) ) VAR _diff = [Total Revenue] - _prev RETURN DIVIDE ( _diff, _prev )Create this measure:
Quarter Delta Measure = VAR _quarter = CALCULATE ( [Total Revenue], TREATAS ( VALUES ( QuarterDelta[Quarter] ), Dates[Quarter (Number)] ) ) VAR _QoQ = CALCULATE ( [QoQ %], TREATAS ( VALUES ( QuarterDelta[Quarter] ), Dates[Quarter (Number)] ) ) VAR _Total = IF ( not(HASONEVALUE(QuarterDelta[Sort])), [Total Revenue]) RETURN SWITCH ( SELECTEDVALUE ( QuarterDelta[Category] ), "Q", _quarter, "Delta", _QoQ, _Total )Dynamically format this measure with dynamic format strings.
Use the Period2 column from QuarterDelta table and the year column from Dates/Calendar table. Add the measure
Please see the attached pbix.
- v-hjannapuCommunity Support
Hi tridino,
I would also take a moment to thank Ritaf1983 , danextian for actively participating in the community forum and for the solutions you’ve been sharing in the community forum. Your contributions make a real difference.
I wanted to check if you had the opportunity to review the information provided. Please feel free to contact us if you have any further questions.
Regards,
Community Support Team.- v-hjannapuCommunity Support
Hi tridino,
I hope the above details help you fix the issue. If you still have any questions or need more help, feel free to reach out. We are always here to support you.
Regards,
Community Support Team.