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

Get Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Request now

Reply
shahrukhgaffar0
New Member

Wanna Create Waterfall Visual

Hi All,

I want to create a WaterFall Visual But Some Conditions i Want in it

shahrukhgaffar0_0-1760164108496.png

This is My Target Visual That i need to be 

and Below is my Power BI visual

shahrukhgaffar0_1-1760164159036.png

 

Condition
YTD Sales will be 1st Bar
2nd Last Will Be Variance
and Last will be Target Value


I have Created a Calculated Table With Index 
now i am Stuck to Replicate the Same Visual

1 ACCEPTED SOLUTION
Ilgar_Zarbali
Super User
Super User

You can force that exact order (YTD first → drivers → Variance (2nd last) → Target (last)) with a disconnected steps table and one measure that returns the amount for the currently selected step.

  • Disconnected steps table (order + types)

Create a calculated table:

Waterfall Steps =
DATATABLE(
"Step", STRING,
"Order", INTEGER,
"Type", STRING, -- helps with colors/“Set as total”
{
{"YTD Sales", 1, "Total"},
{"Driver A", 2, "Driver"},
{"Driver B", 3, "Driver"},
{"Driver C", 4, "Driver"},
{"Variance", 999,"Variance"},
{"Target", 1000,"Total"}
})

 

Sort [Step] by [Order].
(Replace Driver A/B/C with your real drivers; add/remove rows as needed.)

 

  • Base measures you already have (examples)

[Sales YTD] := /* your YTD measure */
[Target Value]:= /* your target measure */

/* One driver amount measure that returns value for a single category
in your fact table (adjust table/column names & logic) */
[Driver Amount] :=
VAR cat = SELECTEDVALUE ( 'Waterfall Steps'[Step] )
RETURN
CALCULATE ( [Base Amount],
TREATAS ( { cat }, 'Fact'[Category] ) )

 

  • Helper: sum of ALL driver bars (ignores current point)

 

[Sum Drivers] :=
SUMX (
FILTER ( ALL ( 'Waterfall Steps' ), 'Waterfall Steps'[Type] = "Driver" ),
CALCULATE (
[Base Amount],
TREATAS ( { 'Waterfall Steps'[Step] }, 'Fact'[Category] )
)
)

 

Base Amount should be the measure that produces each driver’s signed contribution. If your drivers come from different rules, create separate measures and sum them here instead.

 

  • Final measure used by the waterfall

 

[Waterfall Amount] :=
SWITCH (
TRUE(),
SELECTEDVALUE('Waterfall Steps'[Step]) = "YTD Sales", [Sales YTD],
SELECTEDVALUE('Waterfall Steps'[Step]) = "Target", [Target Value],
SELECTEDVALUE('Waterfall Steps'[Step]) = "Variance",
[Target Value] - [Sales YTD] - [Sum Drivers],
/* otherwise it's a driver step */
[Driver Amount]
)

 

  • Build the chart
  • Visual: Waterfall.
  • Category → Waterfall Steps[Step].
  • Y axis → [Waterfall Amount].
  • Click the YTD Sales bar → turn on Set as total.
  • Click the Target bar → turn on Set as total.
  • (Leave Variance as a regular bar; it will appear as the 2nd last because of the order.)
  • Optional: add a column Color to the steps table (e.g., green for YTD, red for Variance, grey for Target) and use Data colors → Conditional formatting → Field value.

This pattern guarantees:

  • YTD Sales is always the first (total) bar,
  • your drivers appear in the middle in the exact order you defined,
  • Variance is the second-last bar computed as the gap to Target,
  • Target is the last (total) bar.

If you share your driver logic/columns, I can plug them straight into the [Driver Amount] and [Sum Drivers] pieces for you.

 

I hope it will help you.

 

 

 

 

 

 

 

 

 

 

View solution in original post

4 REPLIES 4
v-nmadadi-msft
Community Support
Community Support

Hi @shahrukhgaffar0 

May I check if this issue has been resolved? If not, Please feel free to contact us if you have any further questions.


Thank you

v-prasare
Community Support
Community Support

Hi @shahrukhgaffar0,

We would like to confirm if our community members answer resolves your query or if you need further help. If you still have any questions or need more support, please feel free to let us know. We are happy to help you.


@Ilgar_Zarbali & @Nasif_Azam ,Thanks for your prompt response

 

 

