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

See when key Fabric features will launch and what’s already live, all in one place and always up to date. Explore the new Fabric roadmap

Reply
ajdm2007
Helper III
Helper III

Calculating agent rankings

Hello everyone, 

 

I’ve got a formula in my project that I made to figure out the ranking based on agent performance. It takes several metrics into account.

 

AgentRanking = 
VAR TotalProjects =
    COUNTROWS(FILTER(zendesk, zendesk[type] = "Project"))
VAR TotalTicketsSolved =
    COUNTROWS(FILTER(zendesk, zendesk[Status] = "Solved"))
VAR TotalTicketsSolvedHighPriority =
    CALCULATE(
        COUNTROWS(zendesk),
        zendesk[Status] = "Solved",
        zendesk[Priority] = "High"
    )
VAR TotalTicketsSolvedLowPriority =
    CALCULATE(
        COUNTROWS(zendesk),
        zendesk[Status] = "Solved",
        zendesk[Priority] = "Low"
    )
VAR TotalTicketsSolvedNormalPriority =
    CALCULATE(
        COUNTROWS(zendesk),
        zendesk[Status] = "Solved",
        zendesk[Priority] = "Normal"
    )
VAR TotalTicketsSolvedUrgentPriority =
    CALCULATE(
        COUNTROWS(zendesk),
        zendesk[Status] = "Solved",
        zendesk[Priority] = "Urgent"
    )
VAR TotalTicketsSolvedUncategorized =
    CALCULATE(
        COUNTROWS(zendesk),
        zendesk[Status] = "Solved",
        zendesk[Priority] = "Uncategorized"
    )
VAR AvgFullResolutionTime =
    AVERAGEX(
        FILTER(zendesk, zendesk[Status] = "Solved"),
        SWITCH(
            TRUE(),
            zendesk[Full resolution time brackets (Unsorted)] = "0-5 hrs", 3,
            zendesk[Full resolution time brackets (Unsorted)] = "1-7 days", 10,
            zendesk[Full resolution time brackets (Unsorted)] = "7-30 days", 18,
            zendesk[Full resolution time brackets (Unsorted)] = "> 30 days", 35,
            0
        )
    )
VAR AvgFirstReplyTime =
    AVERAGEX(
        FILTER(zendesk, zendesk[Status] = "Solved"),
        SWITCH(
            TRUE(),
            zendesk[First reply time brackets] = "0-1 hrs", 0.5,
            zendesk[First reply time brackets] = "1-8 hrs", 4.5,
            zendesk[First reply time brackets] = "8-24 hrs", 16,
            zendesk[First reply time brackets] = "> 30 days", 35,
            zendesk[First reply time brackets] = "No replies", 0,
            0
        )
    )
VAR AvgFirstResolutionTime =
    AVERAGEX(
        FILTER(zendesk, zendesk[Status] = "Solved"),
        SWITCH(
            TRUE(),
            zendesk[First resolution time brackets] = "0-5 hrs", 3,
            zendesk[First resolution time brackets] = "1-7 days", 10,
            zendesk[First resolution time brackets] = "7-30 days", 18,
            zendesk[First resolution time brackets] = "> 30 days", 35,
            0
        )
    )
VAR AvgSolvedTime =
    AVERAGEX(FILTER(zendesk, zendesk[Status] = "Solved"), zendesk[SolvedTime(Hrs)])
VAR SameDayResolvedPercentage =
    DIVIDE(
        CALCULATE(
            COUNTROWS(zendesk),
            zendesk[Status] = "Solved",
            zendesk[SameDayResolved] = 1
        ),
        COUNTROWS(FILTER(zendesk, zendesk[Status] = "Solved"))
    )
RETURN
    (VALUE(TotalTicketsSolved) * 0.12)
	+ (VALUE(TotalProjects)* 0.12)
    + (VALUE(TotalTicketsSolvedUrgentPriority) * 0.12)
	+ (VALUE(TotalTicketsSolvedHighPriority) * 0.10)
    + (VALUE(TotalTicketsSolvedNormalPriority) * 0.08)    
	+ (VALUE(TotalTicketsSolvedLowPriority) * 0.05)
    + (VALUE(TotalTicketsSolvedUncategorized) * 0.01)
    + (AvgFullResolutionTime * 0.12)
    + (AvgFirstReplyTime * 0.08)
    + (AvgFirstResolutionTime * 0.08)
    + (AvgSolvedTime * 0.07)
    + (SameDayResolvedPercentage * 0.05)

 

