USP_KPI_MARKETING_SEGMENT_TOTALREVENUE_INTERNAL
Internal SP used to calculate a value for the Segment Total Revenue KPI.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ASOFDATE | datetime | IN | |
@SEGMENTID | uniqueidentifier | IN | |
@VALUE | money | INOUT |
Definition
Copy
CREATE procedure dbo.[USP_KPI_MARKETING_SEGMENT_TOTALREVENUE_INTERNAL]
(
@ASOFDATE datetime,
@SEGMENTID uniqueidentifier = null,
@VALUE money = 0 output
)
as
set nocount on;
declare @MAILINGSEGMENTID uniqueidentifier;
declare @MAILINGTESTSEGMENTID uniqueidentifier;
declare @MAILINGDATEREFRESHED date;
declare @RESPONSECOUNTS table([OFFERS] int, [RESPONDERS] int, [RESPONSES] int, [TOTALGIFTAMOUNT] money, [AVERAGEGIFTAMOUNT] money, [ORGANIZATIONTOTALGIFTAMOUNT] money, [ORGANIZATIONAVERAGEGIFTAMOUNT] money);
set @VALUE = 0;
declare SEGMENTCURSOR cursor local fast_forward for
select
[MKTSEGMENTATIONSEGMENT].[ID],
null,
cast(isnull([MKTSEGMENTATIONREFRESHPROCESS].[DATEREFRESHED], [MKTSEGMENTATION].[ACTIVATEDATE]) as date)
from dbo.[MKTSEGMENT]
/*#IDSETEXTENSION*/
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTID] = [MKTSEGMENT].[ID]
inner join dbo.[MKTSEGMENTATIONREFRESHPROCESS] on [MKTSEGMENTATIONREFRESHPROCESS].[SEGMENTATIONID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
where (@SEGMENTID is null or @SEGMENTID = [MKTSEGMENT].[ID])
union
select
[MKTSEGMENTATIONSEGMENT].[ID],
[MKTSEGMENTATIONTESTSEGMENT].[ID],
cast(isnull([MKTSEGMENTATIONREFRESHPROCESS].[DATEREFRESHED], [MKTSEGMENTATION].[ACTIVATEDATE]) as date)
from dbo.[MKTSEGMENT]
/*#IDSETEXTENSION*/
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTID] = [MKTSEGMENT].[ID]
inner join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTSEGMENTATIONREFRESHPROCESS] on [MKTSEGMENTATIONREFRESHPROCESS].[SEGMENTATIONID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
where (@SEGMENTID is null or @SEGMENTID = [MKTSEGMENT].[ID]);
open SEGMENTCURSOR;
fetch next from SEGMENTCURSOR into @MAILINGSEGMENTID, @MAILINGTESTSEGMENTID, @MAILINGDATEREFRESHED;
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 >= @MAILINGDATEREFRESHED
select
@VALUE = @VALUE + [ORGANIZATIONTOTALGIFTAMOUNT]
from dbo.[MKTSEGMENTATIONSEGMENTACTIVE]
where [SEGMENTID] = @MAILINGSEGMENTID
and ((@MAILINGTESTSEGMENTID is null and [TESTSEGMENTID] is null) or (@MAILINGTESTSEGMENTID is not null and [TESTSEGMENTID] = @MAILINGTESTSEGMENTID));
else
begin
delete from @RESPONSECOUNTS;
insert into @RESPONSECOUNTS
exec dbo.[USP_MKTSEGMENTATIONSEGMENT_GETRESPONSECOUNTS] @MAILINGSEGMENTID, @MAILINGTESTSEGMENTID, @ASOFDATE;
select
@VALUE = @VALUE + [ORGANIZATIONTOTALGIFTAMOUNT]
from @RESPONSECOUNTS;
end
fetch next from SEGMENTCURSOR into @MAILINGSEGMENTID, @MAILINGTESTSEGMENTID, @MAILINGDATEREFRESHED;
end
close SEGMENTCURSOR;
deallocate SEGMENTCURSOR;