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

A new Data Days event is coming soon! This time we’re going bigger than ever. Fabric, Power BI, SQL, AI and more. Don't miss out.

Reply
Syndicate_Admin
Administrator
Administrator

Waterfall chart in Power BI

I need help with Power BI. I have to create a waterfall chart (like the attached image), where the first bar should go in blue. Bars 2, 3, 4, 5 must vary their color (green/red) if the value increases/decreases, and bar 6 is also blue (it is the total of the 5 previous columns), in fact I must change the name of total to that column to the measure of the graph. If someone can help me and/or guide me, I would be grateful (if you need the DAX measures already created for the amounts, let me know).


1 ACCEPTED SOLUTION
Ritaf1983
Super User
Super User

Hi @Syndicate_Admin 
Please relate to my responce in the linked discussion :

https://community.fabric.microsoft.com/t5/Desktop/Workaround-Different-Bar-Colours-for-simple-waterf...

If this post helps, then please consider Accepting it as the solution to help the other members find it more quickly.

Regards,
Rita Fainshtein | Microsoft MVP
https://www.linkedin.com/in/rita-fainshtein/
Blog : https://www.madeiradata.com/profile/ritaf/profile

View solution in original post

6 REPLIES 6
v-sdhruv
Community Support
Community Support

Hi @Syndicate_Admin ,

Since we didnt hear back, we would be closing this thread.
If you need any assistance, feel free to reach out by creating a new post.

Thank you for using Microsoft Community Forum

v-sdhruv
Community Support
Community Support

Hi @Syndicate_Admin ,

Just wanted to check if you got a chance to review the suggestions provided and whether that helped you resolve your query?

v-sdhruv
Community Support
Community Support

Hi @Syndicate_Admin ,
Just wanted to check if you got a chance to review the suggestions provided and whether that helped you resolve your query?

Thank You @Ritaf1983  and @MohamedFowzan1  for your valuable inputs to the query.

Ritaf1983
Super User
Super User

Hi @Syndicate_Admin 
Please relate to my responce in the linked discussion :

https://community.fabric.microsoft.com/t5/Desktop/Workaround-Different-Bar-Colours-for-simple-waterf...

If this post helps, then please consider Accepting it as the solution to help the other members find it more quickly.

Regards,
Rita Fainshtein | Microsoft MVP
https://www.linkedin.com/in/rita-fainshtein/
Blog : https://www.madeiradata.com/profile/ritaf/profile
MohamedFowzan1
Solution Specialist
Solution Specialist

Hi @Syndicate_Admin 

 

Prepare Your Data Table

Your data should have at least these columns:

  • Category (e.g., "Mg. Contribución Jun-25 Plan", "Δ Mg. Servicios", etc.)

  • Value (numerical deviation or total)

  • Type ("Increase", "Decrease", "Total", or "Start" for coloring purposes)

Example data structure:

Category Value Type
Mg. Contribución Jun-25 Plan176Start
Δ Mg. Servicios-318Decrease
Δ Mg. Equipos26Increase
Δ C. Op. VP Digital-16Decrease
Δ C. Comercial-42Decrease
Mg. Contribución Jun-25 Real-174Total

2. Insert a Waterfall Visual

  • In Power BI, select the Waterfall chart visual from the “Visualizations” pane.

  • Drag Category to the X-axis.

  • Drag Value to “Y-axis” or “Values”.

3. Set Proper Bar Colors

Power BI default waterfall chart automatically assigns colors, but to customize:

  • Go to Format panel for the visual.

  • Expand Data colors.

Set colors manually for each “Category”:

  • Set the first bar (“Start”) and last bar (“Total”) to Blue.

  • Set “Increase” type bars (positive values) to Green.

  • Set “Decrease” type bars (negative values) to Red.

If you don’t see options to set colors by data, use “Conditional formatting”:

  • In “Data colors”, click the “fx” (function) button to apply rules.

  • Base the formatting on your “Type” (if you have “Type” column):

    • If “Type” is “Increase”, set color to green.

    • If “Type” is “Decrease”, set color to red.

    • If “Type” is “Start” or “Total”, set color to blue.

4. Rename the Total Column

Power BI allows replacing labels:

  • Click on the last bar (Total) in the chart.

  • In the Data label properties or through the Data table, you can rename the “Total” to your measure (e.g., “Mg. Contribución Jun-25 Real”).

  • Alternatively, edit the value in your data table to show the desired label.

Thanks for the answer.

I will try to apply it.

Anyway, these are my measurements:

