Starting December 3, join live sessions with database experts and the Microsoft product team to learn just how easy it is to get started
Learn moreGet certified in Microsoft Fabric—for free! For a limited time, get a free DP-600 exam voucher to use by the end of 2024. Register now
I am working on a measure to get the total headcounts of customers within a given time range. But I need to consider two time ranges:
As can be seen on the screenshot above, I want to calculate the total headcounts within the date range 2022-05-03 to 2022-05-04.
Since it only includes two days, the calculation is pretty straightfoward: on day 1 we have Customer 5 and Customer 6 meeting the criteria, on day 2 we still have these two customers active. Thus the results should be: 2+2=4
Based on the idea of v-yingjl
https://community.powerbi.com/t5/Power-Query/Count-rows-if-between-two-time-slots/td-p/1424481 and other posts,
I wrote the measure as follows:
Headcounts=
Solved! Go to Solution.
My code wat not correct. Sorry I'm typing on the phone
try this one
Headcounts =
SUMX (
CROSSJOIN ( VALUES ( 'Calendar'[Date] ), VALUES ( 'fact'[StartDate] ) ),
CALCULATE (
VAR SelectedDates =
VALUES ( 'Calendar'[Date] )
RETURN
SUMX (
'fact',
VAR ActiveDates =
CALENDAR ( 'fact'[StartDate], 'fact'[EndDate] )
RETURN
IF ( COUNTROWS ( INTERSECT ( SelectedDates, ActiveDates ) ) > 0, 1, 0 )
)
)
)
Hi,
Please check the below picture and the attached pbix file.
I tried to create a sample pbix file like below in order to simplify the sample.
I suggest having a calendar table as a dimension table.
I hope the below measure can help to have an idea to create a similar measure and apply it to your data model.
Customers count measure: =
COUNTROWS (
FILTER (
Data,
Data[StartDate] <= MAX ( 'Calendar'[Date] )
&& Data[EndDate] >= MIN ( 'Calendar'[Date] )
)
)
If this post helps, then please consider accepting it as the solution to help other members find it faster, and give a big thumbs up.
Thanks for your reply. I took a screenshot from your pbix file.
As you could see, two dates are selected: 2022/12/30 and 2022/12/31, is there any way that I could get the value of 2, which is the sum of the column of the calculated measure (1+1)?
Hi @Jacob_Li
assuming no relationships invloved, you may try
Headcounts =
VAR SelectedDates =
VALUES ( 'Calendar'[Date] )
RETURN
SUMX (
'fact',
VAR ActiveDates =
CALENDAR ( 'fact'[StartDate], 'fact'[EndDate] )
RETURN
IF ( COUNTROWS ( INTERSECT ( SelectedDates, ActiveDates ) ) > 0, 1, 0 )
)
Thank you for your reply. Is there any way that I could get the sum of the "column" of headcounts measure from the table visual below. I am pretty sure I am very close to it.
Try
Headcounts =
SUMX (
CROSSJOIN ( VALUES ( 'Calendar'[Date] ), VALUES ( 'fact'[StartDate] ) ),
CALCULATE (
VAR SelectedDates =
VALUES ( 'Calendar'[Date] )
VAR ActiveDates =
CALENDAR ( 'fact'[StartDate], 'fact'[EndDate] )
RETURN
IF ( COUNTROWS ( INTERSECT ( SelectedDates, ActiveDates ) ) > 0, 1, 0 )
)
)
By calendar('fact'[StartDate],'fact'[EndDate]), do you mean by CALENDAR (calculate(max('data'[startdate]),allexcept('data','Data'[Customer])) , calculate(max('data'[EndDate]),allexcept('data','Data'[Customer])) )? Because otherwise this measure is not working properly.
By replacing the underlined part, the measure is written as follows
Headcounts =
SUMX (
CROSSJOIN ( VALUES ( 'Calendar'[Date] ), VALUES ( 'fact'[StartDate] ) ),
CALCULATE (
VAR SelectedDates =
VALUES ( 'Calendar'[Date] )
VAR ActiveDates =
CALENDAR (calculate(max('data'[startdate]),allexcept('data','Data'[Customer])) , calculate(max('data'[EndDate]),allexcept('data','Data'[Customer])) )
RETURN
IF ( COUNTROWS ( INTERSECT ( SelectedDates, ActiveDates ) ) > 0, 1, 0 )
)
)
However, the result is not as expected.
It gives the total 12 instead of 2.
My code wat not correct. Sorry I'm typing on the phone
try this one
Headcounts =
SUMX (
CROSSJOIN ( VALUES ( 'Calendar'[Date] ), VALUES ( 'fact'[StartDate] ) ),
CALCULATE (
VAR SelectedDates =
VALUES ( 'Calendar'[Date] )
RETURN
SUMX (
'fact',
VAR ActiveDates =
CALENDAR ( 'fact'[StartDate], 'fact'[EndDate] )
RETURN
IF ( COUNTROWS ( INTERSECT ( SelectedDates, ActiveDates ) ) > 0, 1, 0 )
)
)
)
It works! Thank you! Also lots of thanks for all the replies under this post.
Check if it does helps or not?
Count customer =
Var _Mindate = DATEVALUE( "3/5/2022")
Var _Maxdate = DATEVALUE( "4/5/2022")
Var _Count = CALCULATE(COUNTROWS('Customer Count'),'Customer Count'[Start Date]>=_Mindate,'Customer Count'[End Date]<=_Maxdate)
return _Count
Thanks,
Arul
Thank you, but I am afraid the restriction might be correct. Because I want to evaluate each individual date between 05/03/2022 and 05/04/2022, I need to compare these two dates with start date and end date for twice, instead of comparing 05/03/2022 with StartDate and 05/04/2022 with EndDate.
Thanks anyway.
Starting December 3, join live sessions with database experts and the Fabric product team to learn just how easy it is to get started.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early Bird pricing ends December 9th.
User | Count |
---|---|
25 | |
21 | |
19 | |
14 | |
11 |
User | Count |
---|---|
43 | |
35 | |
25 | |
22 | |
22 |