USP_KPI_MARKETING_MAILING_RESPONSES_INTERNAL
Internal SP used to calculate a value for the Marketing Effort Number of Responses KPI.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ASOFDATE | datetime | IN | |
@SEGMENTATIONID | uniqueidentifier | IN | |
@OUTPUTFORMAT | tinyint | IN | |
@VALUE | int | INOUT |
Definition
Copy
CREATE procedure dbo.[USP_KPI_MARKETING_MAILING_RESPONSES_INTERNAL]
(
@ASOFDATE datetime,
@SEGMENTATIONID uniqueidentifier = null,
@OUTPUTFORMAT tinyint,
@VALUE int = 0 output
)
as
set nocount on;
declare @DATEREFRESHED datetime;
declare @MAILINGID uniqueidentifier;
declare @RESPONDERS int;
declare @RESPONSES int;
declare @RESPONSECOUNTS table
(
[OFFERS] int,
[RESPONDERS] int,
[RESPONSES] int,
[TOTALGIFTAMOUNT] money,
[RESPONSERATE] decimal(19,4),
[TOTALORGANIZATIONGIFTAMOUNT] money,
[FIRSTRESPONSEDATE] datetime
);
set @RESPONDERS = 0;
set @RESPONSES = 0;
declare MAILINGSCURSOR cursor local fast_forward for
select
[MKTSEGMENTATION].[ID],
cast(isnull([MKTSEGMENTATIONREFRESHPROCESS].[DATEREFRESHED], [MKTSEGMENTATION].[ACTIVATEDATE]) as date)
from dbo.[MKTSEGMENTATION]
/*#IDSETEXTENSION*/
inner join dbo.[MKTSEGMENTATIONREFRESHPROCESS] on [MKTSEGMENTATIONREFRESHPROCESS].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
where (@SEGMENTATIONID is null or @SEGMENTATIONID = [MKTSEGMENTATION].[ID]);
open MAILINGSCURSOR;
fetch next from MAILINGSCURSOR into @MAILINGID, @DATEREFRESHED;
while (@@FETCH_STATUS = 0)
begin
/* If the "As of date" is the same day or after the date the mailing was last refreshed, then grab */
/* the value from the mailing cache, otherwise perform the calculation using the "As of date". */
if @ASOFDATE >= @DATEREFRESHED
select
@RESPONDERS = @RESPONDERS + [RESPONDERS],
@RESPONSES = @RESPONSES + [RESPONSES]
from dbo.[MKTSEGMENTATIONACTIVE]
where [ID] = @MAILINGID;
else
begin
delete from @RESPONSECOUNTS;
insert into @RESPONSECOUNTS
exec dbo.[USP_MKTSEGMENTATION_GETRESPONSECOUNTS] @MAILINGID, @ASOFDATE;
select
@RESPONDERS = @RESPONDERS + [RESPONDERS],
@RESPONSES = @RESPONSES + [RESPONSES]
from @RESPONSECOUNTS;
end
fetch next from MAILINGSCURSOR into @MAILINGID, @DATEREFRESHED;
end
close MAILINGSCURSOR;
deallocate MAILINGSCURSOR;
if @OUTPUTFORMAT = 2
set @VALUE = @RESPONDERS;
else
set @VALUE = @RESPONSES;