Giving Snapshot by Quarters

This script can be added to the blue Toolbar and will be available on Search Builder results, an Organization, or a Tag. If you run it from Special Content, the report will look at the last Search Builder results and runs the script for those individuals.

It displays giving totals by quarters for a three-year period for the designated fund. By default, the three-year period ends with the current year, but you can change the script so that the period ends with the year of your choice.

Important

The report shows giving for donor only. It does not combine family or couple giving. A use case for the report might be to show donor totals for an age range.

The recommended name is GivingSnapshotByQuarters

Use the code below to create the SQL Script.

See How to create a SQL Script.

The top declaration statements are where you can set/change the parameters for the report. Currently, the report is set for Fund ID = 1 and for the three-year report period to end with the current year. To change the Fund ID, enter the desired ID in line 4.

To change the report’s three-year period to end with a year other than the current year, add two dashes -- to the beginning of line 7 to comment it out and remove the two dashes at the beginning of line 9. Then enter the ending year within the single quote marks after the = sign. If the ending year is changed, the column headers for the yearly totals should also be changed. This can be on lines 173, 178, and 183 of the script.

SQL Code for the Report

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
--Roles=Finance

-- Enter the desired fund ID on the next line after the equal sign
DECLARE @fundId INT = 1
DECLARE @today DATE = CONVERT(DATE,GETDATE())
-- The next line sets the final of the three years to the current year
DECLARE @year3 INT = DATEPART(year,GETDATE())
-- To manually set the third (last) year, enter it on the next line after the equal sign (e.g., = '2019')
--DECLARE @year3 DATE = '2019'
DECLARE @year2 INT = @year3 - 1
DECLARE @year1 INT = @year3 - 2
DECLARE @fd NVARCHAR(10) = '1-1-' + CONVERT(NVARCHAR(4),@year1)

;WITH gifts AS (
SELECT datepart(month,Date) as Month
,datepart(quarter,Date) as Quarter
,datepart(year,Date) as Year
,c.PeopleId
,c.FundId
,c.Amount
FROM dbo.Contributions2(@fd,@today, 0, 0, NULL, 1, NULL) c
)
,y1q1 AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year1
    AND Quarter = 1
    GROUP BY PeopleId
)
,y1q2 AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year1
    AND Quarter = 2
    GROUP BY PeopleId
)
,y1q3 AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year1
    AND Quarter = 3
    GROUP BY PeopleId
)
,y1q4 AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year1
    AND Quarter = 4
    GROUP BY PeopleId
)
,y1all AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year1
    GROUP BY PeopleId
)
,y2q1 AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year2
    AND Quarter = 1
    GROUP BY PeopleId
)
,y2q2 AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year2
    AND Quarter = 2
    GROUP BY PeopleId
)
,y2q3 AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year2
    AND Quarter = 3
    GROUP BY PeopleId
)
,y2q4 AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year2
    AND Quarter = 4
    GROUP BY PeopleId
)
,y2all AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year2
    GROUP BY PeopleId
)
,y3q1 AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year3
    AND Quarter = 1
    GROUP BY PeopleId
)
,y3q2 AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year3
    AND Quarter = 2
    GROUP BY PeopleId
)
,y3q3 AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year3
    AND Quarter = 3
    GROUP BY PeopleId
)
,y3q4 AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year3
    AND Quarter = 4
    GROUP BY PeopleId
)
,y3all AS (
    SELECT PeopleId
    , SUM(Amount) as Amount
    FROM gifts
    WHERE FundId = @fundId
    AND Year = @year3
    GROUP BY PeopleId
)
,recurgivers AS (
SELECT amt.PeopleId
    FROM dbo.RecurringAmounts amt
    JOIN dbo.ManagedGiving schedule
    ON amt.peopleid = schedule.peopleid
    WHERE amt.fundid = @fundId
    AND amt.Amt > 0
)
SELECT
    p.PeopleId,
    p.Name2 as Name,
    mem.Description AS "Member Status",
    c.Description AS "Campus",
    CASE WHEN recur.PeopleId IS NOT NULL THEN 'True' ELSE '' END AS "Has Recurring",
    y1q1.Amount AS "Y1Q1",
    y1q2.Amount AS "Y1Q2",
    y1q3.Amount AS "Y1Q3",
    y1q4.Amount AS "Y1Q4",
    y1all.Amount AS "2YO TOTAL",
    y2q1.Amount AS "Y2Q1",
    y2q2.Amount AS "Y2Q2",
    y2q3.Amount AS "Y2Q3",
    y2q4.Amount AS "Y2Q4",
    y2all.Amount AS "LAST YEAR TOTAL",
    y3q1.Amount AS "Y3Q1",
    y3q2.Amount AS "Y3Q2",
    y3q3.Amount AS "Y3Q3",
    y3q4.Amount AS "Y3Q4",
    y3all.Amount AS "CURRENT YEAR TOTAL"
FROM dbo.People p
LEFT JOIN lookup.Campus c on p.CampusId = c.Id
JOIN lookup.MemberStatus mem on p.MemberStatusId = mem.Id
LEFT JOIN y1q1 ON p.PeopleId = y1q1.PeopleId
LEFT JOIN y1q2 ON p.PeopleId = y1q2.PeopleId
LEFT JOIN y1q3 ON p.PeopleId = y1q3.PeopleId
LEFT JOIN y1q4 ON p.PeopleId = y1q4.PeopleId
LEFT JOIN y1all ON p.PeopleId = y1all.PeopleId
LEFT JOIN y2q1 ON p.PeopleId = y2q1.PeopleId
LEFT JOIN y2q2 ON p.PeopleId = y2q2.PeopleId
LEFT JOIN y2q3 ON p.PeopleId = y2q3.PeopleId
LEFT JOIN y2q4 ON p.PeopleId = y2q4.PeopleId
LEFT JOIN y2all ON p.PeopleId = y2all.PeopleId
LEFT JOIN y3q1 ON p.PeopleId = y3q1.PeopleId
LEFT JOIN y3q2 ON p.PeopleId = y3q2.PeopleId
LEFT JOIN y3q3 ON p.PeopleId = y3q3.PeopleId
LEFT JOIN y3q4 ON p.PeopleId = y3q4.PeopleId
LEFT JOIN y3all ON p.PeopleId = y3all.PeopleId
LEFT JOIN recurgivers recur ON p.PeopleId = recur.PeopleId
JOIN dbo.TagPerson tp ON tp.PeopleId = p.PeopleId AND tp.Id = @qtagid
ORDER BY p.PeopleId


Latest Update 07/06/2020

Added this article.

© 2020 TouchPoint Software, LLC.  All rights reserved.