USP_MKTSEGMENTATIONSEGMENT_GETRESPONSECOUNTS
Returns the number of responders, the number of responses, the total gift amount, and the average gift amount for an activated segment.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTID | uniqueidentifier | IN | |
@TESTSEGMENTID | uniqueidentifier | IN | |
@ASOFDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.[USP_MKTSEGMENTATIONSEGMENT_GETRESPONSECOUNTS]
(
@SEGMENTID uniqueidentifier,
@TESTSEGMENTID uniqueidentifier = null,
@ASOFDATE datetime = null
)
as
set nocount on;
declare @EXCLUDE bit;
declare @MAILINGTYPECODE tinyint;
declare @ACTIVE bit;
declare @IMPRESSIONCALCULATIONMETHODCODE tinyint;
declare @IMPRESSIONS integer;
declare @EXPOSURESTARTDATE datetime;
declare @EXPOSUREENDDATE datetime;
declare @SEGMENTTYPECODE tinyint;
declare @ISVENDORMANAGED bit;
declare @ISHISTORICAL bit;
declare @HISTORICALQUANTITY integer;
declare @GIFTIDSETNAME nvarchar(128);
declare @DATATABLE nvarchar(128);
declare @REVENUESEGMENTTABLE nvarchar(128);
declare @OFFERSQL nvarchar(max);
declare @SQL nvarchar(max);
declare @PARAMDEF nvarchar(max);
declare @OFFERS int;
declare @RESPONDERS int;
declare @RESPONSES int;
declare @TOTALGIFTAMOUNT money;
declare @AVERAGEGIFTAMOUNT money;
declare @ORGANIZATIONTOTALGIFTAMOUNT money;
declare @ORGANIZATIONAVERAGEGIFTAMOUNT money;
begin try
--Gather some info so we can build the SQL...
select distinct
@EXCLUDE = [MKTSEGMENTATIONSEGMENT].[EXCLUDE],
@MAILINGTYPECODE = [MKTSEGMENTATION].[MAILINGTYPECODE],
@ACTIVE = [MKTSEGMENTATION].[ACTIVE],
@EXPOSURESTARTDATE = [MKTSEGMENTATIONSEGMENT].[EXPOSURESTARTDATE],
@EXPOSUREENDDATE = [MKTSEGMENTATIONSEGMENT].[EXPOSUREENDDATE],
@SEGMENTTYPECODE = [MKTSEGMENT].[SEGMENTTYPECODE],
@ISVENDORMANAGED = dbo.[UFN_MKTSEGMENT_ISVENDORMANAGEDLIST]([MKTSEGMENT].[ID]),
@ISHISTORICAL = [MKTSEGMENT].[ISHISTORICAL],
@HISTORICALQUANTITY = (case when [MKTSEGMENTATIONSEGMENT].[HISTORICALQUANTITY] > 0 then [MKTSEGMENTATIONSEGMENT].[HISTORICALQUANTITY] else [MKTSEGMENT].[HISTORICALQUANTITY] end),
@GIFTIDSETNAME = dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME]([MKTSEGMENTATIONACTIVATE].[NORMALGIFTIDSETREGISTERID]),
@DATATABLE = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME]([MKTSEGMENTATION].[ID]),
@REVENUESEGMENTTABLE = dbo.[UFN_REVENUESEGMENT_MAKETABLENAME]([MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID])
from dbo.[MKTSEGMENTATIONSEGMENT]
left join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on [MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
left join dbo.[MKTSEGMENTPASSIVE] on [MKTSEGMENTPASSIVE].[ID] = [MKTSEGMENT].[ID]
inner join dbo.[MKTSEGMENTATIONACTIVATE] on [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] and [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID] = [MKTSEGMENT].[QUERYVIEWCATALOGID]
left join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID
and (@TESTSEGMENTID is null or [MKTSEGMENTATIONTESTSEGMENT].[ID] = @TESTSEGMENTID);
--Get the total offer count for this segment depending on the mailing type...
if @MAILINGTYPECODE = 4 --Public media segments
begin
if @ACTIVE = 1 and exists (select top 1 1 from dbo.[MKTSEGMENTATIONSEGMENTACTIVE] where [SEGMENTID] = @SEGMENTID)
select
@IMPRESSIONCALCULATIONMETHODCODE = [MKTSEGMENTATIONSEGMENTACTIVE].[IMPRESSIONCALCULATIONMETHODCODE],
@IMPRESSIONS = [MKTSEGMENTATIONSEGMENTACTIVE].[IMPRESSIONS]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on [MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID;
else
select
@IMPRESSIONCALCULATIONMETHODCODE = [MKTSEGMENTPASSIVE].[IMPRESSIONCALCULATIONMETHODCODE],
@IMPRESSIONS = [MKTSEGMENTPASSIVE].[IMPRESSIONS]
from dbo.[MKTSEGMENTATIONSEGMENT]
left join dbo.[MKTSEGMENTPASSIVE] on [MKTSEGMENTPASSIVE].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID;
set @OFFERSQL = cast(dbo.[UFN_MKTSEGMENTATIONPASSIVESEGMENT_GETQUANTITY](@SEGMENTID, @ACTIVE, @IMPRESSIONCALCULATIONMETHODCODE, @IMPRESSIONS, @EXPOSURESTARTDATE, @EXPOSUREENDDATE) as nvarchar(10));
end
else if @ISVENDORMANAGED = 1 or (@SEGMENTTYPECODE = 2 and @ISHISTORICAL = 1)
-- vendor managed segments and historical list segments work the same way: get the total offers from the segment and
-- calculate the offers for each test segment, taking into account fractions/percents and distributing any remainders
set @OFFERSQL = cast(dbo.[UFN_MKTSEGMENTATIONSEGMENTLIST_GETVENDORMANAGEDQUANTITY](@SEGMENTID, @TESTSEGMENTID) as nvarchar(10));
else if @ISHISTORICAL = 1
-- historical house file segments work similarly: get the total offers from the segment and
-- calculate the offers for each test segment, taking into account fractions/percents and distributing any remainders
set @OFFERSQL = cast(dbo.[UFN_MKTSEGMENTATIONSEGMENT_GETOFFERCOUNT](@SEGMENTID, @TESTSEGMENTID, @HISTORICALQUANTITY) as nvarchar(10));
else
--Get the offers from the activated data table...
set @OFFERSQL = '(select count([D1].[' + (case @MAILINGTYPECODE when 1 then 'REVENUEID' when 2 then 'MEMBERSHIPID' when 3 then 'SPONSORSHIPID' when 5 then 'REVENUEID' else 'DONORID' end) + ']) from dbo.[' + @DATATABLE + '] as [D1] where [D1].[SEGMENTID] = @SEGMENTID and [D1].[TESTSEGMENTID] ' + (case when @TESTSEGMENTID is null then 'is null' else '= @TESTSEGMENTID' end) + ')';
if @EXCLUDE = 0
begin
--Build the SQL to get the response counts...
set @SQL = 'select' + char(13) +
' @OFFERS = ' + @OFFERSQL + ',' + char(13) +
' @RESPONDERS = count(distinct([GIFTIDSET].[DONORID])),' + char(13) +
' @RESPONSES = count([GIFTIDSET].[ID]),' + char(13) +
' @TOTALGIFTAMOUNT = isnull(sum([GIFTIDSET].[AMOUNT]),0),' + char(13) +
' @AVERAGEGIFTAMOUNT = isnull(avg([GIFTIDSET].[AMOUNT]),0),' + char(13) +
' @ORGANIZATIONTOTALGIFTAMOUNT = isnull(sum([GIFTIDSET].[ORGANIZATIONAMOUNT]),0),' + char(13) +
' @ORGANIZATIONAVERAGEGIFTAMOUNT = isnull(avg([GIFTIDSET].[ORGANIZATIONAMOUNT]),0)' + char(13) +
'from dbo.[' + @REVENUESEGMENTTABLE + '] as [RS]' + char(13) +
'inner join dbo.' + @GIFTIDSETNAME + ' as [GIFTIDSET] on [GIFTIDSET].[ID] = [RS].[REVENUEID]' + char(13) +
'where [RS].[SEGMENTID] = @SEGMENTID' + char(13) +
'and [RS].[TESTSEGMENTID] ' + (case when @TESTSEGMENTID is null then 'is null' else '= @TESTSEGMENTID' end) + char(13) +
(case when @ASOFDATE is not null then 'and [GIFTIDSET].[DATE] <= @ASOFDATE' else '' end);
set @PARAMDEF = '@SEGMENTID uniqueidentifier, ' +
'@TESTSEGMENTID uniqueidentifier, ' +
'@ASOFDATE datetime, ' +
'@OFFERS int output, ' +
'@RESPONDERS int output, ' +
'@RESPONSES int output, ' +
'@TOTALGIFTAMOUNT money output, ' +
'@AVERAGEGIFTAMOUNT money output, ' +
'@ORGANIZATIONTOTALGIFTAMOUNT money output, ' +
'@ORGANIZATIONAVERAGEGIFTAMOUNT money output';
--Execute the SQL to get the counts/amounts...
exec sp_executesql @SQL, @PARAMDEF,
@SEGMENTID = @SEGMENTID,
@TESTSEGMENTID = @TESTSEGMENTID,
@ASOFDATE = @ASOFDATE,
@OFFERS = @OFFERS output,
@RESPONDERS = @RESPONDERS output,
@RESPONSES = @RESPONSES output,
@TOTALGIFTAMOUNT = @TOTALGIFTAMOUNT output,
@AVERAGEGIFTAMOUNT = @AVERAGEGIFTAMOUNT output,
@ORGANIZATIONTOTALGIFTAMOUNT = @ORGANIZATIONTOTALGIFTAMOUNT output,
@ORGANIZATIONAVERAGEGIFTAMOUNT = @ORGANIZATIONAVERAGEGIFTAMOUNT output;
end
else -- @EXCLUDE = 1
begin
--Inline exclusions cannot receive responses and cannot be a test segment...
set @SQL = 'select' + char(13) +
' @OFFERS = ' + @OFFERSQL + char(13);
exec sp_executesql @SQL, N'@OFFERS int output, @SEGMENTID uniqueidentifier', @OFFERS = @OFFERS output, @SEGMENTID = @SEGMENTID;
set @RESPONDERS = 0;
set @RESPONSES = 0;
set @TOTALGIFTAMOUNT = 0;
set @AVERAGEGIFTAMOUNT = 0;
set @ORGANIZATIONTOTALGIFTAMOUNT = 0;
set @ORGANIZATIONAVERAGEGIFTAMOUNT = 0;
end
--Return the values
select
@OFFERS as [OFFERS],
@RESPONDERS as [RESPONDERS],
@RESPONSES as [RESPONSES],
@TOTALGIFTAMOUNT as [TOTALGIFTAMOUNT],
@AVERAGEGIFTAMOUNT as [AVERAGEGIFTAMOUNT],
@ORGANIZATIONTOTALGIFTAMOUNT as [ORGANIZATIONTOTALGIFTAMOUNT],
@ORGANIZATIONAVERAGEGIFTAMOUNT as [ORGANIZATIONAVERAGEGIFTAMOUNT];
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;