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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
wolfsvein
Regular Visitor

Help Need DAX row count between dates

=CALCULATE(COUNTROWS(Fact_SalesSummaries),
     DATESINPERIOD(Fact_SalesSummaries[BidWonDate],
         LASTDATE(Fact_SalesSummaries[BidWonDate]),
         -3, MONTH),
     Fact_SalesSummaries[BidWonDate] <> BLANK())

 

I have tried search and different ways to counts rows that have dates between 2 different dates it calculates the rows as 1 and not more than that in the formula.

This is meant to be a rolling 3-month count of records from date back 3 months to be able to calculate an average with a count of all records.

Example in SQL would look like this.

select MonthBlended, yearblended, BidWonDate, BidWonFlag,
(select count(*) from Fact_SalesSummaries
	where convert(date, cast(MonthBlended as varchar(2))+ '/01/' + cast(YearBlended as varchar(4)), 101) between 
	dateadd(mm, -3, convert(date, cast(t1.MonthBlended as varchar(2))+ '/01/' + cast(t1.YearBlended as varchar(4)), 101))
	and convert(date, cast(t1.MonthBlended as varchar(2))+ '/01/' + cast(t1.YearBlended as varchar(4)), 101)
	and BidWonDate is not null
	) as CountWONPrior3Month,
(select count(*) from Fact_SalesSummaries
	where convert(date, cast(MonthBlended as varchar(2))+ '/01/' + cast(YearBlended as varchar(4)), 101) between 
	dateadd(mm, -3, convert(date, cast(t1.MonthBlended as varchar(2))+ '/01/' + cast(t1.YearBlended as varchar(4)), 101))
	and convert(date, cast(t1.MonthBlended as varchar(2))+ '/01/' + cast(t1.YearBlended as varchar(4)), 101)
	) as CountALLPrior3Month
 from Fact_SalesSummaries t1

 

BidWonDate                BidWon  CountWonPrior3Month CountAllPrior3Month
-----------------------   ------  ------------------- -------------------
2014-07-17 00:00:00.000	  1	      618	                1048
2014-07-17 00:00:00.000	  1	      618	                1048
2014-07-17 00:00:00.000	  1	      618	                1048
2014-07-17 00:00:00.000	  1	      618	                1048
NULL	                    0	      618	                1048
NULL	                    0	      618	                1048
NULL	                    0	      618	                1048
NULL	                    0	      618	                1048
2014-07-17 00:00:00.000	  1	      618	                1048
NULL	                    0	      618	                1048
NULL	                    0	      618	                1048
2014-07-11 00:00:00.000	  1	      618	                1048

I am trying to do this in a tabular model in SSAS I have tried with a calendar and without a calendar table but everything I have read says this should work but the issue is that they alway calculate to 1 and not a some of prior 2 months and current month.

 

 

5 REPLIES 5
PietroFarias
Resolver II
Resolver II

I'm not good with SQL, so i want understand what you need.
Do you need retrieve the number of rows where:
1. Start 03 month back and finish the last date previous the current date.
2. BidWonDate <> Blank.

Yeah? Or did I change everything? haha

SO what is needed is a rolling 3 month count of records between prior 3 months and current date, and the records are not blank().

 

I even tried does this in a measure.

 

calculate(countrows(date), datesbetwween(date[field], eomonth(lastdate(date[field]),-4)+1, eomonth(lastdate[date[field],0)))
v-jiascu-msft
Employee
Employee

Hi @wolfsvein,

 

Can you share a sample please? You can mask the data first. 

It seems the formula is a calculated column. How about using it as a measure?

 

Best Regards,

Dale

Community Support Team _ Dale
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

DECLARE @lower INT = 1
	,@upper INT = 6
	,@randnum INT
	,@date DATE = getdate()
	,@endofcurrentmonth DATE
	,@loopdate DATE
	,@loop INT
	,@loopmax INT
	,@innerloop INT
	,@innerloopmax INT
	,@value DATE

IF object_id('tempdb..#tmp_DateRange') IS NOT NULL
	DROP TABLE #tmp_DateRange

CREATE TABLE #tmp_DateRange (
	ID INT identity(1, 1) PRIMARY KEY NOT NULL
	,[Date] DATE
	)

IF object_id('tempdb..#tmp_RandomData') IS NOT NULL
	DROP TABLE #tmp_RandomData

CREATE TABLE #tmp_RandomData (
	ID INT identity(1, 1) PRIMARY KEY NOT NULL
	,[BidDateWon] DATE
	,[BidWon] BIT
	)

SELECT @endofcurrentmonth = dateadd(mm, datediff(MM, 0, dateadd(MM, 1, @date)), 0) - 1

SELECT @loopdate = dateadd(mm, - 9, dateadd(dd, 1 - datepart(dd, @date), @date))

WHILE @loopdate <= @endofcurrentmonth
BEGIN
	INSERT INTO #tmp_DateRange ([Date])
	VALUES (@loopdate)

	SET @loopdate = dateadd(dd, 1, @loopdate)
END

SELECT @loop = 0
	,@loopmax = max(ID)
FROM #tmp_DateRange

WHILE @loop < @loopmax
BEGIN
	SELECT @randnum = round(((@upper - @lower - 1) * rand() + @lower), 0)

	SET @loop = @loop + 1
	SET @innerloopmax = @randnum
	SET @innerloop = 0

	IF @randnum % 2 = 0
	BEGIN
		SET @value = (
				SELECT [date]
				FROM #tmp_DateRange
				WHERE ID = @loop
				)
	END
	ELSE
	BEGIN
		SET @value = NULL
	END

	WHILE @innerloop <= @innerloopmax
	BEGIN
		SET @innerloop = @innerloop + 1

		INSERT INTO #tmp_RandomData (BidDateWon)
		VALUES (@value)
	END
END

UPDATE #tmp_RandomData
SET BidWon = 1
WHERE BidDateWon IS NOT NULL

SELECT *
FROM #tmp_RandomData

I created this random data generated SQL so it give you a sample data set to work with. Run this in TSQL and create a physical table then you can import in Excel or PowerBI to work with the DAX syntax.

The SQL example show what the date example and I am putting in a measure.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

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