Power BI is turning 10, and we’re marking the occasion with a special community challenge. Use your creativity to tell a story, uncover trends, or highlight something unexpected.
Get startedJoin us for an expert-led overview of the tools and concepts you'll need to become a Certified Power BI Data Analyst and pass exam PL-300. Register now.
Hi! I need help adding SWITCH function to two separate DAX measures for a Call Center that calculates "Average Call Time" and "Average Hold Time. There are inactive relationships between Advisor and Date from a Prod Sales Table and Combined Call Logs Table.
Please use the same slicer conditions I used in a previous Total Calls measure:
Total Calls Dynamic = SWITCH( TRUE(), // Case 1: Single Advisor AND Single Date selected HASONEVALUE(UpdatedProd521[Advisor]) && HASONEVALUE(UpdatedProd521[Date]), CALCULATE( SUM('Combined Call Logs 5/17'[CALLS]), USERELATIONSHIP(UpdatedProd521[Advisor], 'Combined Call Logs 5/17'[ADVISOR]), FILTER( 'Combined Call Logs 5/17', 'Combined Call Logs 5/17'[DATE] = VALUES(UpdatedProd521[Date]) ) ), // Case 2: Only Advisor is selected HASONEVALUE(UpdatedProd521[Advisor]), CALCULATE( SUM('Combined Call Logs 5/17'[CALLS]), USERELATIONSHIP(UpdatedProd521[Advisor], 'Combined Call Logs 5/17'[ADVISOR]) ), // Case 3: Only Date is selected HASONEVALUE(UpdatedProd521[Date]), CALCULATE( SUM('Combined Call Logs 5/17'[CALLS]), USERELATIONSHIP('Combined Call Logs 5/17'[DATE], UpdatedProd521[Date]) ), // Default: sum all calls if no or multiple selections SUM('Combined Call Logs 5/17'[CALLS])
Here is my DAX for average call time (without Switch) and outputs 0 if no call time
Solved! Go to Solution.
Hi @jabueg
Updated AverageCallDuration with SWITCH:
AverageCallDuration =
VAR TotalSeconds =
SWITCH(
TRUE(),
// Case 1: Single Advisor AND Single Date selected
HASONEVALUE(UpdatedProd521[Advisor]) && HASONEVALUE(UpdatedProd521[Date]),
CALCULATE(
AVERAGE('Combined Call Logs 5/17'[CALL TIME (SEC)]),
USERELATIONSHIP(UpdatedProd521[Advisor], 'Combined Call Logs 5/17'[ADVISOR]),
FILTER(
'Combined Call Logs 5/17',
'Combined Call Logs 5/17'[DATE] = VALUES(UpdatedProd521[Date])
)
),
// Case 2: Only Advisor is selected
HASONEVALUE(UpdatedProd521[Advisor]),
CALCULATE(
AVERAGE('Combined Call Logs 5/17'[CALL TIME (SEC)]),
USERELATIONSHIP(UpdatedProd521[Advisor], 'Combined Call Logs 5/17'[ADVISOR])
),
// Case 3: Only Date is selected
HASONEVALUE(UpdatedProd521[Date]),
CALCULATE(
AVERAGE('Combined Call Logs 5/17'[CALL TIME (SEC)]),
USERELATIONSHIP('Combined Call Logs 5/17'[DATE], UpdatedProd521[Date])
),
// Default: average over all call times if no or multiple selections
AVERAGE('Combined Call Logs 5/17'[CALL TIME (SEC)])
)
VAR Minutes = INT(TotalSeconds / 60)
VAR Seconds = MOD(TotalSeconds, 60)
RETURN
IF(TotalSeconds = 0,
"0 min",
FORMAT(Minutes, "0") & " min, " & FORMAT(Seconds, "0") & " sec"
)
Updated Avg Hold Time with SWITCH:
AvgHoldTime =
VAR TotalSeconds =
SWITCH(
TRUE(),
// Case 1: Single Advisor AND Single Date selected
HASONEVALUE(UpdatedProd521[Advisor]) && HASONEVALUE(UpdatedProd521[Date]),
CALCULATE(
AVERAGE('Combined Call Logs 5/17'[HOLD TIME (SEC)]),
USERELATIONSHIP(UpdatedProd521[Advisor], 'Combined Call Logs 5/17'[ADVISOR]),
FILTER(
'Combined Call Logs 5/17',
'Combined Call Logs 5/17'[DATE] = VALUES(UpdatedProd521[Date])
)
),
// Case 2: Only Advisor is selected
HASONEVALUE(UpdatedProd521[Advisor]),
CALCULATE(
AVERAGE('Combined Call Logs 5/17'[HOLD TIME (SEC)]),
USERELATIONSHIP(UpdatedProd521[Advisor], 'Combined Call Logs 5/17'[ADVISOR])
),
// Case 3: Only Date is selected
HASONEVALUE(UpdatedProd521[Date]),
CALCULATE(
AVERAGE('Combined Call Logs 5/17'[HOLD TIME (SEC)]),
USERELATIONSHIP('Combined Call Logs 5/17'[DATE], UpdatedProd521[Date])
),
// Default: average over all hold times if no or multiple selections
AVERAGE('Combined Call Logs 5/17'[HOLD TIME (SEC)])
)
VAR Minutes = INT(TotalSeconds / 60)
VAR Seconds = MOD(TotalSeconds, 60)
RETURN
IF(TotalSeconds = 0,
"0 min",
FORMAT(Minutes, "0") & " min, " & FORMAT(Seconds, "0") & " sec"
)
Hi @jabueg
Updated AverageCallDuration with SWITCH:
AverageCallDuration =
VAR TotalSeconds =
SWITCH(
TRUE(),
// Case 1: Single Advisor AND Single Date selected
HASONEVALUE(UpdatedProd521[Advisor]) && HASONEVALUE(UpdatedProd521[Date]),
CALCULATE(
AVERAGE('Combined Call Logs 5/17'[CALL TIME (SEC)]),
USERELATIONSHIP(UpdatedProd521[Advisor], 'Combined Call Logs 5/17'[ADVISOR]),
FILTER(
'Combined Call Logs 5/17',
'Combined Call Logs 5/17'[DATE] = VALUES(UpdatedProd521[Date])
)
),
// Case 2: Only Advisor is selected
HASONEVALUE(UpdatedProd521[Advisor]),
CALCULATE(
AVERAGE('Combined Call Logs 5/17'[CALL TIME (SEC)]),
USERELATIONSHIP(UpdatedProd521[Advisor], 'Combined Call Logs 5/17'[ADVISOR])
),
// Case 3: Only Date is selected
HASONEVALUE(UpdatedProd521[Date]),
CALCULATE(
AVERAGE('Combined Call Logs 5/17'[CALL TIME (SEC)]),
USERELATIONSHIP('Combined Call Logs 5/17'[DATE], UpdatedProd521[Date])
),
// Default: average over all call times if no or multiple selections
AVERAGE('Combined Call Logs 5/17'[CALL TIME (SEC)])
)
VAR Minutes = INT(TotalSeconds / 60)
VAR Seconds = MOD(TotalSeconds, 60)
RETURN
IF(TotalSeconds = 0,
"0 min",
FORMAT(Minutes, "0") & " min, " & FORMAT(Seconds, "0") & " sec"
)
Updated Avg Hold Time with SWITCH:
AvgHoldTime =
VAR TotalSeconds =
SWITCH(
TRUE(),
// Case 1: Single Advisor AND Single Date selected
HASONEVALUE(UpdatedProd521[Advisor]) && HASONEVALUE(UpdatedProd521[Date]),
CALCULATE(
AVERAGE('Combined Call Logs 5/17'[HOLD TIME (SEC)]),
USERELATIONSHIP(UpdatedProd521[Advisor], 'Combined Call Logs 5/17'[ADVISOR]),
FILTER(
'Combined Call Logs 5/17',
'Combined Call Logs 5/17'[DATE] = VALUES(UpdatedProd521[Date])
)
),
// Case 2: Only Advisor is selected
HASONEVALUE(UpdatedProd521[Advisor]),
CALCULATE(
AVERAGE('Combined Call Logs 5/17'[HOLD TIME (SEC)]),
USERELATIONSHIP(UpdatedProd521[Advisor], 'Combined Call Logs 5/17'[ADVISOR])
),
// Case 3: Only Date is selected
HASONEVALUE(UpdatedProd521[Date]),
CALCULATE(
AVERAGE('Combined Call Logs 5/17'[HOLD TIME (SEC)]),
USERELATIONSHIP('Combined Call Logs 5/17'[DATE], UpdatedProd521[Date])
),
// Default: average over all hold times if no or multiple selections
AVERAGE('Combined Call Logs 5/17'[HOLD TIME (SEC)])
)
VAR Minutes = INT(TotalSeconds / 60)
VAR Seconds = MOD(TotalSeconds, 60)
RETURN
IF(TotalSeconds = 0,
"0 min",
FORMAT(Minutes, "0") & " min, " & FORMAT(Seconds, "0") & " sec"
)
Thank you!!! This worked perfectly.
This is your chance to engage directly with the engineering team behind Fabric and Power BI. Share your experiences and shape the future.
Check out the June 2025 Power BI update to learn about new features.
User | Count |
---|---|
10 | |
9 | |
9 | |
8 | |
8 |
User | Count |
---|---|
14 | |
12 | |
11 | |
11 | |
8 |