USP_DATALIST_MEMBERSHIPREVENUEREPORT
Fetches membership revenue information for the membership revenue report
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PROGRAMID | uniqueidentifier | IN | Membership program |
@STARTDATE | datetime | IN | Start date |
@ENDDATE | datetime | IN | End date |
@GROUPTYPE | tinyint | IN | Group by |
@CURRENCYCODE | tinyint | IN | Currency |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_MEMBERSHIPREVENUEREPORT
(
@PROGRAMID uniqueidentifier,
@STARTDATE datetime,
@ENDDATE datetime,
@GROUPTYPE tinyint,
@CURRENCYCODE tinyint
) as
set nocount on;
--GROUPTYPE Types
-- 0: Revenue Channel
-- 1: Membership Transaction type
--CURRENCYCODE types
-- 0: Base
-- 1: Organization
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @SELECTEDCURRENCYID uniqueidentifier;
if coalesce(@CURRENCYCODE, 1) = 1
begin
set @SELECTEDCURRENCYID = @ORGANIZATIONCURRENCYID;
end
else
begin
select @SELECTEDCURRENCYID = MEMBERSHIPPROGRAM.BASECURRENCYID
from dbo.MEMBERSHIPPROGRAM
where MEMBERSHIPPROGRAM.ID = @PROGRAMID;
end
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;
if @GROUPTYPE not in (0,1)
raiserror('Group by type must be specified', 13, 1);
create table tempdb.#temp_membershiprevenuereportdata (
TIERCODEID uniqueidentifier,
TIERSEQUENCE int,
TIERCODENAME nvarchar(100) collate database_default,
MEMBERSHIPLEVEL uniqueidentifier,
MEMBERSHIPLEVELSEQUENCE int,
MEMBERSHIPLEVELNAME nvarchar(100) collate database_default,
REVENUEAMOUNT money,
TRANSACTIONTYPECODE tinyint,
REVENUECHANNEL uniqueidentifier,
MEMBERSHIPTRANSACTIONTYPE tinyint,
REVENUEAPPLICATIONCODE tinyint,
REPORTBUCKETCODE tinyint,
REPORTBUCKET varchar(10) collate database_default,
LEFTOVERDISCOUNTANDREFUNDS money
);
--Populating temp table with revenue data
exec dbo.USP_MEMBERSHIPREVENUEREPORT_POPULATEREVENUEDATA
@PROGRAMID,
@SELECTEDCURRENCYID,
@ORGANIZATIONCURRENCYID,
@DECIMALDIGITS,
@ROUNDINGTYPECODE,
@STARTDATE,
@ENDDATE;
-- Get the information for the report
if @GROUPTYPE = 0
begin
with MEMBERSHIPCOUNT_CTE as (
select
MEMBERSHIPLEVELID,
COUNT(MEMBERSHIPID) MEMBERSHIPCOUNT
from dbo.UFN_MEMBERSHIPPROGRAM_MEMBERSHIPSASOF(@PROGRAMID, @ENDDATE)
where ACTIONCODE <> 4
group by MEMBERSHIPLEVELID
)
select
isnull(MJ1.TIERCODENAME,'') as TIER,
MJ1.MEMBERSHIPLEVELNAME as MEMBERSHIPLEVEL,
dbo.UFN_CHANNELCODE_GETDESCRIPTION(MJ1.REVENUECHANNEL) as INNERGROUP,
(
select sum(REVENUEAMOUNT)
from tempdb.#temp_membershiprevenuereportdata as MJ2
where
MJ2.MEMBERSHIPTRANSACTIONTYPE is not null and
MJ2.REPORTBUCKETCODE = 0 and -- revenue
MJ2.MEMBERSHIPLEVEL = MJ1.MEMBERSHIPLEVEL and
(MJ2.REVENUECHANNEL = MJ1.REVENUECHANNEL or
(MJ2.REVENUECHANNEL is null and MJ1.REVENUECHANNEL is null))
) as TOTALREVENUE,
avg(MEMBERSHIPCOUNT_CTE.MEMBERSHIPCOUNT) as NUMMEMBERS,
(
select sum(REVENUEAMOUNT) - (select sum(LEFTOVERDISCOUNTANDREFUNDS) from tempdb.#temp_membershiprevenuereportdata as MJ2
where
MJ2.MEMBERSHIPTRANSACTIONTYPE is not null and
MJ2.REPORTBUCKETCODE = 0 and -- revenue
MJ2.MEMBERSHIPLEVEL = MJ1.MEMBERSHIPLEVEL and
(MJ2.REVENUECHANNEL = MJ1.REVENUECHANNEL or
(MJ2.REVENUECHANNEL is null and MJ1.REVENUECHANNEL is null)))
from tempdb.#temp_membershiprevenuereportdata as MJ2
where
MJ2.MEMBERSHIPTRANSACTIONTYPE is null and
MJ2.MEMBERSHIPLEVEL = MJ1.MEMBERSHIPLEVEL and
MJ2.REPORTBUCKETCODE = 2 --gifts
) as ADDITIONALGIFTS,
(
select sum(REVENUEAMOUNT)
from tempdb.#temp_membershiprevenuereportdata as MJ2
where MJ2.REPORTBUCKETCODE = 1 and --add-ons
MJ2.MEMBERSHIPLEVEL = MJ1.MEMBERSHIPLEVEL and
(MJ2.REVENUECHANNEL = MJ1.REVENUECHANNEL or
(MJ2.REVENUECHANNEL is null and MJ1.REVENUECHANNEL is null))
) as ADDONREVENUE,
@CURRENCYSYMBOL as CURRENCYSYMBOL,
@CURRENCYISO as ISOCURRENCYCODE,
@DECIMALDIGITS as DECIMALDIGITS,
@CURRENCYSYMBOLDISPLAYSETTINGCODE as CURRENCYSYMBOLDISPLAYSETTINGCODE,
@SELECTEDCURRENCYID as BASECURRENCYID,
rank() over (partition by MJ1.MEMBERSHIPLEVEL order by MJ1.REVENUECHANNEL) ITEMSEQUENCE
from tempdb.#temp_membershiprevenuereportdata as MJ1
left join MEMBERSHIPCOUNT_CTE on MJ1.MEMBERSHIPLEVEL = MEMBERSHIPCOUNT_CTE.MEMBERSHIPLEVELID
group by
MJ1.TIERCODEID,
MJ1.TIERSEQUENCE,
MJ1.TIERCODENAME,
MJ1.MEMBERSHIPLEVEL,
MJ1.MEMBERSHIPLEVELSEQUENCE,
MJ1.MEMBERSHIPLEVELNAME,
MJ1.REVENUECHANNEL
order by
MJ1.TIERSEQUENCE,
MJ1.MEMBERSHIPLEVELSEQUENCE,
INNERGROUP
end
else if @GROUPTYPE = 1
begin
with MEMBERSHIPCOUNT_CTE as (
select
MEMBERSHIPLEVELID,
COUNT(MEMBERSHIPID) MEMBERSHIPCOUNT
from dbo.UFN_MEMBERSHIPPROGRAM_MEMBERSHIPSASOF(@PROGRAMID, @ENDDATE)
where ACTIONCODE <> 4
group by MEMBERSHIPLEVELID
)
select
isnull(MJ1.TIERCODENAME,'') as TIER,
MJ1.MEMBERSHIPLEVELNAME as MEMBERSHIPLEVEL,
dbo.UFN_MEMBERSHIPTRANSACTION_ACTIONCODE_GETDESCRIPTION(MJ1.MEMBERSHIPTRANSACTIONTYPE) as INNERGROUP,
(
select sum(REVENUEAMOUNT)
from tempdb.#temp_membershiprevenuereportdata as MJ2
where
MJ2.MEMBERSHIPTRANSACTIONTYPE is not null and
MJ2.REPORTBUCKETCODE = 0 and -- revenue
MJ2.MEMBERSHIPLEVEL = MJ1.MEMBERSHIPLEVEL and
MJ2.MEMBERSHIPTRANSACTIONTYPE = MJ1.MEMBERSHIPTRANSACTIONTYPE
) as TOTALREVENUE,
avg(MEMBERSHIPCOUNT_CTE.MEMBERSHIPCOUNT) as NUMMEMBERS,
(
select sum(REVENUEAMOUNT) - (select sum(LEFTOVERDISCOUNTANDREFUNDS) from tempdb.#temp_membershiprevenuereportdata as MJ2
where
MJ2.MEMBERSHIPTRANSACTIONTYPE is not null and
MJ2.REPORTBUCKETCODE = 0 and -- revenue
MJ2.MEMBERSHIPLEVEL = MJ1.MEMBERSHIPLEVEL
)
from tempdb.#temp_membershiprevenuereportdata as MJ2
where
MJ2.MEMBERSHIPTRANSACTIONTYPE is null and
MJ2.MEMBERSHIPLEVEL = MJ1.MEMBERSHIPLEVEL and
MJ2.REPORTBUCKETCODE = 2 -- gifts
) as ADDITIONALGIFTS,
(
select sum(REVENUEAMOUNT)
from tempdb.#temp_membershiprevenuereportdata as MJ2
where
MJ2.REPORTBUCKETCODE = 1 and -- add-ons
MJ2.MEMBERSHIPLEVEL = MJ1.MEMBERSHIPLEVEL and
MJ2.MEMBERSHIPTRANSACTIONTYPE = MJ1.MEMBERSHIPTRANSACTIONTYPE
) as ADDONREVENUE,
@CURRENCYSYMBOL as CURRENCYSYMBOL,
@CURRENCYISO as ISOCURRENCYCODE,
@DECIMALDIGITS as DECIMALDIGITS,
@CURRENCYSYMBOLDISPLAYSETTINGCODE as CURRENCYSYMBOLDISPLAYSETTINGCODE,
@SELECTEDCURRENCYID as BASECURRENCYID,
rank() over (partition by MJ1.MEMBERSHIPLEVEL order by MJ1.MEMBERSHIPTRANSACTIONTYPE) ITEMSEQUENCE
from tempdb.#temp_membershiprevenuereportdata as MJ1
left join MEMBERSHIPCOUNT_CTE on MJ1.MEMBERSHIPLEVEL = MEMBERSHIPCOUNT_CTE.MEMBERSHIPLEVELID
group by
MJ1.TIERCODEID,
MJ1.TIERSEQUENCE,
MJ1.TIERCODENAME,
MJ1.MEMBERSHIPLEVEL,
MJ1.MEMBERSHIPLEVELSEQUENCE,
MJ1.MEMBERSHIPLEVELNAME,
MJ1.MEMBERSHIPTRANSACTIONTYPE
order by
MJ1.TIERSEQUENCE,
MJ1.MEMBERSHIPLEVELSEQUENCE,
INNERGROUP
end
drop table tempdb.#temp_membershiprevenuereportdata;
return 0;