UFN_FAFNFGCAMPAIGN_GETRETENTION
Return
Return Type |
---|
table |
Definition
Copy
CREATE function dbo.UFN_FAFNFGCAMPAIGN_GETRETENTION()
returns table
as return
select NFG.ID
,NFGRETAINED.CNT_PREVIOUSGROUP, NFGRETAINED.TOTALGROUPRETAINED, NFGRETAINED.GROUPRETENTIONRATE
,NFGPARTRETAINED.CNT_PREVIOUSPARTICIPANT, NFGPARTRETAINED.TOTALPARTICIPANTRETAINED, NFGPARTRETAINED.PARTICIPANTRETENTIONRATE
from dbo.FAFNFGCAMPAIGN NFG (nolock)
left join (
select FC.ID,
count(PREVIOUS.TEAMCONSTITUENTID) as TOTALGROUPRETAINED, -- total local groups return to this NFG
NFGS.TOTALGROUP as CNT_PREVIOUSGROUP, -- total local groups this NFG has in previous campaign
case NFGS.TOTALGROUP
when 0 then 0
else cast(convert(decimal(5,2),count(PREVIOUS.TEAMCONSTITUENTID)+sum(FSGI.TOTALGROUPSRETAINED)) / convert(decimal(5,2),NFGS.TOTALGROUP) as decimal(5,2)) end as [GROUPRETENTIONRATE]
from dbo.FAFPROGRAM EC (nolock)
join dbo.FAFNFGCAMPAIGN FC (nolock) on EC.ID = FC.CAMPAIGNID and EC.ISACTIVE = 1
join dbo.FAFNFGCAMPAIGNLEVEL FCL (nolock) on FCL.NFGCAMPAIGNID = FC.ID
join dbo.TEAMEXTENSION TX (nolock) on TX.NFGCAMPAIGNLEVELID = FCL.ID
join dbo.EVENTEXTENSION EX (nolock) on EX.EVENTID = TX.EVENTID
left join dbo.FAFGROUPSUMMARYINFORMATION FSGI (nolock) on FSGI.ID = TX.TEAMFUNDRAISINGTEAMID -- get total child group retained for each group link to NFG
left join (
select
PTX.TEAMCONSTITUENTID, FCL.NFGCAMPAIGNID, FC.GROUPCONSTITUENTID, EX.FAFPROGRAMID as EVENTCAMPAIGNID
from dbo.FAFNFGCAMPAIGN FC (nolock)
join dbo.FAFNFGCAMPAIGNLEVEL FCL (nolock) on FCL.NFGCAMPAIGNID = FC.ID
join dbo.TEAMEXTENSION PTX (nolock) on PTX.NFGCAMPAIGNLEVELID = FCL.ID
join dbo.EVENTEXTENSION EX (nolock) on EX.EVENTID = PTX.EVENTID
) PREVIOUS on TX.TEAMCONSTITUENTID = [PREVIOUS].TEAMCONSTITUENTID
and FC.GROUPCONSTITUENTID = [PREVIOUS].GROUPCONSTITUENTID
and EC.PREVIOUSCAMPAIGNID = [PREVIOUS].EVENTCAMPAIGNID
left join dbo.FAFNFGLEVELSUMMARY NFGS (nolock) on NFGS.NFGID =[PREVIOUS].NFGCAMPAIGNID and NFGS.ISROOT = 1
where PREVIOUS.TEAMCONSTITUENTID is not null
group by FC.ID, FC.name, NFGS.TOTALGROUP
) NFGRETAINED on NFGRETAINED.ID = NFG.ID
left join (
select FC.ID,
count(PREVIOUS.CONSTITUENTID) AS TOTALPARTICIPANTRETAINED,
max(NFGS.TOTALPARTICIPANT) AS CNT_PREVIOUSPARTICIPANT,
case NFGS.TOTALPARTICIPANT
when 0 then 0
else cast(convert(decimal(5,2),count(PREVIOUS.CONSTITUENTID)) / convert(decimal(5,2),NFGS.TOTALPARTICIPANT) as decimal(5,2)) end as [PARTICIPANTRETENTIONRATE]
from dbo.FAFPROGRAM EC (nolock)
join dbo.FAFNFGCAMPAIGN FC (nolock) on EC.ID = FC.CAMPAIGNID and EC.ISACTIVE = 1
join dbo.FAFNFGCAMPAIGNLEVEL FCL (nolock) on FCL.NFGCAMPAIGNID = FC.ID
join dbo.TEAMEXTENSION TX (nolock) on TX.NFGCAMPAIGNLEVELID = FCL.ID
join dbo.EVENTEXTENSION EX (nolock) on EX.EVENTID = TX.EVENTID
join dbo.TEAMFUNDRAISINGTEAMMEMBER TFTM (nolock) on TFTM.TEAMFUNDRAISINGTEAMID = TX.TEAMFUNDRAISINGTEAMID
join dbo.TEAMFUNDRAISER TF (nolock) on TF.ID = TFTM.TEAMFUNDRAISERID
left join (
select FC.ID, FC.GROUPCONSTITUENTID, FC.CAMPAIGNID,TF.CONSTITUENTID
from dbo.FAFNFGCAMPAIGN FC (nolock)
join dbo.FAFNFGCAMPAIGNLEVEL FCL (nolock) on FCL.NFGCAMPAIGNID = FC.ID
join dbo.TEAMEXTENSION TX (nolock) on TX.NFGCAMPAIGNLEVELID = FCL.ID
join dbo.TEAMFUNDRAISINGTEAMMEMBER TFTM (nolock) on TFTM.TEAMFUNDRAISINGTEAMID = TX.TEAMFUNDRAISINGTEAMID
join dbo.TEAMFUNDRAISER TF (nolock) on TF.ID = TFTM.TEAMFUNDRAISERID
) PREVIOUS on FC.GROUPCONSTITUENTID = [PREVIOUS].GROUPCONSTITUENTID
and EC.PREVIOUSCAMPAIGNID = [PREVIOUS].CAMPAIGNID
and TF.CONSTITUENTID = PREVIOUS.CONSTITUENTID
left join dbo.FAFNFGLEVELSUMMARY NFGS (nolock) on NFGS.NFGID =[PREVIOUS].ID and NFGS.ISROOT = 1
where PREVIOUS.CONSTITUENTID is not null
group by FC.ID, FC.name, NFGS.TOTALPARTICIPANT
) NFGPARTRETAINED on NFG.ID = NFGPARTRETAINED.ID
where GROUPRETENTIONRATE is not null or PARTICIPANTRETENTIONRATE is not null