USP_DATALIST_SEGMENTPACKAGEPERFORMANCE

Shows the performance of packages on a given list of segments.

Parameters

Parameter Parameter Type Mode Description
@SELECTIONID uniqueidentifier IN Segment selection
@STARTDATE datetime IN Mailed from date
@ENDDATE datetime IN Mailed to date
@GROUPBY int IN Group by
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@SECURITYFEATUREID uniqueidentifier IN Input parameter indicating the ID of the feature to use for site security checking.
@SECURITYFEATURETYPE tinyint IN Input parameter indicating the type of the feature to use for site security checking.
@CURRENCYCODE tinyint IN Currency

Definition

Copy


CREATE procedure dbo.[USP_DATALIST_SEGMENTPACKAGEPERFORMANCE]
(
  @SELECTIONID uniqueidentifier = null,
  @STARTDATE datetime = null,
  @ENDDATE datetime = null,
  @GROUPBY integer = 0,
  @CURRENTAPPUSERID uniqueidentifier = null,
  @SECURITYFEATUREID uniqueidentifier = null,
  @SECURITYFEATURETYPE tinyint = null,
  @CURRENCYCODE tinyint = 1 /* 0 = base, 1 = organization */
)
as
  set nocount on;

  /* Set currency symbols using the organization currency */
  /* Note, for now this report will only display in the organization currency.  Since this report
     sums efforts that could have different base currencies, it was decided the amount of processing it would take to 
     convert different base currencies on the fly is too much and a different approach would be needed. */
  declare @CURRENCYISOCURRENCYCODE nvarchar(6);
  declare @CURRENCYDECIMALDIGITS tinyint;
  declare @CURRENCYSYMBOL nvarchar(10);
  declare @CURRENCYSYMBOLDISPLAYSETTINGCODE tinyint;

  select 
    @CURRENCYISOCURRENCYCODE = [ISO4217],
    @CURRENCYDECIMALDIGITS = [DECIMALDIGITS],
    @CURRENCYSYMBOL = [CURRENCYSYMBOL],
    @CURRENCYSYMBOLDISPLAYSETTINGCODE = [SYMBOLDISPLAYSETTINGCODE]
  from dbo.[CURRENCY]
  where [ID] = dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]();

  declare @SEGMENTCURSOR cursor;
  declare @SQL nvarchar(max);

  if @ENDDATE is null
    set @ENDDATE = getdate();
  if @STARTDATE is null
    set @STARTDATE = dateadd(yy,-1,@ENDDATE);

  if @SELECTIONID is null
  begin
    set @SQL = 'set @SEGMENTCURSOR = cursor local fast_forward for select [ID] from dbo.[MKTSEGMENT];';
    set @SQL = @SQL + char(13) + 'open @SEGMENTCURSOR;';  
  end
  else
  begin
    set @SQL = 'set @SEGMENTCURSOR = cursor local fast_forward for select [ID] from dbo.' + dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME](@SELECTIONID) + ';';
    set @SQL = @SQL + char(13) + 'open @SEGMENTCURSOR;';  
  end;
  exec sp_executesql @SQL, N'@SEGMENTCURSOR cursor output', @SEGMENTCURSOR = @SEGMENTCURSOR output

  declare @ALL table (
    [SELECTIONNAME] nvarchar(300),
    [SEGMENTID] uniqueidentifier,
    [SEGMENTNAME] nvarchar(100),
    [PACKAGEID] uniqueidentifier,
    [PACKAGENAME] nvarchar(100),
    [MAILINGID] uniqueidentifier,
    [MAILINGNAME] nvarchar(100),
    [QUANTITY] int,
    [TOTALCOST] money,
    [RESPONSES] int,
    [TOTALREVENUE] money,
    [COSTPERPIECE] money,
    [RESPONSERATE] decimal(19,4),  
    [AVGGIFT] money,
    [REVENUEPERPIECE] money
    );

  --To put the selection name on the report

  declare @SELECTIONNAME nvarchar(300);
  select @SELECTIONNAME = [NAME] from dbo.[IDSETREGISTER] where [ID] = @SELECTIONID;

  declare @SEGMENTID uniqueidentifier;
  fetch next from @SEGMENTCURSOR into @SEGMENTID;
  while (@@FETCH_STATUS = 0)
  begin

  insert into @ALL 
    select 
      @SELECTIONNAME,
      [SEGMENTID],
      [SEGMENTNAME],
      [PACKAGEID],
      [PACKAGENAME],
      [MAILINGID],
      [MAILINGNAME],  
      [QUANTITY] as [QUANTITY],
      [TOTALCOST] as [TOTALCOST],
      [RESPONSES] as [RESPONSES],
      [TOTALGIFTAMOUNT] as [TOTALREVENUE],
      cast((case when [QUANTITY] > 0 then [TOTALCOST] / [QUANTITY] else 0 end) as money) as [COSTPERPIECE],
      cast((case when [QUANTITY] > 0 then cast([RESPONSES] as decimal(19,4)) / cast([QUANTITY] as decimal(19,4)) else 0 end) as decimal(19,4)) as [RESPONSERATE],
      cast((case when [RESPONSES] > 0 then [TOTALGIFTAMOUNT] / [RESPONSES] else 0 end) as money) as [AVGGIFT],
      cast((case when [QUANTITY] > 0 then [TOTALGIFTAMOUNT] / [QUANTITY] else 0 end) as money) as [REVENUEPERPIECE]
    from (
      select
        [MKTSEGMENT].[ID] as [SEGMENTID],
        [MKTSEGMENT].[NAME] as [SEGMENTNAME],
        [MKTSEGMENTATION].[ID] as [MAILINGID],
        [MKTSEGMENTATION].[NAME] as [MAILINGNAME],
        isnull([MKTTESTPACKAGE].[ID],[MKTPACKAGE].[ID]) as [PACKAGEID],
        isnull([MKTTESTPACKAGE].[NAME],[MKTPACKAGE].[NAME]) as [PACKAGENAME],
        sum([MKTSEGMENTATIONSEGMENTACTIVE].[QUANTITY]) as [QUANTITY],
        sum([MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONTOTALCOST]) as [TOTALCOST],
        sum([MKTSEGMENTATIONSEGMENTACTIVE].[RESPONSES]) as [RESPONSES],
        sum([MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONTOTALGIFTAMOUNT]) as [TOTALGIFTAMOUNT]
      from dbo.[MKTSEGMENT]
      inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
      inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
      inner join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on [MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
      inner join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
      left join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENTACTIVE].[TESTSEGMENTID]
      left join dbo.[MKTPACKAGE] as [MKTTESTPACKAGE] on [MKTTESTPACKAGE].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]
      where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[MKTSEGMENTATION].[SITEID] or (SITEID is null and [MKTSEGMENTATION].[SITEID] is null)))
      and [MKTSEGMENT].[ID] = @SEGMENTID
      and isnull([MKTSEGMENTATION].[MAILDATE], cast([MKTSEGMENTATION].[ACTIVATEDATE] as date)) between @STARTDATE and @ENDDATE
      group by 
        [MKTSEGMENT].[ID],
        [MKTSEGMENT].[NAME],
        [MKTSEGMENTATION].[ID],
        [MKTSEGMENTATION].[NAME],
        [MKTTESTPACKAGE].[ID],
        [MKTTESTPACKAGE].[NAME],
        [MKTPACKAGE].[ID],
        [MKTPACKAGE].[NAME]
      ) as [INNER];

  fetch next from @SEGMENTCURSOR into @SEGMENTID;
  end;

  close @SEGMENTCURSOR;
  deallocate @SEGMENTCURSOR;

  --if no result rows return parameters only

  if (select count(*) from @ALL) = 0
  begin
    insert into @ALL ([SELECTIONNAME]) values (@SELECTIONNAME);
  end

  --Display

  select 
    [SELECTIONNAME],
    [SEGMENTID],
    [SEGMENTNAME],
    [PACKAGEID],
    [PACKAGENAME],
    [MAILINGID],
    [MAILINGNAME],
    [QUANTITY],
    [TOTALCOST],
    [RESPONSES],
    [TOTALREVENUE],
    [COSTPERPIECE],
    [RESPONSERATE],  
    [AVGGIFT],
    [REVENUEPERPIECE],
    @CURRENCYISOCURRENCYCODE as [CURRENCYISOCURRENCYCODE],
    @CURRENCYDECIMALDIGITS as [CURRENCYDECIMALDIGITS],
    @CURRENCYSYMBOL as [CURRENCYSYMBOL],
    @CURRENCYSYMBOLDISPLAYSETTINGCODE as [CURRENCYSYMBOLDISPLAYSETTINGCODE]
  from @ALL
  order by [SELECTIONNAME], [SEGMENTNAME], [PACKAGENAME],[MAILINGNAME];

  return 0;