Tabla_EstadoResultados4 = 
DATATABLE(
    "Cascada", STRING,
    "OrdenCascada", INTEGER,
    "ColorHex", STRING,
    "TipoBarra", STRING,
    {
        {"Mg Contribución 2025P", 1, "#10069F", "Total"},
        {"Δ Mg Servicios", 2, "", "Variacion"},
        {"Δ Mg Equipos", 3, "", "Variacion"},
        {"Δ C. Op. VP Digital", 4, "", "Variacion"},
        {"Δ C. Comercial", 5, "", "Variacion"},
        {"Mg Contribución Real", 6, "#10069F", "Total"},
        {"Mg Contribución Frcst", 7, "#10069F", "Total"},
        {"Margen Directo Total", 8, "", "Variacion"},
        {"Margen Contribución", 9, "", "Variacion"},
        {"EBITDA", 10, "", "Variacion"}
    }
)



Cascada_Mg_RP = 
VAR LineaSeleccionada = SELECTEDVALUE('Tabla_EstadoResultados4'[Cascada])
VAR TipoIngresoR = "Real"
VAR TipoIngresoP = "Plan"
VAR Anio = 2025
VAR MesHoy = MONTH(TODAY()) - 2
VAR HayFiltroMes = ISFILTERED('Dim_Calendario'[MesCorto])

----- MARGEN SERVICIOS REAL -----
VAR IngresosServiciosReal =
IF(
    HayFiltroMes,
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "01. Ingresos Servicios",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
    ),
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "01. Ingresos Servicios",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] <= MesHoy
    )
)

VAR CostosServiciosReal =
IF(
    HayFiltroMes,
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "02. Costos de Servicios",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
    ),
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "02. Costos de Servicios",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] <= MesHoy
    )
)

VAR MargenServiciosReal = IngresosServiciosReal + CostosServiciosReal

----- MARGEN SERVICIOS PLAN -----
VAR IngresosServiciosPlan =
IF(
    HayFiltroMes,
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "01. Ingresos Servicios",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
    ),
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "01. Ingresos Servicios",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] <= MesHoy
    )
)

VAR CostosServiciosPlan =
IF(
    HayFiltroMes,
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "02. Costos de Servicios",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
    ),
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "02. Costos de Servicios",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] <= MesHoy
    )
)

VAR MargenServiciosPlan = IngresosServiciosPlan + CostosServiciosPlan
VAR MargenServicios = MargenServiciosReal - MargenServiciosPlan

----- MARGEN EQUIPOS REAL -----
VAR IngresosEquiposReal =
IF(
    HayFiltroMes,
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "04. Ingresos por venta de equipos / productos",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
    ),
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "04. Ingresos por venta de equipos / productos",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] <= MesHoy
    )
)

VAR CostosEquiposReal =
IF(
    HayFiltroMes,
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "05. Costos de Equipos",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
    ),
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "05. Costos de Equipos",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] <= MesHoy
    )
)

VAR MargenEquiposReal = IngresosEquiposReal + CostosEquiposReal

----- MARGEN EQUIPOS PLAN -----
VAR IngresosEquiposPlan =
IF(
    HayFiltroMes,
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "04. Ingresos por venta de equipos / productos",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
    ),
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "04. Ingresos por venta de equipos / productos",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] <= MesHoy
    )
)

VAR CostosEquiposPlan =
IF(
    HayFiltroMes,
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "05. Costos de Equipos",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
    ),
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Costo N1] = "05. Costos de Equipos",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] <= MesHoy
    )
)

VAR MargenEquiposPlan = IngresosEquiposPlan + CostosEquiposPlan
VAR MargenEquipos = MargenEquiposReal - MargenEquiposPlan

----- COSTOS OPERACIONALES -----
VAR RealCostosOperacionales =
IF(
    HayFiltroMes,
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Template] = "G. Costo Operacional Serti",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
    ),
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Template] = "G. Costo Operacional Serti",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] <= MesHoy
    )
)

VAR PlanCostosOperacionales =
IF(
    HayFiltroMes,
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Template] = "G. Costo Operacional Serti",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
    ),
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Template] = "G. Costo Operacional Serti",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] <= MesHoy
    )
)

VAR MargenCostosOperacionales = RealCostosOperacionales - PlanCostosOperacionales

----- COSTOS COMERCIALES -----
VAR RealCostosComerciales =
IF(
    HayFiltroMes,
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Template] = "F. Costo Comercial",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
    ),
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Template] = "F. Costo Comercial",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] <= MesHoy
    )
)

VAR PlanCostosComerciales =
IF(
    HayFiltroMes,
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Template] = "F. Costo Comercial",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
    ),
    CALCULATE(
        SUM('Base_Margen'[Monto]),
        'Base_Margen'[Linea Template] = "F. Costo Comercial",
        'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
        'Base_Margen'[Año] = Anio,
        'Base_Margen'[Mes] <= MesHoy
    )
)

