USP_REPORT_FEPBENCHMARKINGCOMPARISON

Parameters

Parameter Parameter Type Mode Description
@YEAR UDT_YEAR IN
@SUBSECTORCODE tinyint IN
@SITEID uniqueidentifier IN

Definition

Copy

create procedure dbo.USP_REPORT_FEPBENCHMARKINGCOMPARISON
(
    @YEAR dbo.UDT_YEAR,
    @SUBSECTORCODE tinyint,
    @SITEID uniqueidentifier = null
)
with execute as owner
as    
    declare @TYPE tinyint = 0;        -- Include both organizations and individuals

    declare @PERIOD1STARTDATE datetime = '01/01/' + cast(@YEAR - 1 as nvarchar(10));
    declare @PERIOD1ENDDATE datetime = '12/31/' + cast(@YEAR - 1 as nvarchar(10));
    declare @PERIOD2STARTDATE datetime = '01/01/' + cast(@YEAR as nvarchar(10));
    declare @PERIOD2ENDDATE datetime = '12/31/' + cast(@YEAR as nvarchar(10));

    declare @TEMP table (SEQUENCE integer, CATEGORY nvarchar(50), ORG_NUMDONORS bigint DEFAULT 0, ORG_AMOUNT money DEFAULT 0, FEP_NUMDONORS bigint DEFAULT 0, FEP_AMOUNT money DEFAULT 0, VARIANCE_NUMDONORS bigint DEFAULT 0, VARIANCE_AMOUNT money DEFAULT 0)

    insert into @TEMP (SEQUENCE, CATEGORY, ORG_NUMDONORS, ORG_AMOUNT)
        select
            SEQUENCE,
            CATEGORY,
            case CATEGORY
                when 'Lapsed new' then PERIOD1NUMDONORS
                when 'Lapsed repeat' then PERIOD1NUMDONORS
                else PERIOD2NUMDONORS
            end as ORG_NUMDONORS,
            case CATEGORY
                when 'Upgraded' then PERIOD2AMOUNT - PERIOD1AMOUNT
                when 'Downgraded' then PERIOD2AMOUNT - PERIOD1AMOUNT
                when 'Lapsed new' then -1 * PERIOD1AMOUNT
                when 'Lapsed repeat' then -1 * PERIOD1AMOUNT
                else PERIOD2AMOUNT
            end as ORG_AMOUNT
        from dbo.UFN_FEPSUBMITPROCESS_GETDATA(@TYPE, @PERIOD1STARTDATE,    @PERIOD1ENDDATE, @PERIOD2STARTDATE,    @PERIOD2ENDDATE, @SITEID)
        where CATEGORY <> 'Total';

    -- Retrieve FEP Data and merge with org data

    declare @FEP_NUMRECORDS as integer;
    declare @ALPHABET as nvarchar(26) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

    select
        @FEP_NUMRECORDS = count(*)    
    from dbo.FEPDATA
    where SURVEYYEAR = @YEAR
        and (
            @SUBSECTORCODE = 0
            or (SUBSECTOR = substring(@ALPHABET, @SUBSECTORCODE, 1))
        );

    if @FEP_NUMRECORDS > 0
        begin            
            merge @TEMP as target
            using (
                select
                    1 as SEQUENCE,
                    'New' as CATEGORY,
                    sum(coalesce(NUMBER_NEW_2, 0)) / @FEP_NUMRECORDS as NUMDONORS,
                    sum(coalesce(AMOUNT_NEW_2, 0)) / @FEP_NUMRECORDS as AMOUNT
                from dbo.FEPDATA
                where SURVEYYEAR = @YEAR
                    and (
                        @SUBSECTORCODE = 0
                        or (SUBSECTOR = substring(@ALPHABET, @SUBSECTORCODE, 1))
                    )

                union all

                select
                    2 as SEQUENCE,
                    'Recaptured' as CATEGORY,
                    sum(coalesce(NUMBER_RECAPTURED_2, 0)) / @FEP_NUMRECORDS as NUMDONORS,
                    sum(coalesce(AMOUNT_RECAPTURED_2, 0)) / @FEP_NUMRECORDS as AMOUNT
                from dbo.FEPDATA
                where SURVEYYEAR = @YEAR
                    and (
                        @SUBSECTORCODE = 0
                        or (SUBSECTOR = substring(@ALPHABET, @SUBSECTORCODE, 1))
                    )

                union all

                select
                    3 as SEQUENCE,
                    'Upgraded' as CATEGORY,
                    sum(coalesce(NUMBER_UPGRADED_2, 0)) / @FEP_NUMRECORDS as NUMDONORS,
                    sum(coalesce(AMOUNT_UPGRADED_2, 0) - coalesce(AMOUNT_UPGRADED_1, 0)) / @FEP_NUMRECORDS as AMOUNT
                from dbo.FEPDATA
                where SURVEYYEAR = @YEAR
                    and (
                        @SUBSECTORCODE = 0
                        or (SUBSECTOR = substring(@ALPHABET, @SUBSECTORCODE, 1))
                    )

                union all

                select
                    4 as SEQUENCE,
                    'Same' as CATEGORY,
                    sum(coalesce(NUMBER_SAME_2, 0)) / @FEP_NUMRECORDS as NUMDONORS,
                    sum(coalesce(AMOUNT_SAME_2, 0)) / @FEP_NUMRECORDS as AMOUNT
                from dbo.FEPDATA
                where SURVEYYEAR = @YEAR
                    and (
                        @SUBSECTORCODE = 0
                        or (SUBSECTOR = substring(@ALPHABET, @SUBSECTORCODE, 1))
                    )

                union all

                select
                    5 as SEQUENCE,
                    'Downgraded' as CATEGORY,
                    sum(coalesce(NUMBER_DOWNGRADED_2, 0)) / @FEP_NUMRECORDS as NUMDONORS,
                    sum(coalesce(AMOUNT_DOWNGRADED_2, 0) - coalesce(AMOUNT_DOWNGRADED_1, 0)) / @FEP_NUMRECORDS as AMOUNT
                from dbo.FEPDATA
                where SURVEYYEAR = @YEAR
                    and (
                        @SUBSECTORCODE = 0
                        or (SUBSECTOR = substring(@ALPHABET, @SUBSECTORCODE, 1))
                    )

                union all

                select
                    6 as SEQUENCE,
                    'Lapsed new' as CATEGORY,
                    sum(coalesce(NUMBER_LAPSED_NEW_1, 0)) / @FEP_NUMRECORDS as NUMDONORS,
                    -1 * (sum(coalesce(AMOUNT_LAPSED_NEW_1, 0)) / @FEP_NUMRECORDS) as AMOUNT
                from dbo.FEPDATA
                where SURVEYYEAR = @YEAR
                    and (
                        @SUBSECTORCODE = 0
                        or (SUBSECTOR = substring(@ALPHABET, @SUBSECTORCODE, 1))
                    )

                union all

                select
                    7 as SEQUENCE,
                    'Lapsed repeat' as CATEGORY,
                    sum(coalesce(NUMBER_LAPSED_OTHER_1, 0)) / @FEP_NUMRECORDS as NUMDONORS,
                    -1 * (sum(coalesce(AMOUNT_LAPSED_OTHER_1, 0)) / @FEP_NUMRECORDS) as AMOUNT
                from dbo.FEPDATA
                where SURVEYYEAR = @YEAR
                    and (
                        @SUBSECTORCODE = 0
                        or (SUBSECTOR = substring(@ALPHABET, @SUBSECTORCODE, 1))
                    )                
            ) as source (SEQUENCE, CATEGORY, NUMDONORS, AMOUNT)
                on target.CATEGORY = source.CATEGORY
            when matched then
                update set
                    FEP_NUMDONORS = source.NUMDONORS,
                    FEP_AMOUNT = source.AMOUNT,
                    VARIANCE_NUMDONORS = target.ORG_NUMDONORS - source.NUMDONORS,
                    VARIANCE_AMOUNT = target.ORG_AMOUNT - source.AMOUNT
            when not matched then
                insert (SEQUENCE, CATEGORY, FEP_NUMDONORS, FEP_AMOUNT, VARIANCE_NUMDONORS, VARIANCE_AMOUNT)
                values (source.SEQUENCE, source.CATEGORY, source.NUMDONORS, source.AMOUNT, source.NUMDONORS * -1, source.AMOUNT * -1);


        end

    select
        SEQUENCE,
        CATEGORY,
        ORG_NUMDONORS,
        ORG_AMOUNT,
        FEP_NUMDONORS,
        FEP_AMOUNT,
        VARIANCE_NUMDONORS,
        VARIANCE_AMOUNT
    from @TEMP
    order by SEQUENCE asc;