That seems a little complicated for a Fiscal Year function.
The Fiscal Year Logic can be pared down to
select YEAR(DATEADD(m,3,RegistrationDate)) as Fyear
,MONTH(DATEADD(m,3,RegistrationDate)) as Fmonth
-- OR A Table Function
CREATE FUNCTION dbo.FiscalYear
(@SomeDate DateTime)
RETURNS TABLE WITH SCHEMABINDING AS
RETURN SELECT Fyear = YEAR(DATEADD(m,3,@SomeDate))
,Fmonth = MONTH(DATEADD(m,3,@SomeDate))
;
GO
SELECT
fy.Fyear
,fy.Fmonth
from YourTable
CROSS APPLY dbo.FiscalYear(RegistrationDate) fy
Or if you prefer to do it in SSRS create a calculated field with vb.net
=Year(DateAdd(DateInterval.Month,3,Fields!RegistrationDate))
=Month(DateAdd(DateInterval.Month,3,Fields!RegistrationDate))
As stated earlier, you can also build a calendar table in memory and do a join, provided that the Registration Date is just the date value and doesn't have time values. I've been burned on calendar tables with fiscal data I find it easier and usually faster to do the DATEADD function
"There is nothing so useless as doing efficiently that which should not be done at all." - Peter Drucker