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
PANNEER
Frequent Visitor

funnel chart

Hi Friends,
Anyone Please guide me step by step to create a connected stage table based on the below requirements for funnel chart.
Prospecting - Draft lead
Qualification - Qualifed lead
Offer & Negotation - If the Quotation is sent to the customer
Booking - if the reservation is created from the quotation
Closing - If the Agreement is created

1 ACCEPTED SOLUTION
Anonymous
Not applicable

Hi @PANNEER ,

Try below steps.

 

1. Create a Stage table (for sorting & consistency)

 

In Power BI Desktop:

 

Go to Modeling ➜ New table

 

Paste this DAX:

Stage =

DATATABLE (

    "StageKey", INTEGER,

    "StageName", STRING,

    "SortOrder", INTEGER,

    {

        { 1, "Prospecting", 1 },

        { 2, "Qualification", 2 },

        { 3, "Offer & Negotiation", 3 },

        { 4, "Booking", 4 },

        { 5, "Closing", 5

}

    }

)

 

In Data view, select the Stage table.

 

Select StageName column → Column tools ➜ Sort by Column ➜ SortOrder

 

2. Map each record to a Stage (calculated column)

 

Now we need a column in your main table (call it Opportunities for example) that says which stage each row is in based on your rules:

 

Prospecting – Draft lead

 

Qualification – Qualified lead

 

Offer & Negotiation – Quotation sent

 

Booking – Reservation created from quotation

 

Closing – Agreement created

 

In Modeling ➜ New column on your main table:

 

StageName =

VAR HasAgreement = NOT ISBLANK ( Opportunities[AgreementDate] ) // or status/flag

VAR HasBooking = NOT ISBLANK ( Opportunities[ReservationDate] ) // or status/flag

VAR HasQuotation = NOT ISBLANK ( Opportunities[QuotationDate] ) // or status/flag

VAR IsQualified = Opportunities[LeadStatus] = "Qualified"

VAR IsDraft = Opportunities[LeadStatus] = "Draft"

RETURN

SWITCH (

    TRUE (),

    HasAgreement, "Closing",

    HasBooking, "Booking",

    HasQuotation, "Offer & Negotiation",

    IsQualified, "Qualification",

    IsDraft, "Prospecting",

    BLANK() // or "Unknown"

)

 

3. Connect Stage table to your data

 

Go to Model view.

 

Drag from Stage[StageName] → Opportunities[StageName] to create a relationship

 

Cardinality: Many-to-one (Opportunities → Stage)

 

Cross filter: Single is fine.

 

Now your model knows which stage each opportunity belongs to, and you have a clean stage dimension for ordering.

 

 4. Create a measure for funnel values

 

You usually want to count leads/opportunities per stage.

 

In Modeling ➜ New measure:

 

Leads Count =

DISTINCTCOUNT ( Opportunities[LeadID] ) -- or OpportunityID / CustomerID

 

5. Build the funnel chart

 

Go to Report view.

 

Insert a Funnel visual.

 

In the Fields pane:

 

Category → Stage[StageName]

 

Values → [Leads Count]

 

Make sure the funnel is sorted by Stage[SortOrder]:

 

Click the … on the visual → Sort by StageName

 

Then in the dropdown choose Sort by SortOrder (if available), or sort your StageName alphabetically to match the SortOrder if needed.

 

If my response as resolved your issue please mark it as solution and give kudos.

 

View solution in original post

6 REPLIES 6
v-echaithra
Community Support
Community Support

Hi @PANNEER ,

May I ask if you have resolved this issue? Please let us know if you have any further issues, we are happy to help.

Thank you.



v-echaithra
Community Support
Community Support

Hi @PANNEER ,

Thank you @MasonMA , @Anonymous , @amitchandak  for your inputs.

I just wanted to check if the issue has been resolved on your end, or if you require any further assistance. Please feel free to let us know, we’re happy to help!


Thank you 
Chaithra E.



ryan_mayu
Super User
Super User

@PANNEER 

 

could you pls provide some sample data and expected output?





Did I answer your question? Mark my post as a solution!