VAR MargenCostosComerciales = RealCostosComerciales - PlanCostosComerciales

VAR MgContribucion =
CALCULATE(
    SUM('Base_Margen'[Monto]),
    'Base_Margen'[Linea Template] IN
    {
        "A. Ingreso Servicios", "B. Costo Servicios D", "C. Electricidad",
        "D. Ingresos por Equipos", "E. Costo por Equipos",
        "F. Costo Comercial", "G. Costo Operacional Serti"
    },
    'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
    'Base_Margen'[Año] = Anio
)
-
CALCULATE(
    SUM('Base_Margen'[Monto]),
    'Base_Margen'[Linea Template] IN {
        "A. Ingreso Servicios", "B. Costo Servicios D", "C. Electricidad",
        "D. Ingresos por Equipos", "E. Costo por Equipos",
        "F. Costo Comercial", "G. Costo Operacional Serti"
    },
    'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
    'Base_Margen'[Año] = Anio
)


----- RESULTADO FINAL -----
VAR Resultado =
SWITCH(
    TRUE(),

    LineaSeleccionada="Mg Contribución 2025P",
    IF(
        HayFiltroMes,
        CALCULATE(
            SUM('Base_Margen'[Monto]),
            'Base_Margen'[Linea Template] IN {
                "A. Ingreso Servicios", "B. Costo Servicios D", "C. Electricidad",
                "D. Ingresos por Equipos", "E. Costo por Equipos",
                "F. Costo Comercial", "G. Costo Operacional Serti"
            },
            'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
            'Base_Margen'[Año] = Anio,
            'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
        ),
        CALCULATE(
            SUM('Base_Margen'[Monto]),
            'Base_Margen'[Linea Template] IN {
                "A. Ingreso Servicios", "B. Costo Servicios D", "C. Electricidad",
                "D. Ingresos por Equipos", "E. Costo por Equipos",
                "F. Costo Comercial", "G. Costo Operacional Serti"
            },
            'Base_Margen'[Tipo Ingreso] = TipoIngresoP,
            'Base_Margen'[Año] = Anio,
            'Base_Margen'[Mes] <= MesHoy
        )
    ),

    LineaSeleccionada="Δ Mg Servicios", MargenServicios,
    LineaSeleccionada="Δ Mg Equipos", MargenEquipos,
    LineaSeleccionada="Δ C. Op. VP Digital", MargenCostosOperacionales,
    LineaSeleccionada="Δ C. Comercial", MargenCostosComerciales,

    LineaSeleccionada="Mg Contribución Real",
    IF(
        HayFiltroMes,
        CALCULATE(
            SUM('Base_Margen'[Monto]),
            'Base_Margen'[Linea Template] IN {
                "A. Ingreso Servicios", "B. Costo Servicios D", "C. Electricidad",
                "D. Ingresos por Equipos", "E. Costo por Equipos",
                "F. Costo Comercial", "G. Costo Operacional Serti"
            },
            'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
            'Base_Margen'[Año] = Anio,
            'Base_Margen'[Mes] IN VALUES('Dim_Calendario'[MesNum])
        ),
        CALCULATE(
            SUM('Base_Margen'[Monto]),
            'Base_Margen'[Linea Template] IN {
                "A. Ingreso Servicios", "B. Costo Servicios D", "C. Electricidad",
                "D. Ingresos por Equipos", "E. Costo por Equipos",
                "F. Costo Comercial", "G. Costo Operacional Serti"
            },
            'Base_Margen'[Tipo Ingreso] = TipoIngresoR,
            'Base_Margen'[Año] = Anio,
            'Base_Margen'[Mes] <= MesHoy
        )
    ),

    LineaSeleccionada="Mg Contribución", MgContribucion
)

VAR Color = 
SWITCH(
    TRUE(),
    LineaSeleccionada IN {"Mg Contribución 2025P", "Mg Contribución Real"}, "#10069F",
    LineaSeleccionada="Mg Contribución", "#FFFF00",
    Resultado >= 0, "#47E844",
    Resultado < 0, "#D30815",
    "#808080"
)

RETURN Resultado

Si me guías, te lo agradecería.

Helpful resources

Announcements
May Power BI Update Carousel

Power BI Monthly Update - May 2026

Check out the May 2026 Power BI update to learn about new features.

Fabric SQL PBI Data Days

Data Days 2026 coming soon!

Sign up to receive a private message when registration opens and key events begin.

New to Fabric survey Carousel

New to Fabric Survey

If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.