Forum Discussion
How to Implement User-Defined Input Parameter for Target Processing Time in Power BI direct query
subject : How to Implement User-Defined Input Parameter for Target Processing Time in Power BI direct query mode
Hello Power BI Community,
I need help creating a user-defined input parameter in Power BI to calculate target processing times for issues. Users should be able to set a value X (in days), which will be used to determine if issues meet the target processing time.
### Key Requirements:
- *User Input Parameter:*
- Users set X via a slicer.
- TargetValue = X * 8.5 * 60 (minutes).
- *Calculations:*
- Calculate processing time in minutes.
- Determine if processing time meets the target:
DAX
AchieveTarget = IF([TotalProcessingTime] <= [TargetValue], "Achieve", "Not Achieve")
- *Working Hours:*
- Exclude non-working hours (Monday to Friday, 8:00 AM to 4:30 PM) in processing time calculations.
### Example Data:
| Status | Issue No | Issue Created Date | Close Date | Processing Time | Achieve Target |
|--------|-----------|----------------------|---------------------|--------------------------|----------------|
| Closed | 12345 | 2024-03-11 09:00 | 2024-03-12 12:00 | 1020 mins | Achieve |
| Open | 12346 | 2024-03-11 11:00 | - | 1440 mins (up to now) | Not Achieve |
### Need Help With:
- *Creating a parameter for user input.*
- *Using this parameter in DAX calculations.*
- *Accurately calculating processing time considering only working hours.*
- *Dynamically updating visuals based on the user-defined parameter.*
Thank you for your assistance!
Hi Rockz
To create an unlinked slicer go Modeling -> Numeric range:
Enter the min and max days they can choose, I've called my new column Day Slider:
This createds a table with a measure capturing what is chosen in the slider.
Create a new measure referencing that measure (right click the table and choose new measure:
TargetValue =[Day Slider Value] * 8.5 * 60 (minutes)
If you don't have the ProcessingTime column in your data it would be:
Processing Time =var daysdiff = --Number of days between start and end multiplied by minutes out of hoursDATEDIFF('Open Closed'[ Issue Created Date ], [ Close Date ],DAY) *960var minsdiff = --minutes between dates less out of hours minutesDATEDIFF('Open Closed'[ Issue Created Date ], [ Close Date ],MINUTE) - daysdiffreturnif(WEEKNUM([ Issue Created Date ]) <> WEEKNUM([ Close Date ]) --if they are in the same week,minsdiff --returns calculated minutes,minsdiff + (WEEKNUM([ Close Date ]) - WEEKNUM([ Issue Created Date ])) * 3840) --if in different weeks, work out how many weeks and subtract a weekends worth of minutesThen make a measure:
TotalProcessingTime = SUM(Table[Processing Time])Finish with your final measure:
AchieveTarget = IF([TotalProcessingTime] <= [TargetValue], "Achieve", "Not Achieve")If this works please mark as a solution for others to find 🙂
1 Reply
- SamWiseOwlSuper User
Hi Rockz
To create an unlinked slicer go Modeling -> Numeric range:
Enter the min and max days they can choose, I've called my new column Day Slider:
This createds a table with a measure capturing what is chosen in the slider.
Create a new measure referencing that measure (right click the table and choose new measure:
TargetValue =[Day Slider Value] * 8.5 * 60 (minutes)
If you don't have the ProcessingTime column in your data it would be:
Processing Time =var daysdiff = --Number of days between start and end multiplied by minutes out of hoursDATEDIFF('Open Closed'[ Issue Created Date ], [ Close Date ],DAY) *960var minsdiff = --minutes between dates less out of hours minutesDATEDIFF('Open Closed'[ Issue Created Date ], [ Close Date ],MINUTE) - daysdiffreturnif(WEEKNUM([ Issue Created Date ]) <> WEEKNUM([ Close Date ]) --if they are in the same week,minsdiff --returns calculated minutes,minsdiff + (WEEKNUM([ Close Date ]) - WEEKNUM([ Issue Created Date ])) * 3840) --if in different weeks, work out how many weeks and subtract a weekends worth of minutesThen make a measure:
TotalProcessingTime = SUM(Table[Processing Time])Finish with your final measure:
AchieveTarget = IF([TotalProcessingTime] <= [TargetValue], "Achieve", "Not Achieve")If this works please mark as a solution for others to find 🙂