Thank you for your patience and look forward to hearing from you.
Best Regards,
Prashanth Are
MS Fabric community support

Ilgar_Zarbali
Super User
Super User

You can force that exact order (YTD first → drivers → Variance (2nd last) → Target (last)) with a disconnected steps table and one measure that returns the amount for the currently selected step.

  • Disconnected steps table (order + types)

Create a calculated table:

Waterfall Steps =
DATATABLE(
"Step", STRING,
"Order", INTEGER,
"Type", STRING, -- helps with colors/“Set as total”
{
{"YTD Sales", 1, "Total"},
{"Driver A", 2, "Driver"},
{"Driver B", 3, "Driver"},
{"Driver C", 4, "Driver"},
{"Variance", 999,"Variance"},
{"Target", 1000,"Total"}
})

 

Sort [Step] by [Order].
(Replace Driver A/B/C with your real drivers; add/remove rows as needed.)

 

  • Base measures you already have (examples)

[Sales YTD] := /* your YTD measure */
[Target Value]:= /* your target measure */

/* One driver amount measure that returns value for a single category
in your fact table (adjust table/column names & logic) */
[Driver Amount] :=
VAR cat = SELECTEDVALUE ( 'Waterfall Steps'[Step] )
RETURN
CALCULATE ( [Base Amount],
TREATAS ( { cat }, 'Fact'[Category] ) )

 

  • Helper: sum of ALL driver bars (ignores current point)

 

[Sum Drivers] :=
SUMX (
FILTER ( ALL ( 'Waterfall Steps' ), 'Waterfall Steps'[Type] = "Driver" ),
CALCULATE (
[Base Amount],
TREATAS ( { 'Waterfall Steps'[Step] }, 'Fact'[Category] )
)
)

 

Base Amount should be the measure that produces each driver’s signed contribution. If your drivers come from different rules, create separate measures and sum them here instead.

 

  • Final measure used by the waterfall

 

[Waterfall Amount] :=
SWITCH (
TRUE(),
SELECTEDVALUE('Waterfall Steps'[Step]) = "YTD Sales", [Sales YTD],
SELECTEDVALUE('Waterfall Steps'[Step]) = "Target", [Target Value],
SELECTEDVALUE('Waterfall Steps'[Step]) = "Variance",
[Target Value] - [Sales YTD] - [Sum Drivers],
/* otherwise it's a driver step */
[Driver Amount]
)

 

  • Build the chart
  • Visual: Waterfall.
  • Category → Waterfall Steps[Step].
  • Y axis → [Waterfall Amount].
  • Click the YTD Sales bar → turn on Set as total.
  • Click the Target bar → turn on Set as total.
  • (Leave Variance as a regular bar; it will appear as the 2nd last because of the order.)
  • Optional: add a column Color to the steps table (e.g., green for YTD, red for Variance, grey for Target) and use Data colors → Conditional formatting → Field value.

This pattern guarantees:

  • YTD Sales is always the first (total) bar,
  • your drivers appear in the middle in the exact order you defined,
  • Variance is the second-last bar computed as the gap to Target,
  • Target is the last (total) bar.

If you share your driver logic/columns, I can plug them straight into the [Driver Amount] and [Sum Drivers] pieces for you.

 

I hope it will help you.

 

 

 

 

 

 

 

 

 

 

Nasif_Azam
Super User
Super User

Hey @shahrukhgaffar0 ,
To work with waterfall visual you have to do some pre-works:

 

1) Create a Helper Table with your preference.

Nasif_Azam_0-1760189694678.png

 

2) Create a DAX Measure with will be sent to the Y-Axis. (e.g. YTD Sales, Variance, Target Value, Cumulative Value)

 

Cumulative Total = 
IF(
VALUES('HelperWaterfall'[IsStart]) = TRUE(),
0,
CALCULATE(
SUM('HelperWaterfall'[Value]),
FILTER(
ALL('HelperWaterfall'),
'HelperWaterfall'[Step] <= MAX('HelperWaterfall'[Step])
)
)
)

 

3) Build the Waterfall Chart

Nasif_Azam_1-1760189716390.png

 

 

Highly suggestion you to follow the forum:
Waterfall chart with multiple measures

 

 

Best Regards,
Nasif Azam



Did I answer your question?
If so, mark my post as a solution!
Also consider helping someone else in the forums!

Proud to be a Super User!


LinkedIn

Helpful resources

Announcements
FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.

Top Solution Authors