USP_MKTSEGMENTATION_GETINDIRECTRESPONSECOUNTS
Returns actual indirect performance measures for an activated marketing effort.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTATIONID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.[USP_MKTSEGMENTATION_GETINDIRECTRESPONSECOUNTS]
(
@SEGMENTATIONID uniqueidentifier
)
as
set nocount on;
declare @GIFTIDSETTABLE nvarchar(128);
declare @REVENUESEGMENTTABLE nvarchar(128);
declare @SQL nvarchar(max);
declare @PARAMDEF nvarchar(max);
declare @INDIRECTRESPONDERS int;
declare @INDIRECTRESPONSES int;
declare @INDIRECTGIFTAMOUNT money;
declare @INDIRECTORGANIZATIONGIFTAMOUNT money;
declare @TOTALINDIRECTRESPONDERS int = 0;
declare @TOTALINDIRECTRESPONSES int = 0;
declare @TOTALINDIRECTGIFTAMOUNT money = 0;
declare @TOTALINDIRECTORGANIZATIONGIFTAMOUNT money = 0;
begin try
set @PARAMDEF = '@SEGMENTATIONID uniqueidentifier, ' +
'@INDIRECTRESPONDERS int output, ' +
'@INDIRECTRESPONSES int output, ' +
'@INDIRECTGIFTAMOUNT money output, ' +
'@INDIRECTORGANIZATIONGIFTAMOUNT money output';
declare RECORDSOURCECURSOR cursor local fast_forward for
select
dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME]([MKTSEGMENTATIONACTIVATE].[NORMALGIFTIDSETREGISTERID]),
dbo.[UFN_REVENUESEGMENT_MAKETABLENAME]([MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID])
from dbo.[UFN_MKTSEGMENTATION_GETDISTINCTRECORDSOURCES](@SEGMENTATIONID) as [DRS]
inner join dbo.[MKTSEGMENTATIONACTIVATE] on [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID] = [DRS].[QUERYVIEWCATALOGID] and [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID] = @SEGMENTATIONID
open RECORDSOURCECURSOR;
fetch next from RECORDSOURCECURSOR into @GIFTIDSETTABLE, @REVENUESEGMENTTABLE;
while (@@FETCH_STATUS = 0)
begin
-- build the SQL to count all revenue in the normal gifts table that is not matched to a segment in the REVENUESEGMENT table...
set @SQL = 'select' + char(13) +
' @INDIRECTRESPONDERS = count(distinct([DONORID])),' + char(13) +
' @INDIRECTRESPONSES = count([ID]),' + char(13) +
' @INDIRECTGIFTAMOUNT = isnull(sum([AMOUNT]), 0),' + char(13) +
' @INDIRECTORGANIZATIONGIFTAMOUNT = isnull(sum([ORGANIZATIONAMOUNT]), 0)' + char(13) +
'from dbo.' + @GIFTIDSETTABLE + ' as [GIFTIDSET]' + char(13) +
'where not exists(select * from dbo.[' + @REVENUESEGMENTTABLE + '] where [REVENUEID] = [GIFTIDSET].[ID] and [SEGMENTID] in (select [ID] from dbo.[MKTSEGMENTATIONSEGMENT] where [SEGMENTATIONID] = @SEGMENTATIONID));';
-- execute the SQL to get the counts/amounts for this record source
exec sp_executesql @SQL, @PARAMDEF,
@SEGMENTATIONID = @SEGMENTATIONID,
@INDIRECTRESPONDERS = @INDIRECTRESPONDERS output,
@INDIRECTRESPONSES = @INDIRECTRESPONSES output,
@INDIRECTGIFTAMOUNT = @INDIRECTGIFTAMOUNT output,
@INDIRECTORGANIZATIONGIFTAMOUNT = @INDIRECTORGANIZATIONGIFTAMOUNT output;
-- keep the running totals for all record sources
set @TOTALINDIRECTRESPONDERS += @INDIRECTRESPONDERS;
set @TOTALINDIRECTRESPONSES += @INDIRECTRESPONSES;
set @TOTALINDIRECTGIFTAMOUNT += @INDIRECTGIFTAMOUNT;
set @TOTALINDIRECTORGANIZATIONGIFTAMOUNT += @INDIRECTORGANIZATIONGIFTAMOUNT;
fetch next from RECORDSOURCECURSOR into @GIFTIDSETTABLE, @REVENUESEGMENTTABLE;
end;
close RECORDSOURCECURSOR;
deallocate RECORDSOURCECURSOR;
-- return the values
select
@TOTALINDIRECTRESPONDERS as [INDIRECTRESPONDERS],
@TOTALINDIRECTRESPONSES as [INDIRECTRESPONSES],
@TOTALINDIRECTGIFTAMOUNT as [INDIRECTTOTALGIFTAMOUNT],
(case when @TOTALINDIRECTRESPONSES > 0 then @TOTALINDIRECTGIFTAMOUNT / cast(@TOTALINDIRECTRESPONSES as money) else 0 end) as [INDIRECTAVERAGEGIFTAMOUNT],
(case when @TOTALINDIRECTRESPONSES > 0 then @TOTALINDIRECTORGANIZATIONGIFTAMOUNT / cast(@TOTALINDIRECTRESPONSES as money) else 0 end) as [ORGANIZATIONINDIRECTAVERAGEGIFTAMOUNT],
@TOTALINDIRECTORGANIZATIONGIFTAMOUNT as [ORGANIZATIONTOTALINDIRECTGIFTAMOUNT];
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;