What do you think about it?

 

If you have any suggestions for a better way to do this, I’d love to hear them.

 

Here’s the visualization I’m using:

ajdm2007_0-1723752970978.png

 

Thanks for your help!

1 ACCEPTED SOLUTION
Anonymous
Not applicable

Hi @ajdm2007 

 

Agree with Wilson_

 

Your DAX formula for calculating agent ranking based on various performance metrics is well-structured and thoughtfully considers multiple factors.
One bit of advice I can think of is that if you have a large amount of data, consider using the SUMMARIZE function to filter the “dendesk” table first, pre-summarizing may reduce the duplication of calculations.
A sample of my DAX formula is as follows:

VAR TicketsSolvedSummary = SUMMARIZE(
FILTER(zendesk, zendesk[Status] = "Solved"),
zendesk[Priority],
"PriorityCount", COUNTROWS(zendesk)
)
VAR TotalTicketsSolvedHighPriority = CALCULATE(SUMX(TicketsSolvedSummary, IF(zendesk[Priority] = "High", [PriorityCount], 0)))
VAR TotalTicketsSolvedLowPriority = CALCULATE(SUMX(TicketsSolvedSummary, IF(zendesk[Priority] = "Low", [PriorityCount], 0)))
VAR TotalTicketsSolvedNormalPriority = CALCULATE(SUMX(TicketsSolvedSummary, IF(zendesk[Priority] = "Normal", [PriorityCount], 0)))
VAR TotalTicketsSolvedUrgentPriority = CALCULATE(SUMX(TicketsSolvedSummary, IF(zendesk[Priority] = "Urgent", [PriorityCount], 0)))
VAR TotalTicketsSolvedUncategorized = CALCULATE(SUMX(TicketsSolvedSummary, IF(zendesk[Priority] = "Uncategorized", [PriorityCount], 0)))

 


Best Regards,
Jarvis Tang
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

View solution in original post

5 REPLIES 5
Anonymous
Not applicable

Hi @ajdm2007 

 

Agree with Wilson_

 

Your DAX formula for calculating agent ranking based on various performance metrics is well-structured and thoughtfully considers multiple factors.
One bit of advice I can think of is that if you have a large amount of data, consider using the SUMMARIZE function to filter the “dendesk” table first, pre-summarizing may reduce the duplication of calculations.
A sample of my DAX formula is as follows:

VAR TicketsSolvedSummary = SUMMARIZE(
FILTER(zendesk, zendesk[Status] = "Solved"),
zendesk[Priority],
"PriorityCount", COUNTROWS(zendesk)
)
VAR TotalTicketsSolvedHighPriority = CALCULATE(SUMX(TicketsSolvedSummary, IF(zendesk[Priority] = "High", [PriorityCount], 0)))
VAR TotalTicketsSolvedLowPriority = CALCULATE(SUMX(TicketsSolvedSummary, IF(zendesk[Priority] = "Low", [PriorityCount], 0)))
VAR TotalTicketsSolvedNormalPriority = CALCULATE(SUMX(TicketsSolvedSummary, IF(zendesk[Priority] = "Normal", [PriorityCount], 0)))
VAR TotalTicketsSolvedUrgentPriority = CALCULATE(SUMX(TicketsSolvedSummary, IF(zendesk[Priority] = "Urgent", [PriorityCount], 0)))
VAR TotalTicketsSolvedUncategorized = CALCULATE(SUMX(TicketsSolvedSummary, IF(zendesk[Priority] = "Uncategorized", [PriorityCount], 0)))

 


Best Regards,
Jarvis Tang
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

Hello @Anonymous ,

 

That's the kind of answer I was looking for, thanks for that golden nugget.

 

Have a good one.

Wilson_
Super User
Super User

ajdm2007,

 

This sounds like a question for the business, not a technical question. 🙂




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

Proud to be a Super User!





Hello @Wilson_ ,

 

You’re right; that formula does reflect what the business is evaluating. I’m just looking at it from a technical angle—whether it’s well-structured or if there’s room for improvement.

 

Thanks a lot for taking the time to answer!

hah, sorry about that, I misunderstood what "this" was when you said "better way to do this". Glad you were able to get a helpful response. 😄

 

(I defaulted to accountant brain it seems! 😂)




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

Proud to be a Super User!





Helpful resources

Announcements
May PBI 25 Carousel

Power BI Monthly Update - May 2025

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

May 2025 Monthly Update

Fabric Community Update - May 2025

Find out what's new and trending in the Fabric community.