USP_MEMBERSHIPPROGRAM_GETREVENUETREND
Returns revenue trends for top performing membership programs.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@FROMDATE | datetime | IN | |
@TODATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_MEMBERSHIPPROGRAM_GETREVENUETREND
(
@FROMDATE datetime = null,
@TODATE datetime = null
)
as
begin
set @FROMDATE = dbo.UFN_DATE_GETEARLIESTTIME(@FROMDATE);
set @TODATE = dbo.UFN_DATE_GETLATESTTIME(@TODATE);
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @SELECTEDCURRENCYID uniqueidentifier;
set @SELECTEDCURRENCYID = @ORGANIZATIONCURRENCYID;
declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;
declare @CURRENCYISO nvarchar(6);
declare @CURRENCYSYMBOL nvarchar(10);
declare @CURRENCYSYMBOLDISPLAYSETTINGCODE tinyint;
select
@CURRENCYISO = CURRENCY.ISO4217,
@DECIMALDIGITS = CURRENCY.DECIMALDIGITS,
@CURRENCYSYMBOL = CURRENCY.CURRENCYSYMBOL,
@ROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE,
@CURRENCYSYMBOLDISPLAYSETTINGCODE = CURRENCY.SYMBOLDISPLAYSETTINGCODE
from
dbo.CURRENCY
where
CURRENCY.ID = @SELECTEDCURRENCYID;
declare @PROGRAMPERFORMANCE table(ID uniqueidentifier, TOTAL int);
insert into @PROGRAMPERFORMANCE
select
MEMBERSHIPPROGRAMID,
count(*)
from dbo.MEMBERSHIP
where JOINDATE between @FROMDATE and @TODATE
group by MEMBERSHIPPROGRAMID
declare @TOPPROGRAMS table(ID uniqueidentifier)
insert into @TOPPROGRAMS
select top(6)
ID
from @PROGRAMPERFORMANCE
order by TOTAL desc
select
TRANSACTIONDATE as TRANSACTIONDATE,
sum(TOTAL) as TOTAL,
PROGRAMNAME as PROGRAMNAME
from (
select
REVENUESPLITS.DATE as TRANSACTIONDATE,
REVENUESPLITS.AMOUNTINCURRENCY - coalesce(REFUND.CREDITTOTAL, 0) as TOTAL,
MEMBERSHIPPROGRAMSPLITS.PROGRAMNAME as PROGRAMNAME
from dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(
@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE
) as REVENUESPLITS
left join dbo.UFN_CREDIT_GETSPLITCREDITAMOUNT_BULK() as REFUND
on REFUND.SOURCELINEITEMID = REVENUESPLITS.ID
inner join
(
select
MA.REVENUESPLITID as REVENUESPLITID,
MP.NAME as PROGRAMNAME
from dbo.MEMBERSHIPTRANSACTION MT
inner join dbo.MEMBERSHIPADDON MA
on MA.MEMBERSHIPTRANSACTIONID = MT.ID
inner join dbo.MEMBERSHIPLEVEL ML
on ML.ID = MT.MEMBERSHIPLEVELID
inner join @TOPPROGRAMS TOPPROGRAMS
on ML.MEMBERSHIPPROGRAMID = TOPPROGRAMS.ID
inner join dbo.MEMBERSHIPPROGRAM MP
on MP.ID = TOPPROGRAMS.ID
where
MT.TRANSACTIONDATE between @FROMDATE and @TODATE
union all
select
MT.REVENUESPLITID as REVNEUESPLITID,
MP.NAME as PROGRAMNAME
from dbo.MEMBERSHIPTRANSACTION MT
inner join dbo.MEMBERSHIPLEVEL ML
on ML.ID = MT.MEMBERSHIPLEVELID
inner join @TOPPROGRAMS TOPPROGRAMS
on ML.MEMBERSHIPPROGRAMID = TOPPROGRAMS.ID
inner join dbo.MEMBERSHIPPROGRAM MP
on MP.ID = TOPPROGRAMS.ID
where
MT.TRANSACTIONDATE between @FROMDATE and @TODATE
) as MEMBERSHIPPROGRAMSPLITS
on MEMBERSHIPPROGRAMSPLITS.REVENUESPLITID = REVENUESPLITS.ID
where
REVENUESPLITS.TYPECODE in (2,18)
union all
-- Membership promotions
select
SALESORDER.TRANSACTIONDATE TRANSACTIONDATE,
-SALESORDERITEMMEMBERSHIPITEMPROMOTION.ORGANIZATIONAMOUNT TOTAL,
MEMBERSHIPPROGRAM.NAME PROGRAMNAME
from dbo.SALESORDER
inner join dbo.SALESORDERITEM
on SALESORDERITEM.SALESORDERID = SALESORDER.ID
inner join dbo.SALESORDERITEMMEMBERSHIP
on SALESORDERITEMMEMBERSHIP.ID = SALESORDERITEM.ID
inner join dbo.SALESORDERITEMMEMBERSHIPITEMPROMOTION
on SALESORDERITEMMEMBERSHIPITEMPROMOTION.SALESORDERITEMID = SALESORDERITEM.ID
inner join dbo.MEMBERSHIPPROGRAM
on SALESORDERITEMMEMBERSHIP.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
where SALESORDER.TRANSACTIONDATE between @FROMDATE and @TODATE
and exists(select 1 from @TOPPROGRAMS where ID = MEMBERSHIPPROGRAM.ID)
) as RAWMEMBERSHIPREVENUE
group by TRANSACTIONDATE, PROGRAMNAME
order by PROGRAMNAME desc
end