Join us for an expert-led overview of the tools and concepts you'll need to pass exam PL-300. The first session starts on June 11th. See you there!
Get registeredPower BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.
Hello expert,
I am stumble on how I can create a dax that'll able to identify pass/fail based on the intervals.
I have a data set that has various cases ID that has been binned into categories like below:
Between working days -4 and 0 |
Between working days 1 and 5 |
Between working days 6 and 10 |
Between working days 11 and 15 |
Between working days 16 and 20 |
Between working days 21 and 25 |
Between working days 26 and 30 |
Between working days 31 and 35 |
Between working days 36 and 40 |
Between working days 41 and 45 |
Between working days 46 and 50 |
Between working days 51 and 55 |
Between working days 56 and 60 |
Between working days 61 and 65 |
Between working days 66 and 70 |
Between working days 71 and 75 |
Between working days 76 and 80 |
Between working days 81 and 85 |
Between working days 86 and 90 |
Between working days 91 and 95 |
Between working days 96 and 100 |
Between working days 101 and 105 |
Between working days 106 and 110 |
Between working days 111 and 115 |
Between working days 116 and 120 |
Between working days 121 and 125 |
Between working days 126 and 130 |
Between working days 131 and 135 |
Between working days 136 and 140 |
Between working days 141 and 145 |
Between working days 146 and 150 |
Between working days 151 and 155 |
Between working days 156 and 160 |
Between working days 161 and 165 |
Between working days 166 and 170 |
Between working days 171 and 175 |
Between working days 181 and 185 |
Between working days 186 and 190 |
Between working days 191 and 195 |
Between working days 196 and 200 |
Between working days 201 and 205 |
Between working days 206 and 210 |
Between working days 211 and 215 |
Between working days 221 and 225 |
Between working days 231 and 235 |
Between working days 236 and 240 |
Between working days 241 and 245 |
Between working days 256 and 260 |
Between working days 261 and 265 |
I have created the custom table that will enable the sequential numeric from 1 - 48.
The result that I after is, if there's missing sequential like below:
casenumber | 5WD_CaseNotes_v6 | Bins |
01567939 | Between working days 1 and 5 | 1 |
01567939 | Between working days 11 and 15 | 3 |
01567939 | Between working days 16 and 20 | 4 |
01567939 | Between working days 51 and 55 | 11 |
01567939 | Between working days 56 and 60 | 12 |
The dax should able to identify that there's missing sequential number eg. sequential #2, sequential#5-10 as 'Fail', or 'Pass' if there's no missing sequential numbers.
I have tried using chatgpt resulting below dax:
Solved! Go to Solution.
Hi - thanks for all your help.
I found the solution by creating a sequential mapping in excel - then I added up each of the sequential as a sum eg. Bins 1 --> 1, Bins 2 -->2, Bins 3--> 3 then to sum it and make it as ID eg. 1+0 = 1, 1+2= 3, 1+2+3 =6 and so on. This will identify if there's any missing gaps throughout the bins's sequence.
Hi - thanks for all your help.
I found the solution by creating a sequential mapping in excel - then I added up each of the sequential as a sum eg. Bins 1 --> 1, Bins 2 -->2, Bins 3--> 3 then to sum it and make it as ID eg. 1+0 = 1, 1+2= 3, 1+2+3 =6 and so on. This will identify if there's any missing gaps throughout the bins's sequence.
Hi @jhauw74
You can achieve this by identifying the missing sequential bins for each casenumber. The key is to compare the existing bins with a generated series of expected bins and determine if any numbers are missing.
Pass_Fail_Status =
VAR CaseID = SELECTEDVALUE(Summary_HistoryCases[casenumber])
-- Get existing bins for the selected case
VAR ExistingBins =
CALCULATETABLE(
DISTINCT(Summary_HistoryCases[Bins_Sequence]),
Summary_HistoryCases[casenumber] = CaseID
)
-- Find the minimum and maximum bin sequence numbers
VAR MinBin = MINX(ExistingBins, Summary_HistoryCases[Bins_Sequence])
VAR MaxBin = MAXX(ExistingBins, Summary_HistoryCases[Bins_Sequence])
-- Generate the expected full sequence within the range
VAR ExpectedBins = GENERATESERIES(MinBin, MaxBin, 1)
-- Identify missing bins by comparing expected vs. actual
VAR MissingBins = EXCEPT(ExpectedBins, ExistingBins)
-- Check if any missing bins exist
VAR MissingCount = COUNTROWS(MissingBins)
RETURN
IF(MissingCount > 0, "Fail", "Pass")
Thanks @Poojara_D12 - @rajendraongole1 has provided similar refined DAX unfortunately it doesn't work as giving this error : "The arguments in GenerateSeries function cannot be blank"
Can you please try the below
Missing_Bins =
VAR CaseID = SELECTEDVALUE(Summary_HistoryCases[casenumber])
-- Get the unique bin numbers for this Case ID
VAR ExistingBins =
CALCULATETABLE(
VALUES(Summary_HistoryCases[Bins]),
Summary_HistoryCases[casenumber] = CaseID
)
-- Ensure there are existing bins before calculating min/max
VAR MinBin = MINX(ExistingBins, Summary_HistoryCases[Bins])
VAR MaxBin = MAXX(ExistingBins, Summary_HistoryCases[Bins])
-- Handle blank MinBin/MaxBin by setting defaults
VAR SafeMinBin = IF(ISBLANK(MinBin), 0, MinBin) -- Default to 0 if blank
VAR SafeMaxBin = IF(ISBLANK(MaxBin), 0, MaxBin) -- Default to 0 if blank
-- Generate the expected sequence only if valid bins exist
VAR ExpectedBins =
IF(SafeMinBin <> 0 && SafeMaxBin <> 0,
GENERATESERIES(SafeMinBin, SafeMaxBin, 1),
BLANK()
)
-- Find missing bins only if ExpectedBins is not blank
VAR MissingBins =
IF(
NOT(ISBLANK(ExpectedBins)),
EXCEPT(
ExpectedBins,
ExistingBins
),
BLANK()
)
-- Return "Fail" if there are missing bins, "Pass" if all bins exist
RETURN
IF(SafeMinBin = 0 || SafeMaxBin = 0, "No Data",
IF(NOT(ISBLANK(MissingBins)) && COUNTROWS(MissingBins) > 0, "Fail", "Pass")
)
still issue exist,please let me know.
Proud to be a Super User! | |
Hi @jhauw74 - Your DAX needs a better way to compare the existing bins against the expected sequence to detect gaps properly.
Modified dax for your reference below:
Missing_Bins =
VAR CaseID = SELECTEDVALUE(Summary_HistoryCases[casenumber])
-- Get all existing bins for this case
VAR ExistingBins =
CALCULATETABLE(
VALUES(Summary_HistoryCases[Bins]),
Summary_HistoryCases[casenumber] = CaseID
)
-- Get the minimum and maximum bin numbers for this case
VAR MinBin = MINX(ExistingBins, Summary_HistoryCases[Bins])
VAR MaxBin = MAXX(ExistingBins, Summary_HistoryCases[Bins])
-- Generate the expected sequence of bins between MinBin and MaxBin
VAR ExpectedBins =
GENERATESERIES(MinBin, MaxBin, 1)
-- Compare expected bins against existing bins
VAR MissingBins =
EXCEPT(ExpectedBins, ExistingBins)
-- Return Pass/Fail based on missing bins
RETURN
IF(COUNTROWS(MissingBins) > 0, "Fail", "Pass")
If your Bins column contains text instead of numeric values (e.g., "Between working days 1 and 5"), you'll need to map them to numbers in a separate table for accurate comparisons.
Ensure that the Bins column has been converted to a numeric sequence in your dataset.
Proud to be a Super User! | |
@rajendraongole1 thank you for helping 🙂
I've tested the modified DAX but it generates error : "The arguments in GenerateSeries function cannot be blank."
In my 'bins' column - they are all identified as a whole number.
Also this table is basically created using summarize dax :
The Bins column coming from an excel where I perform the binning based on the sort of value ie. between working days 1 and 5 = 1, working days 6 and 10 = 2, and so forth.
I wonder if the DAX doesn't work because of the above?
Hi @jhauw74 - The Bins column isn't properly recognized as numbers in the DAX measure.
modified DAX measure:
Missing_Bins =
VAR CaseID = SELECTEDVALUE(Summary_HistoryCases[casenumber])
-- Get the unique bin numbers for this Case ID
VAR ExistingBins =
CALCULATETABLE(
VALUES(Summary_HistoryCases[Bins]),
Summary_HistoryCases[casenumber] = CaseID
)
-- Ensure there are existing bins before calculating min/max
VAR MinBin = IF(COUNTROWS(ExistingBins) > 0, MINX(ExistingBins, Summary_HistoryCases[Bins]), BLANK())
VAR MaxBin = IF(COUNTROWS(ExistingBins) > 0, MAXX(ExistingBins, Summary_HistoryCases[Bins]), BLANK())
-- If either MinBin or MaxBin is blank, return "No Data"
VAR BinCheck =
IF(ISBLANK(MinBin) || ISBLANK(MaxBin), "No Data", "Proceed")
-- Generate the expected sequence only if valid bins exist
VAR ExpectedBins =
IF(BinCheck = "Proceed",
GENERATESERIES(MinBin, MaxBin, 1),
BLANK()
)
-- Find missing bins only if ExpectedBins is not blank
VAR MissingBins =
IF(
NOT(ISBLANK(ExpectedBins)),
EXCEPT(
ExpectedBins,
ExistingBins
),
BLANK()
)
-- Return "Fail" if there are missing bins, "Pass" if all bins exist
RETURN
IF(BinCheck = "No Data", "No Data",
IF(NOT(ISBLANK(MissingBins)) && COUNTROWS(MissingBins) > 0, "Fail", "Pass")
)
Apply this revised DAX measure. and let me know if still issue exist.
Proud to be a Super User! | |
Thanks @rajendraongole1 - I just applied it but there's still an error below:
Thanking you in advance for helping this.
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 |
---|---|
84 | |
75 | |
68 | |
41 | |
35 |
User | Count |
---|---|
107 | |
56 | |
52 | |
48 | |
40 |