USP_REPORT_APPEALMAILINGPERFORMANCE
Data retrieval for Appeal Mailing Performance report.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@MAILINGID | uniqueidentifier | IN | |
@IDSETREGISTERID | uniqueidentifier | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@CURRENCYCODE | tinyint | IN | |
@ALTREPORTUSERID | nvarchar(128) | IN | |
@REPORTUSERID | nvarchar(128) | IN |
Definition
Copy
CREATE procedure dbo.[USP_REPORT_APPEALMAILINGPERFORMANCE]
(
@MAILINGID uniqueidentifier = null,
@IDSETREGISTERID uniqueidentifier = null,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@CURRENCYCODE tinyint = 1, /* 0 = base, 1 = organization */
@ALTREPORTUSERID nvarchar(128) = null,
@REPORTUSERID nvarchar(128) = null
)
with execute as owner
as
set nocount on;
declare @SELECTEDCURRENCYID uniqueidentifier;
declare @SQL nvarchar(max);
begin try
if @CURRENCYCODE is null
set @CURRENCYCODE = 1;
if @CURRENCYCODE = 1
set @SELECTEDCURRENCYID = dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]();
--Since the number of mailings in an IDSet should be fairly small, it should be ok to just use a
--temp table here instead of writing this entire procedure in dynamic sql.
if object_id('tempdb..#MAILINGIDSET') is not null
drop table #MAILINGIDSET;
create table #MAILINGIDSET (
[ID] uniqueidentifier not null primary key
);
if @IDSETREGISTERID is not null
begin
if not exists(select * from dbo.[IDSETREGISTER] where [ID] = @IDSETREGISTERID)
raiserror('Selection does not exist in the database.', 13, 1);
set @SQL = 'insert into #MAILINGIDSET ([ID])' + char(13) +
' select distinct [ID] from dbo.' + dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME](@IDSETREGISTERID);
exec (@SQL);
end;
declare @CURRENTAPPUSERID uniqueidentifier = dbo.[UFN_APPUSER_GETREPORTAPPUSERID](@ALTREPORTUSERID,@REPORTUSERID);
with [MAILINGS_CTE] ([MAILINGID], [MAILINGNAME], [MAILINGLINK], [BASECURRENCYID], [MAILINGBUDGETAMOUNT], [MAILINGTOTALGIFTAMOUNT], [MAILINGAVERAGEGIFTAMOUNT], [MAILINGRESPONSES], [MAILINGRESPONDERS], [MAILINGRESPONSERATE], [MAILINGTOTALCOST], [MAILINGCOSTPERDOLLARRAISED], [MAILINGQUANTITY], [MAILINGROIPERCENT], [REGULARGIFTPAYMENTS], [REGULARGIFTREVENUE], [REGULARGIFTAVERAGE], [CASHGIFTPAYMENTS], [CASHGIFTREVENUE], [CASHGIFTAVERAGE], [GROSSAMOUNT]) as
(
--All mailings that meet the criteria
select
[MKTSEGMENTATION].[ID],
[MKTSEGMENTATION].[NAME],
'http://www.blackbaud.com/' + (case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 4 then 'PUBLICMEDIAEFFORTID' when [APPEALMAILING].[ID] is not null then 'APPEALMAILINGID' else 'MAILINGID' end) + '?MAILINGID=' + convert(nvarchar(36), [MKTSEGMENTATION].[ID]) as [MAILINGLINK],
[MKTSEGMENTATION].[BASECURRENCYID],
isnull((case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONBUDGET].[ORGANIZATIONBUDGETAMOUNT] else [MKTSEGMENTATIONBUDGET].[BUDGETAMOUNT] end), 0) as [MAILINGBUDGETAMOUNT],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONACTIVE].[ORGANIZATIONTOTALGIFTAMOUNT] else [MKTSEGMENTATIONACTIVE].[TOTALGIFTAMOUNT] end) as [MAILINGTOTALGIFTAMOUNT],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONACTIVE].[ORGANIZATIONAVERAGEGIFTAMOUNT] else [MKTSEGMENTATIONACTIVE].[AVERAGEGIFTAMOUNT] end) as [MAILINGAVERAGEGIFTAMOUNT],
[MKTSEGMENTATIONACTIVE].[RESPONSES] as [MAILINGRESPONSES],
[MKTSEGMENTATIONACTIVE].[RESPONDERS] as [MAILINGRESPONDERS],
[MKTSEGMENTATIONACTIVE].[RESPONSERATE] as [MAILINGRESPONSERATE],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONACTIVE].[ORGANIZATIONTOTALCOST] else [MKTSEGMENTATIONACTIVE].[TOTALCOST] end) as [MAILINGTOTALCOST],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONACTIVE].[ORGANIZATIONCOSTPERDOLLARRAISED] else [MKTSEGMENTATIONACTIVE].[COSTPERDOLLARRAISED] end) as [MAILINGCOSTPERDOLLARRAISED],
[MKTSEGMENTATIONACTIVE].[QUANTITY] as [MAILINGQUANTITY],
[MKTSEGMENTATIONACTIVE].[ROIPERCENT] as [MAILINGROIPERCENT],
[UKGIFTINFO].[REGULARGIFTPAYMENTS],
(case when @CURRENCYCODE = 1 then [UKGIFTINFO].[ORGANIZATIONREGULARGIFTREVENUE] else [UKGIFTINFO].[REGULARGIFTREVENUE] end) as [REGULARGIFTREVENUE],
(case when @CURRENCYCODE = 1 then [UKGIFTINFO].[ORGANIZATIONREGULARGIFTAVERAGE] else [UKGIFTINFO].[REGULARGIFTAVERAGE] end) as [REGULARGIFTAVERAGE],
[UKGIFTINFO].[CASHGIFTPAYMENTS],
(case when @CURRENCYCODE = 1 then [UKGIFTINFO].[ORGANIZATIONCASHGIFTREVENUE] else [UKGIFTINFO].[CASHGIFTREVENUE] end) as [CASHGIFTREVENUE],
(case when @CURRENCYCODE = 1 then [UKGIFTINFO].[ORGANIZATIONCASHGIFTAVERAGE] else [UKGIFTINFO].[CASHGIFTAVERAGE] end) as [CASHGIFTAVERAGE],
(case when @CURRENCYCODE = 1 then [UKGIFTINFO].[ORGANIZATIONGROSSAMOUNT] else [UKGIFTINFO].[GROSSAMOUNT] end) as [GROSSAMOUNT]
from dbo.[MKTSEGMENTATION]
/* Filter out mailing types that don't track revenue to appeals (ie: reminders, events) */
inner join dbo.[MKTSEGMENTATIONACTIVATE] on [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID] and [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID] = 'DFB4B8C1-5E9A-4C14-ACE3-01C096B53BA0' and [MKTSEGMENTATIONACTIVATE].[APPEALSYSTEMID] <> ''
inner join dbo.[MKTSEGMENTATIONACTIVE] on [MKTSEGMENTATIONACTIVE].[ID] = [MKTSEGMENTATION].[ID]
outer apply dbo.[UFN_MKTSEGMENTATION_GETUKGIFTINFO]([MKTSEGMENTATION].[ID]) as [UKGIFTINFO]
left join dbo.[MKTSEGMENTATIONBUDGET] on [MKTSEGMENTATIONBUDGET].[ID] = [MKTSEGMENTATION].[ID]
left join dbo.[APPEALMAILING] on [APPEALMAILING].[ID] = [MKTSEGMENTATION].[ID]
where [MKTSEGMENTATION].[ACTIVE] = 1 /* Activated mailings only */
and dbo.UFN_SITEALLOWEDFORUSERONFEATURE(@CURRENTAPPUSERID,[MKTSEGMENTATION].[SITEID],'38616d87-3b4f-4e6e-98b1-fe28c5455be1',21) = 1
and (@MAILINGID is null or [MKTSEGMENTATION].[ID] = @MAILINGID)
and (@IDSETREGISTERID is null or exists(select * from #MAILINGIDSET where [ID] = [MKTSEGMENTATION].[ID]))
and (@STARTDATE is null or isnull([MKTSEGMENTATION].[MAILDATE], [MKTSEGMENTATION].[ACTIVATEDATE]) >= @STARTDATE)
and (@ENDDATE is null or isnull([MKTSEGMENTATION].[MAILDATE], [MKTSEGMENTATION].[ACTIVATEDATE]) <= @ENDDATE)
),
[SEGMENTTOTALS_CTE] ([SEGMENTID], [TESTSEGMENTID], [TOTALGIFTAMOUNT], [EXPECTEDTOTALGIFTAMOUNT], [AVERAGEGIFTAMOUNT], [VARIABLECOST], [FIXEDCOST], [TOTALCOST], [ROIPERCENT], [EXPECTEDROIPERCENT], [ROIAMOUNT], [COSTPERDOLLARRAISED], [EXPECTEDCOSTPERDOLLARRAISED], [RESPONDERS], [RESPONSES], [RESPONSERATE], [QUANTITY]) as
(
--Grab all the segment calcs in one place to simplify the next CTE
select
[SEGMENTID],
[TESTSEGMENTID],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONTOTALGIFTAMOUNT] else [MKTSEGMENTATIONSEGMENTACTIVE].[TOTALGIFTAMOUNT] end) as [TOTALGIFTAMOUNT],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONEXPECTEDTOTALGIFTAMOUNT] else [MKTSEGMENTATIONSEGMENTACTIVE].[EXPECTEDTOTALGIFTAMOUNT] end) as [EXPECTEDTOTALGIFTAMOUNT],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONAVERAGEGIFTAMOUNT] else [MKTSEGMENTATIONSEGMENTACTIVE].[AVERAGEGIFTAMOUNT] end) as [AVERAGEGIFTAMOUNT],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONVARIABLECOST] else [MKTSEGMENTATIONSEGMENTACTIVE].[VARIABLECOST] end) as [VARIABLECOST],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONFIXEDCOST] else [MKTSEGMENTATIONSEGMENTACTIVE].[FIXEDCOST] end) as [FIXEDCOST],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONTOTALCOST] else [MKTSEGMENTATIONSEGMENTACTIVE].[TOTALCOST] end) as [TOTALCOST],
[MKTSEGMENTATIONSEGMENTACTIVE].[ROIPERCENT],
[MKTSEGMENTATIONSEGMENTACTIVE].[EXPECTEDROIPERCENT],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONROIAMOUNT] else [MKTSEGMENTATIONSEGMENTACTIVE].[ROIAMOUNT] end) as [ROIAMOUNT],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONCOSTPERDOLLARRAISED] else [MKTSEGMENTATIONSEGMENTACTIVE].[COSTPERDOLLARRAISED] end) as [COSTPERDOLLARRAISED],
(case when @CURRENCYCODE = 1 then [MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONEXPECTEDCOSTPERDOLLARRAISED] else [MKTSEGMENTATIONSEGMENTACTIVE].[EXPECTEDCOSTPERDOLLARRAISED] end) as [EXPECTEDCOSTPERDOLLARRAISED],
[MKTSEGMENTATIONSEGMENTACTIVE].[RESPONDERS],
[MKTSEGMENTATIONSEGMENTACTIVE].[RESPONSES],
[MKTSEGMENTATIONSEGMENTACTIVE].[RESPONSERATE],
[MKTSEGMENTATIONSEGMENTACTIVE].[QUANTITY]
from dbo.[MKTSEGMENTATIONSEGMENTACTIVE]
),
[SEGMENTS_CTE] ([MAILINGID], [SEGMENTID], [SEGMENTNAME], [TESTSEGMENTNAME], [SEGMENTSEQUENCE], [TESTSEGMENTSEQUENCE], [TOTALGIFTAMOUNT], [EXPECTEDTOTALGIFTAMOUNT], [AVERAGEGIFTAMOUNT], [VARIABLECOST], [FIXEDCOST], [TOTALCOST], [ROIPERCENT], [EXPECTEDROIPERCENT], [ROIAMOUNT], [COSTPERDOLLARRAISED], [EXPECTEDCOSTPERDOLLARRAISED], [RESPONDERS], [RESPONSES], [RESPONSERATE], [QUANTITY]) as
(
--Segments
select
[MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID],
[MKTSEGMENT].[ID] as [SEGMENTID],
[MKTSEGMENT].[NAME] as [SEGMENTNAME],
null as [TESTSEGMENTNAME],
[MKTSEGMENTATIONSEGMENT].[SEQUENCE] as [SEGMENTSEQUENCE],
0 as [TESTSEGMENTSEQUENCE],
[SEGMENTTOTALS_CTE].[TOTALGIFTAMOUNT],
[SEGMENTTOTALS_CTE].[EXPECTEDTOTALGIFTAMOUNT],
[SEGMENTTOTALS_CTE].[AVERAGEGIFTAMOUNT],
[SEGMENTTOTALS_CTE].[VARIABLECOST],
[SEGMENTTOTALS_CTE].[FIXEDCOST],
[SEGMENTTOTALS_CTE].[TOTALCOST],
[SEGMENTTOTALS_CTE].[ROIPERCENT],
[SEGMENTTOTALS_CTE].[EXPECTEDROIPERCENT],
[SEGMENTTOTALS_CTE].[ROIAMOUNT],
[SEGMENTTOTALS_CTE].[COSTPERDOLLARRAISED],
[SEGMENTTOTALS_CTE].[EXPECTEDCOSTPERDOLLARRAISED],
[SEGMENTTOTALS_CTE].[RESPONDERS],
[SEGMENTTOTALS_CTE].[RESPONSES],
[SEGMENTTOTALS_CTE].[RESPONSERATE],
[SEGMENTTOTALS_CTE].[QUANTITY]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
inner join [SEGMENTTOTALS_CTE] on [SEGMENTTOTALS_CTE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID] and [SEGMENTTOTALS_CTE].[TESTSEGMENTID] is null
union all
--Test segments
select
[MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID],
[MKTSEGMENT].[ID] as [SEGMENTID],
[MKTSEGMENT].[NAME] as [SEGMENTNAME],
dbo.[UFN_MKTSEGMENTATIONTESTSEGMENT_GETNAME]([MKTSEGMENTATIONTESTSEGMENT].[ID]) as [TESTSEGMENTNAME],
[MKTSEGMENTATIONSEGMENT].[SEQUENCE] as [SEGMENTSEQUENCE],
[MKTSEGMENTATIONTESTSEGMENT].[SEQUENCE] as [TESTSEGMENTSEQUENCE],
[SEGMENTTOTALS_CTE].[TOTALGIFTAMOUNT],
[SEGMENTTOTALS_CTE].[EXPECTEDTOTALGIFTAMOUNT],
[SEGMENTTOTALS_CTE].[AVERAGEGIFTAMOUNT],
[SEGMENTTOTALS_CTE].[VARIABLECOST],
[SEGMENTTOTALS_CTE].[FIXEDCOST],
[SEGMENTTOTALS_CTE].[TOTALCOST],
[SEGMENTTOTALS_CTE].[ROIPERCENT],
[SEGMENTTOTALS_CTE].[EXPECTEDROIPERCENT],
[SEGMENTTOTALS_CTE].[ROIAMOUNT],
[SEGMENTTOTALS_CTE].[COSTPERDOLLARRAISED],
[SEGMENTTOTALS_CTE].[EXPECTEDCOSTPERDOLLARRAISED],
[SEGMENTTOTALS_CTE].[RESPONDERS],
[SEGMENTTOTALS_CTE].[RESPONSES],
[SEGMENTTOTALS_CTE].[RESPONSERATE],
[SEGMENTTOTALS_CTE].[QUANTITY]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
inner join [SEGMENTTOTALS_CTE] on [SEGMENTTOTALS_CTE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID] and [SEGMENTTOTALS_CTE].[TESTSEGMENTID] = [MKTSEGMENTATIONTESTSEGMENT].[ID]
)
select
[MAILINGS_CTE].[MAILINGLINK] as [MAILINGID],
[MAILINGS_CTE].[MAILINGNAME],
[MAILINGS_CTE].[MAILINGBUDGETAMOUNT],
[MAILINGS_CTE].[MAILINGTOTALGIFTAMOUNT],
[MAILINGS_CTE].[MAILINGAVERAGEGIFTAMOUNT],
[MAILINGS_CTE].[MAILINGRESPONSES],
[MAILINGS_CTE].[MAILINGRESPONDERS],
[MAILINGS_CTE].[MAILINGRESPONSERATE],
[MAILINGS_CTE].[MAILINGTOTALCOST],
[MAILINGS_CTE].[MAILINGCOSTPERDOLLARRAISED],
[MAILINGS_CTE].[MAILINGQUANTITY],
[MAILINGS_CTE].[MAILINGROIPERCENT],
'http://www.blackbaud.com/SEGMENTID?SEGMENTID=' + convert(nvarchar(36), [SEGMENTS_CTE].[SEGMENTID]) as [SEGMENTID],
[SEGMENTS_CTE].[SEGMENTNAME],
[SEGMENTS_CTE].[TOTALGIFTAMOUNT],
[SEGMENTS_CTE].[EXPECTEDTOTALGIFTAMOUNT],
[SEGMENTS_CTE].[AVERAGEGIFTAMOUNT],
[SEGMENTS_CTE].[VARIABLECOST],
[SEGMENTS_CTE].[FIXEDCOST],
[SEGMENTS_CTE].[TOTALCOST],
[SEGMENTS_CTE].[ROIPERCENT],
[SEGMENTS_CTE].[EXPECTEDROIPERCENT],
[SEGMENTS_CTE].[ROIAMOUNT],
[SEGMENTS_CTE].[COSTPERDOLLARRAISED],
[SEGMENTS_CTE].[EXPECTEDCOSTPERDOLLARRAISED],
[SEGMENTS_CTE].[RESPONDERS],
[SEGMENTS_CTE].[RESPONSES],
[SEGMENTS_CTE].[RESPONSERATE],
[SEGMENTS_CTE].[QUANTITY],
[MAILINGS_CTE].[REGULARGIFTPAYMENTS],
[MAILINGS_CTE].[REGULARGIFTREVENUE],
[MAILINGS_CTE].[REGULARGIFTAVERAGE],
[MAILINGS_CTE].[CASHGIFTPAYMENTS],
[MAILINGS_CTE].[CASHGIFTREVENUE],
[MAILINGS_CTE].[CASHGIFTAVERAGE],
[MAILINGS_CTE].[GROSSAMOUNT],
[CURRENCYPROPERTIES].[ISO4217] as [CURRENCYISOCURRENCYCODE],
[CURRENCYPROPERTIES].[DECIMALDIGITS] as [CURRENCYDECIMALDIGITS],
[CURRENCYPROPERTIES].[CURRENCYSYMBOL] as [CURRENCYSYMBOL],
[CURRENCYPROPERTIES].[SYMBOLDISPLAYSETTINGCODE] as [CURRENCYSYMBOLDISPLAYSETTINGCODE],
[SEGMENTS_CTE].[SEGMENTSEQUENCE],
[SEGMENTS_CTE].[TESTSEGMENTSEQUENCE],
[SEGMENTS_CTE].[TESTSEGMENTNAME]
from [MAILINGS_CTE]
inner join [SEGMENTS_CTE] on [SEGMENTS_CTE].[MAILINGID] = [MAILINGS_CTE].[MAILINGID]
outer apply dbo.[UFN_CURRENCY_GETPROPERTIES](isnull(@SELECTEDCURRENCYID, [MAILINGS_CTE].[BASECURRENCYID])) as [CURRENCYPROPERTIES]
order by [MAILINGS_CTE].[MAILINGNAME], [SEGMENTS_CTE].[SEGMENTSEQUENCE], [SEGMENTS_CTE].[TESTSEGMENTSEQUENCE];
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
if object_id('tempdb..#MAILINGIDSET') is not null
drop table #MAILINGIDSET;
return 1;
end catch
return 0;