USP_MKTSEGMENTATION_GETRESPONSECOUNTS
Returns actual performance measures for an activated marketing effort.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTATIONID | uniqueidentifier | IN | |
@ASOFDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.[USP_MKTSEGMENTATION_GETRESPONSECOUNTS]
(
@SEGMENTATIONID uniqueidentifier,
@ASOFDATE datetime = null
)
as
set nocount on;
declare @RECORDSOURCEID uniqueidentifier;
declare @TOTALOFFERS int;
declare @TOTALRESPONDERS int;
declare @TOTALRESPONSES int;
declare @TOTALGIFTAMOUNT money;
declare @TOTALORGANIZATIONGIFTAMOUNT money;
declare @RESPONDERS int;
declare @RESPONSES int;
declare @GIFTAMOUNT money;
declare @ORGANIZATIONGIFTAMOUNT money;
declare @SQL nvarchar(max);
declare @PARAMDEF nvarchar(255);
declare @GIFTIDSETID uniqueidentifier;
declare @MAILINGTYPECODE tinyint;
declare @ACTIVE bit;
declare @FIRSTRESPONSEDATE date;
declare @RECORDSOURCEFIRSTRESPONSEDATE date;
set @TOTALRESPONDERS = 0;
set @TOTALRESPONSES = 0;
set @TOTALGIFTAMOUNT = 0;
set @TOTALORGANIZATIONGIFTAMOUNT = 0;
set @FIRSTRESPONSEDATE = null;
set @PARAMDEF = '@ASOFDATE datetime, ' +
'@RESPONDERS int output, ' +
'@RESPONSES int output, ' +
'@GIFTAMOUNT money output, ' +
'@ORGANIZATIONGIFTAMOUNT money output,' +
'@RECORDSOURCEFIRSTRESPONSEDATE date output';
select
@MAILINGTYPECODE = [MAILINGTYPECODE],
@ACTIVE = [ACTIVE]
from dbo.[MKTSEGMENTATION]
where [ID] = @SEGMENTATIONID;
declare RECORDSOURCECURSOR cursor local fast_forward for
select
[QUERYVIEWCATALOGID]
from dbo.[UFN_MKTSEGMENTATION_GETDISTINCTRECORDSOURCES](@SEGMENTATIONID);
open RECORDSOURCECURSOR;
fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID;
while (@@FETCH_STATUS = 0)
begin
/* Gather some info so we can build the SQL for each record source */
select
@GIFTIDSETID = [NORMALGIFTIDSETREGISTERID]
from dbo.[MKTSEGMENTATIONACTIVATE]
where [SEGMENTATIONID] = @SEGMENTATIONID
and [RECORDSOURCEID] = @RECORDSOURCEID;
/* Build the SQL statement for this record source */
set @SQL = 'select' + char(13) +
' @RESPONDERS = count(distinct([GIFTIDSET].[DONORID])),' + char(13) +
' @RESPONSES = count([GIFTIDSET].[DONORID]),' + char(13) +
' @GIFTAMOUNT = isnull(sum([GIFTIDSET].[AMOUNT]),0),' + char(13) +
' @ORGANIZATIONGIFTAMOUNT = isnull(sum([GIFTIDSET].[ORGANIZATIONAMOUNT]),0),' + char(13) +
' @RECORDSOURCEFIRSTRESPONSEDATE = MIN([GIFTIDSET].[DATE])' + char(13) +
'from dbo.' + dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME](@GIFTIDSETID) + ' as [GIFTIDSET]';
if @ASOFDATE is not null
set @SQL = @SQL + char(13) + 'where [GIFTIDSET].[DATE] <= @ASOFDATE';
/* Execute the SQL to get the counts/amounts for this record source */
exec sp_executesql @SQL, @PARAMDEF,
@ASOFDATE = @ASOFDATE,
@RESPONDERS = @RESPONDERS output,
@RESPONSES = @RESPONSES output,
@GIFTAMOUNT = @GIFTAMOUNT output,
@ORGANIZATIONGIFTAMOUNT = @ORGANIZATIONGIFTAMOUNT output,
@RECORDSOURCEFIRSTRESPONSEDATE = @RECORDSOURCEFIRSTRESPONSEDATE output;
/* Keep the running totals for all record sources */
set @TOTALRESPONDERS = @TOTALRESPONDERS + @RESPONDERS;
set @TOTALRESPONSES = @TOTALRESPONSES + @RESPONSES;
set @TOTALGIFTAMOUNT = @TOTALGIFTAMOUNT + @GIFTAMOUNT;
set @TOTALORGANIZATIONGIFTAMOUNT = @TOTALORGANIZATIONGIFTAMOUNT + @ORGANIZATIONGIFTAMOUNT;
set @FIRSTRESPONSEDATE = case when @FIRSTRESPONSEDATE is null then @RECORDSOURCEFIRSTRESPONSEDATE when @RECORDSOURCEFIRSTRESPONSEDATE < @FIRSTRESPONSEDATE then @RECORDSOURCEFIRSTRESPONSEDATE else @FIRSTRESPONSEDATE end
fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID;
end;
close RECORDSOURCECURSOR;
deallocate RECORDSOURCECURSOR;
if @MAILINGTYPECODE <> 4
begin
/* Get the total offer count for the activated mailing */
set @SQL = 'select @TOTALOFFERS = count([DATA].[' + (case @MAILINGTYPECODE when 1 then 'REVENUEID' when 2 then 'MEMBERSHIPID' else 'DONORID' end) + '])' + char(13) +
'from dbo.[' + dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME](@SEGMENTATIONID) + '] as [DATA]' + char(13) +
'inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [DATA].[SEGMENTID]' + char(13) +
'where [MKTSEGMENTATIONSEGMENT].[EXCLUDE] = 0' + char(13) +
'and [DATA].[DONORQUERYVIEWCATALOGID] is not null';
set @PARAMDEF = '@TOTALOFFERS int output';
exec sp_executesql @SQL, @PARAMDEF, @TOTALOFFERS = @TOTALOFFERS output;
/* Get the total offer count for any vendor managed list segments and add their offers to the total offer count */
select
@TOTALOFFERS = @TOTALOFFERS + isnull(sum(dbo.[UFN_MKTSEGMENTATIONSEGMENTLIST_GETQUANTITY]([MKTSEGMENTATIONSEGMENT].[ID], 3)), 0)
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENTLIST].[SEGMENTLISTID]
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
and [MKTSEGMENTLIST].[TYPECODE] = 1;
/* Get the total offer count for any historical segments (non-lists) and add their offers to the total offer count */
select
@TOTALOFFERS = @TOTALOFFERS + isnull(sum((case when [MKTSEGMENTATIONSEGMENT].[HISTORICALQUANTITY] > 0 then [MKTSEGMENTATIONSEGMENT].[HISTORICALQUANTITY] else [MKTSEGMENT].[HISTORICALQUANTITY] end)), 0)
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
and [MKTSEGMENT].[ISHISTORICAL] = 1;
/* Get the total offer count for all seeds */
select
@TOTALOFFERS = @TOTALOFFERS + count(1)
from dbo.[MKTSEGMENTATIONPACKAGE]
inner join dbo.[MKTSEGMENTATIONSEED] on [MKTSEGMENTATIONSEED].[SEGMENTATIONID] = [MKTSEGMENTATIONPACKAGE].[SEGMENTATIONID]
where [MKTSEGMENTATIONPACKAGE].[SEGMENTATIONID] = @SEGMENTATIONID;
end
else
begin
select
@TOTALOFFERS = isnull(sum(dbo.[UFN_MKTSEGMENTATIONPASSIVESEGMENT_GETQUANTITY](
[MKTSEGMENTATIONSEGMENT].[ID],
@ACTIVE,
case @ACTIVE when 1 then [MKTSEGMENTATIONSEGMENTACTIVE].[IMPRESSIONCALCULATIONMETHODCODE] else [MKTSEGMENTPASSIVE].[IMPRESSIONCALCULATIONMETHODCODE] end,
case @ACTIVE when 1 then [MKTSEGMENTATIONSEGMENTACTIVE].[IMPRESSIONS] else [MKTSEGMENTPASSIVE].[IMPRESSIONS] end,
[MKTSEGMENTATIONSEGMENT].[EXPOSURESTARTDATE],
[MKTSEGMENTATIONSEGMENT].[EXPOSUREENDDATE])), 0)
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENTPASSIVE] on [MKTSEGMENTPASSIVE].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
left outer join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on [MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
end
/* Return the values */
select
@TOTALOFFERS as [OFFERS],
@TOTALRESPONDERS as [RESPONDERS],
@TOTALRESPONSES as [RESPONSES],
@TOTALGIFTAMOUNT as [TOTALGIFTAMOUNT],
(case when @TOTALOFFERS > 0 then ((cast(@TOTALRESPONSES as decimal(20,5)) / cast(@TOTALOFFERS as decimal(20,5))) * 100) else 0 end) as [RESPONSERATE],
@TOTALORGANIZATIONGIFTAMOUNT as [TOTALORGANIZATIONGIFTAMOUNT],
@FIRSTRESPONSEDATE as [FIRSTRESPONSEDATE];
return 0;