Proud to be a Super User!




MasonMA
Super User
Super User

Hi, 

 

There are multiple youtube tutorials.

For the basic one, i'd recommend 

https://www.youtube.com/watch?v=9wEMHk1l-lk,

If you are looking to follow some advanced tricks please refer to this one from Bas- 'How to Power BI' (also one of my favorite pbi youtubers~) https://www.youtube.com/watch?v=NAi3svy3Qe4 

Anonymous
Not applicable

Hi @PANNEER ,

Try below steps.

 

1. Create a Stage table (for sorting & consistency)

 

In Power BI Desktop:

 

Go to Modeling ➜ New table

 

Paste this DAX:

Stage =

DATATABLE (

    "StageKey", INTEGER,

    "StageName", STRING,

    "SortOrder", INTEGER,

    {

        { 1, "Prospecting", 1 },

        { 2, "Qualification", 2 },

        { 3, "Offer & Negotiation", 3 },

        { 4, "Booking", 4 },

        { 5, "Closing", 5

}

    }

)

 

In Data view, select the Stage table.

 

Select StageName column → Column tools ➜ Sort by Column ➜ SortOrder

 

2. Map each record to a Stage (calculated column)

 

Now we need a column in your main table (call it Opportunities for example) that says which stage each row is in based on your rules:

 

Prospecting – Draft lead

 

Qualification – Qualified lead

 

Offer & Negotiation – Quotation sent

 

Booking – Reservation created from quotation

 

Closing – Agreement created

 

In Modeling ➜ New column on your main table:

 

StageName =

VAR HasAgreement = NOT ISBLANK ( Opportunities[AgreementDate] ) // or status/flag

VAR HasBooking = NOT ISBLANK ( Opportunities[ReservationDate] ) // or status/flag

VAR HasQuotation = NOT ISBLANK ( Opportunities[QuotationDate] ) // or status/flag

VAR IsQualified = Opportunities[LeadStatus] = "Qualified"

VAR IsDraft = Opportunities[LeadStatus] = "Draft"

RETURN

SWITCH (

    TRUE (),

    HasAgreement, "Closing",

    HasBooking, "Booking",

    HasQuotation, "Offer & Negotiation",

    IsQualified, "Qualification",

    IsDraft, "Prospecting",

    BLANK() // or "Unknown"

)

 

3. Connect Stage table to your data

 

Go to Model view.

 

Drag from Stage[StageName] → Opportunities[StageName] to create a relationship

 

Cardinality: Many-to-one (Opportunities → Stage)

 

Cross filter: Single is fine.

 

Now your model knows which stage each opportunity belongs to, and you have a clean stage dimension for ordering.

 

 4. Create a measure for funnel values

 

You usually want to count leads/opportunities per stage.

 

In Modeling ➜ New measure:

 

Leads Count =

DISTINCTCOUNT ( Opportunities[LeadID] ) -- or OpportunityID / CustomerID

 

5. Build the funnel chart

 

Go to Report view.

 

Insert a Funnel visual.

 

In the Fields pane:

 

Category → Stage[StageName]

 

Values → [Leads Count]

 

Make sure the funnel is sorted by Stage[SortOrder]:

 

Click the … on the visual → Sort by StageName

 

Then in the dropdown choose Sort by SortOrder (if available), or sort your StageName alphabetically to match the SortOrder if needed.

 

If my response as resolved your issue please mark it as solution and give kudos.

 

amitchandak
Super User
Super User

@PANNEER , funnel chart can be created with categories or measures. means you can have measure for all stage 

https://learn.microsoft.com/en-us/power-bi/visuals/power-bi-visualization-funnel-charts

 

Refer 
https://www.youtube.com/watch?v=cyWVzAQF9YU&t=18900s

With measures 

amitchandak_0-1764067111721.png

 

 

With Category 

amitchandak_1-1764067127491.png

 

Share with Power BI Enthusiasts: Full Power BI Video (20 Hours) YouTube
Microsoft Fabric Series 60+ Videos YouTube
Microsoft Fabric Hindi End to End YouTube

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.