Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more.
Get startedGrow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.
Creating a financial report that will have a few different scenarios (years) that will need to be compared across a few different metrics. User would come in and select which two years they want to see compared and then see totals for billings, revenue etc and the variances. i can attach a sample report.
The selection would be any two years on the year column.
Solved! Go to Solution.
entity | YYYY | Region | Market | Client_Billings | Client_Net_Revenue | Client_Total_Gross_Revenue |
5frFRANCcon | 2019 | EMEA | France | 7215.001 | 7215.001 | 7215.001 |
5grGRBGMcon | 2019 | EMEA | Greece | 1139903.943 | 169980.721 | 169980.721 |
5totANNALECT | 2019 | Global | Global | -0.33 | 0 | 0 |
5totPUERT | 2019 | LATAM | Puerto Rico | 0 | 0 | 0 |
5xtotBELGM | 2019 | EMEA | Belgium | 686262.48 | 29564.944 | 29564.944 |
2clCHILE | 2019 | LATAM | Chile | 0 | -83248.259 | -83248.259 |
5frFRANCcon | 2019 | EMEA | France | 48257.709 | 48257.709 | 48257.709 |
5totNZLND | 2019 | APAC | New Zealand | 0 | 0 | 0 |
5xtotBELGM | 2019 | EMEA | Belgium | 490480.479 | 35611.351 | 35611.351 |
5totOUTDR | 2019 | North America | USA | 7617 | 2151 | 2151 |
5totPHDUS | 2019 | North America | USA | 1881256 | 131983 | 131983 |
5totRESOL | 2019 | North America | USA | 344556.09 | 95790.55 | 333039 |
5totICON | 2019 | North America | USA | 4185 | -7830 | 4185 |
5frFRANCcon | 2019 | EMEA | France | 0 | 0 | 0 |
5totASTRL | 2019 | APAC | Australia | 127774.281 | 127774.138 | 127774.138 |
5vnVIETNcon | 2019 | APAC | Vietnam | 631129.281 | 22485.766 | 22485.766 |
5xtotBELGM | 2019 | EMEA | Belgium | 26706.15 | 3997.819 | 3997.819 |
5totOUTDR | 2019 | North America | USA | 13907408 | 304864 | 304864 |
5dnDNMRKcon | 2019 | EMEA | Denmark | 0 | 0 | 0 |
5grGREECcon | 2019 | EMEA | Greece | 438234.409 | 316254.77 | 316254.77 |
5totOUTDR | 2019 | North America | USA | 422292 | 20041 | 20041 |
5totMOBIL | 2019 | EMEA | United Kingdom | 0 | 0 | 0 |
5totUKGRP | 2019 | EMEA | United Kingdom | 0 | 63424.817 | 63424.817 |
Ok, here are two possible ways of going about this.
The first is using the default matrix capabilities; this method will have a better performance but the metrics' headers are less clear.
The second involves creating a specific table layout which recreates the measures displayed to be used as the matrix header. It provides more clarity at the expense of performance possibly (my sample dataset is minute so I can't really compare the performances of both solutions).
So...
Option 1: Default matrix capabilities.
We need two tables for "Year" to be able to compare the values. One of these tables has a regular One-to-many active relationship with the fact table; the second Year table's relationship is inactive. The model looks like this:
The measures for each metric follow these patterns:
For the first Year selection.
Client Billings =
SUM(FTable[Client_Billings])
For the comparison Year selection:
Comp Billings =
CALCULATE (
[Client Billings],
REMOVEFILTERS ( DYear[Year] ),
USERELATIONSHIP ( VYear[Year], FTable[Year] )
)
and the % var between both years:
Billings % var =
SWITCH (
TRUE (),
AND ( ISBLANK ( [Client Billings] ), ISBLANK ( [Comp Billings] ) ), BLANK (),
AND ( [Client Billings] = 0, [Comp Billings] = 0 ), 0,
DIVIDE ( [Client Billings], [Comp Billings] ) - 1
)
The matrix is set up as follows, with each individual measure set in order in the values bucket:
To get:
Option 2: Custom Header to show the columns by years
The setup requires creating a custom table to use as the matrix header. Firstly we need a list of the measures and their respective order. (copy and paste from Excel or use the "Enter Data" option to create it):
We then need to add the Years from the model (Crossjoin) to create both the actual header needed in the matrix and a sorting column. This is all done in Power Query:
Leave this table unrelated in the model. The model looks like this:
We only need to create one measure, referencing the measures we have already created, which is the one we will use for the matrix:
For Matrix =
SWITCH (
TRUE (),
ISBLANK ( [Client Billings] ) && ISBLANK ( [Comp Billings] )
&& ISBLANK ( [Net Revenue] ), BLANK (),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( DYear[Year] ),
MAX ( Header[Order] ) = 1
), FORMAT ( [Client Billings], "Currency" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( VYear[Year] ),
MAX ( Header[Order] ) = 2
), FORMAT ( [Comp Billings], "Currency" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( DYear[Year] ),
MAX ( Header[Order] ) = 3
), FORMAT ( [Billings % var], "Percent" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( DYear[Year] ),
MAX ( Header[Order] ) = 4
), FORMAT ( [Gross Revenue], "Currency" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( VYear[Year] ),
MAX ( Header[Order] ) = 5
), FORMAT ( [Comp Gross Revenue], "Currency" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( DYear[Year] ),
MAX ( Header[Order] ) = 6
), FORMAT ( [Gross Rev % Var], "Percent" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( DYear[Year] ),
MAX ( Header[Order] ) = 7
), FORMAT ( [Net Revenue], "Currency" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( VYear[Year] ),
MAX ( Header[Order] ) = 8
), FORMAT ( [Comp Net Revenue], "Currency" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( DYear[Year] ),
MAX ( Header[Order] ) = 9
), FORMAT ( [Net Rev % Var], "Percent" )
)
We then set up the Matrix with the field fromt the Header Table as the columns, whatever dimension for the rows and the [For Matrix] measure as the values:
To get:
So take your pick!
I've attached the sample PBIX file
Proud to be a Super User!
Paul on Linkedin.
Ok, here are two possible ways of going about this.
The first is using the default matrix capabilities; this method will have a better performance but the metrics' headers are less clear.
The second involves creating a specific table layout which recreates the measures displayed to be used as the matrix header. It provides more clarity at the expense of performance possibly (my sample dataset is minute so I can't really compare the performances of both solutions).
So...
Option 1: Default matrix capabilities.
We need two tables for "Year" to be able to compare the values. One of these tables has a regular One-to-many active relationship with the fact table; the second Year table's relationship is inactive. The model looks like this:
The measures for each metric follow these patterns:
For the first Year selection.
Client Billings =
SUM(FTable[Client_Billings])
For the comparison Year selection:
Comp Billings =
CALCULATE (
[Client Billings],
REMOVEFILTERS ( DYear[Year] ),
USERELATIONSHIP ( VYear[Year], FTable[Year] )
)
and the % var between both years:
Billings % var =
SWITCH (
TRUE (),
AND ( ISBLANK ( [Client Billings] ), ISBLANK ( [Comp Billings] ) ), BLANK (),
AND ( [Client Billings] = 0, [Comp Billings] = 0 ), 0,
DIVIDE ( [Client Billings], [Comp Billings] ) - 1
)
The matrix is set up as follows, with each individual measure set in order in the values bucket:
To get:
Option 2: Custom Header to show the columns by years
The setup requires creating a custom table to use as the matrix header. Firstly we need a list of the measures and their respective order. (copy and paste from Excel or use the "Enter Data" option to create it):
We then need to add the Years from the model (Crossjoin) to create both the actual header needed in the matrix and a sorting column. This is all done in Power Query:
Leave this table unrelated in the model. The model looks like this:
We only need to create one measure, referencing the measures we have already created, which is the one we will use for the matrix:
For Matrix =
SWITCH (
TRUE (),
ISBLANK ( [Client Billings] ) && ISBLANK ( [Comp Billings] )
&& ISBLANK ( [Net Revenue] ), BLANK (),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( DYear[Year] ),
MAX ( Header[Order] ) = 1
), FORMAT ( [Client Billings], "Currency" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( VYear[Year] ),
MAX ( Header[Order] ) = 2
), FORMAT ( [Comp Billings], "Currency" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( DYear[Year] ),
MAX ( Header[Order] ) = 3
), FORMAT ( [Billings % var], "Percent" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( DYear[Year] ),
MAX ( Header[Order] ) = 4
), FORMAT ( [Gross Revenue], "Currency" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( VYear[Year] ),
MAX ( Header[Order] ) = 5
), FORMAT ( [Comp Gross Revenue], "Currency" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( DYear[Year] ),
MAX ( Header[Order] ) = 6
), FORMAT ( [Gross Rev % Var], "Percent" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( DYear[Year] ),
MAX ( Header[Order] ) = 7
), FORMAT ( [Net Revenue], "Currency" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( VYear[Year] ),
MAX ( Header[Order] ) = 8
), FORMAT ( [Comp Net Revenue], "Currency" ),
AND (
MAX ( Header[HYear] ) = SELECTEDVALUE ( DYear[Year] ),
MAX ( Header[Order] ) = 9
), FORMAT ( [Net Rev % Var], "Percent" )
)
We then set up the Matrix with the field fromt the Header Table as the columns, whatever dimension for the rows and the [For Matrix] measure as the values:
To get:
So take your pick!
I've attached the sample PBIX file
Proud to be a Super User!
Paul on Linkedin.
entity | YYYY | Region | Market | Client_Billings | Client_Net_Revenue | Client_Total_Gross_Revenue |
5frFRANCcon | 2019 | EMEA | France | 7215.001 | 7215.001 | 7215.001 |
5grGRBGMcon | 2019 | EMEA | Greece | 1139903.943 | 169980.721 | 169980.721 |
5totANNALECT | 2019 | Global | Global | -0.33 | 0 | 0 |
5totPUERT | 2019 | LATAM | Puerto Rico | 0 | 0 | 0 |
5xtotBELGM | 2019 | EMEA | Belgium | 686262.48 | 29564.944 | 29564.944 |
2clCHILE | 2019 | LATAM | Chile | 0 | -83248.259 | -83248.259 |
5frFRANCcon | 2019 | EMEA | France | 48257.709 | 48257.709 | 48257.709 |
5totNZLND | 2019 | APAC | New Zealand | 0 | 0 | 0 |
5xtotBELGM | 2019 | EMEA | Belgium | 490480.479 | 35611.351 | 35611.351 |
5totOUTDR | 2019 | North America | USA | 7617 | 2151 | 2151 |
5totPHDUS | 2019 | North America | USA | 1881256 | 131983 | 131983 |
5totRESOL | 2019 | North America | USA | 344556.09 | 95790.55 | 333039 |
5totICON | 2019 | North America | USA | 4185 | -7830 | 4185 |
5frFRANCcon | 2019 | EMEA | France | 0 | 0 | 0 |
5totASTRL | 2019 | APAC | Australia | 127774.281 | 127774.138 | 127774.138 |
5vnVIETNcon | 2019 | APAC | Vietnam | 631129.281 | 22485.766 | 22485.766 |
5xtotBELGM | 2019 | EMEA | Belgium | 26706.15 | 3997.819 | 3997.819 |
5totOUTDR | 2019 | North America | USA | 13907408 | 304864 | 304864 |
5dnDNMRKcon | 2019 | EMEA | Denmark | 0 | 0 | 0 |
5grGREECcon | 2019 | EMEA | Greece | 438234.409 | 316254.77 | 316254.77 |
5totOUTDR | 2019 | North America | USA | 422292 | 20041 | 20041 |
5totMOBIL | 2019 | EMEA | United Kingdom | 0 | 0 | 0 |
5totUKGRP | 2019 | EMEA | United Kingdom | 0 | 63424.817 | 63424.817 |
Can you please post data covering several years? (Otherwise no year comparison is possible)
Proud to be a Super User!
Paul on Linkedin.
Entity | Year | Billings | Net Rev | Placement | Gross Rev |
5OMD_USA | 2019 | 835176858.4 | 28794132 | 29496.5 | 28823628.5 |
5OMD_USA | 2021 | 1107348334 | 41509975.38 | 41509975.38 | |
5OMD_USA | 2022 | 1201387131 | 43230742.9 | 43230742.9 |
what you see above is that it will be pre filtered to one entity
If you can share a sample PBIX file (you can share the link from a cloud service such as OneDrive, Google Drive, Dropbox...) that would be great
Proud to be a Super User!
Paul on Linkedin.
Yes I get that. What I mean is that the sample data you posted is 2019 data, so there is no way of setting up a working example which will showcase year comparisons, which is what you originally requested
Proud to be a Super User!
Paul on Linkedin.
Like if they chose 2022 and 2021
Billings 2022 | Billings 2021 | Var $ | Var % | Revenue 2022 | Revenue 2021 | Var$ | Var % |
$2,214,728 | $2,428,931 | ($214,203) | -8.8% | $161,881 | $169,822 | ($7,940) | -4.7% |
$2,166,979 | $2,670,534 | ($503,555) | -18.9% | $158,611 | $162,008 | ($3,397) | -2.1% |
$2,118,540 | $1,909,052 | $209,488 | 11.0% | $128,230 | $128,157 | $73 | 0.1% |
$1,199,792 | $1,491,702 | ($291,910) | -19.6% | $116,792 | $150,954 | ($34,161) | -22.6% |
$1,464,133 | $1,097,197 | $366,936 | 33.4% | $104,524 | $78,612 | $25,911 | 33.0% |
$688,568 | $693,241 | ($4,674) | -0.7% | $100,258 | $69,041 | $31,216 | 45.2% |
$2,571,724 | $2,518,014 | $53,710 | 2.1% | $95,071 | $91,866 | $3,205 | 3.5% |
$1,386,870 | $1,229,554 | $157,316 | 12.8% | $92,826 | $96,726 | ($3,900) | -4.0% |
$310,772 | $939,260 | ($628,488) | -66.9% | $67,270 | $227,506 | ($160,236) | -70.4% |
$563,914 | $681,810 | ($117,896) | -17.3% | $47,662 | $52,473 | ($4,811) | -9.2% |
$110,789 | $87,714 | $23,075 | 26.3% | $45,665 | $39,549 | $6,116 | 15.5% |
$244,178 | $228,595 | $15,583 | 6.8% | $44,483 | $44,968 | ($484) | -1.1% |
$127,202 | $120,970 | $6,232 | 5.2% | $41,585 | $37,202 | $4,383 | 11.8% |
$294,939 | $343,728 | ($48,789) | -14.2% | $36,720 | $38,968 | ($2,248) | -5.8% |
Ask questions in Eventhouse and KQL, Eventstream, and Reflex.
Check out the May 2024 Power BI update to learn about new features.
User | Count |
---|---|
90 | |
80 | |
60 | |
59 | |
58 |
User | Count |
---|---|
157 | |
119 | |
104 | |
77 | |
69 |