4 <drop>DROP FUNCTION IF EXISTS find_cmm(BIGINT)</drop>
6 CREATE OR REPLACE FUNCTION find_cmm(circ_id BIGINT)
7 RETURNS SETOF INTEGER[]
16 SELECT circ_lib FROM action.circulation WHERE id = circ_id INTO aou;
17 SELECT target_copy FROM action.circulation WHERE id = circ_id INTO ac;
18 SELECT usr FROM action.circulation WHERE id = circ_id INTO au;
20 FOR r IN SELECT buildrows FROM action.find_circ_matrix_matchpoint(aou,ac,au,FALSE)
30 <!-- sample reports entry
32 <name>name of report</name>
33 <iteration value='0' /> which version, the first version to run is 0, first backup is 1, then so on
34 <tag>money</tag> arbitrary tags, each should go in separate tag
35 <report_title>Migrated Billings</report_title> title used in the asciidoc output
36 <heading column='1'>Number of Billings.Migrated.Total</heading> period delimited
37 <query>SELECT COUNT(id),x_migrate::TEXT,SUM(amount) FROM money_billing_legacy GROUP BY 2;</query> query itself, will be replaced
38 <note>Arbitrary note that can be included in the entries.</note>
44 <name>circ_count</name>
46 <iteration>0</iteration>
47 <report_title>Open Circulations</report_title>
48 <heading>Circulation Status.Migrated.Count of Circs</heading>
49 <query>SELECT 'Closed Circulations', x_migrate::TEXT, COUNT(id) FROM action_circulation_legacy WHERE xact_finish IS NOT NULL GROUP BY 2 UNION ALL SELECT 'Open Circulations', x_migrate::TEXT, COUNT(id) FROM action_circulation_legacy WHERE xact_finish IS NULL GROUP BY 2</query>
53 <name>circ_count</name>
55 <iteration>1</iteration>
56 <report_title>Open Circulations</report_title>
57 <heading>Circulation Status.Count of Circs</heading>
58 <query>SELECT 'Closed Circulations', COUNT(id) FROM action_circulation WHERE xact_finish IS NOT NULL UNION ALL SELECT 'Open Circulations', COUNT(id) FROM action_circulation WHERE xact_finish IS NULL</query>
60 <!-- intent is to add a report by circulated and item status
62 <name>circ_count_by_item_status</name>
64 <iteration>0</iteration>
65 <report_title>Open Circulations</report_title>
66 <heading>Circulation Status.Migrated.Count of Circs</heading>
67 <query>SELECT 'Closed Circulations', x_migrate::TEXT, COUNT(id) FROM action_circulation_legacy WHERE xact_finish IS NOT NULL GROUP BY 2 UNION ALL SELECT 'Open Circulations', x_migrate::TEXT, COUNT(id) FROM action_circulation_legacy WHERE xact_finish IS NULL GROUP BY 2</query>
71 <name>circ_by_orgunit</name>
73 <iteration>0</iteration>
74 <report_title>Circulations by Org Unit</report_title>
75 <heading>Circulations Count.Migrated.Org Unit</heading>
76 <query>SELECT COUNT(acirc.id), acirc.x_migrate::TEXT, aou.name FROM action_circulation_legacy acirc JOIN actor.org_unit aou ON aou.id = acirc.circ_lib WHERE acirc.xact_finish IS NULL GROUP BY 2, 3</query>
80 <name>circ_by_orgunit</name>
82 <iteration>1</iteration>
83 <report_title>Circulations by Org Unit</report_title>
84 <heading>Circulations Count.Org Unit</heading>
85 <query>SELECT COUNT(acirc.id), aou.name FROM action_circulation acirc JOIN actor.org_unit aou ON aou.id = acirc.circ_lib WHERE acirc.xact_finish IS NULL GROUP BY 2</query>
89 <name>circs_by_duration</name>
91 <iteration>0</iteration>
92 <report_title>Migrated Circulations by Duration, Fine and Max Fine</report_title>
93 <heading>Count of Circs.Duration.Fine.Max Fine.Migrated</heading>
94 <query>SELECT COUNT(id), duration, recurring_fine, max_fine, x_migrate::TEXT FROM action_circulation_legacy WHERE x_migrate = TRUE GROUP BY 2, 3, 4, 5</query>
98 <name>circs_by_duration</name>
100 <iteration>1</iteration>
101 <report_title>Circulations by Duration, Fine and Max Fine</report_title>
102 <heading>Count of Circs.Duration.Fine.Max Fine</heading>
103 <query>SELECT COUNT(id), duration, recurring_fine, max_fine FROM action_circulation GROUP BY 2, 3, 4 ORDER BY 2, 3, 4</query>
107 <name>circs_by_usrgroup</name>
109 <iteration>0</iteration>
110 <report_title>Circulations by Rules and Patron Group</report_title>
111 <heading>Count of Circs.Duration.Fine.Max Fine.User Group.Matchpoints</heading>
112 <query>SELECT COUNT(acirc.id), acirc.duration, acirc.recurring_fine, acirc.max_fine, pgt.name, x.buildrows FROM action_circulation_legacy acirc JOIN actor.usr au ON au.id = acirc.usr JOIN permission.grp_tree pgt ON pgt.id = au.profile JOIN (SELECT acirc.id, ARRAY_TO_STRING(find_cmm(acirc.id),',') AS buildrows FROM action_circulation_legacy acirc WHERE acirc.x_migrate = TRUE) x ON x.id = acirc.id WHERE acirc.x_migrate = TRUE GROUP BY 2, 3, 4, 5, 6 ORDER BY 2, 3, 4, 5, 6</query>
116 <name>circs_by_usrgroup</name>
118 <iteration>1</iteration>
119 <report_title>Circulations by Rules and Patron Group</report_title>
120 <heading>Count of Circs.Duration.Fine.Max Fine.User Group.Matchpoints</heading>
121 <query>SELECT COUNT(acirc.id), acirc.duration, acirc.recurring_fine, acirc.max_fine, pgt.name, x.buildrows FROM action_circulation acirc JOIN actor.usr au ON au.id = acirc.usr JOIN permission.grp_tree pgt ON pgt.id = au.profile JOIN (SELECT acirc.id, ARRAY_TO_STRING(find_cmm(acirc.id),',') AS buildrows FROM action_circulation acirc) x ON x.id = acirc.id GROUP BY 2, 3, 4, 5, 6 ORDER BY 2, 3, 4, 5, 6</query>
125 <name>circs_by_circmod</name>
127 <iteration>0</iteration>
128 <report_title>Circulations by Rules and Circulation Modifier</report_title>
129 <heading>Count of Circs.Duration.Fine.Max Fine.Circulation Modifier.Matchpoints</heading>
130 <query>SELECT COUNT(acirc.id), acirc.duration, acirc.recurring_fine, acirc.max_fine, ac.circ_modifier, x.buildrows FROM action_circulation_legacy acirc JOIN asset.copy ac ON ac.id = acirc.target_copy JOIN (SELECT acirc.id, ARRAY_TO_STRING(find_cmm(acirc.id),',') AS buildrows FROM action_circulation_legacy acirc WHERE acirc.x_migrate = TRUE) x ON x.id = acirc.id WHERE acirc.x_migrate = TRUE GROUP BY 2, 3, 4, 5, 6 ORDER BY 2, 3, 4, 5, 6</query>
134 <name>circs_by_circmod</name>
136 <iteration>1</iteration>
137 <report_title>Circulations by Rules and Circulation Modifier</report_title>
138 <heading>Count of Circs.Duration.Fine.Max Fine.Circulation Modifier.Matchpoints</heading>
139 <query>SELECT COUNT(acirc.id), acirc.duration, acirc.recurring_fine, acirc.max_fine, ac.circ_modifier, x.buildrows FROM action_circulation acirc JOIN asset.copy ac ON ac.id = acirc.target_copy JOIN (SELECT acirc.id, ARRAY_TO_STRING(find_cmm(acirc.id),',') AS buildrows FROM action_circulation acirc) x ON x.id = acirc.id
140 GROUP BY 2, 3, 4, 5, 6 ORDER BY 2, 3, 4, 5, 6</query>
144 <name>circs_by_orgunit</name>
146 <iteration>0</iteration>
147 <report_title>Circulations by Rules and Org Unit</report_title>
148 <heading>Count of Circs.Duration.Fine.Max Fine.Library Branch</heading>
149 <query>SELECT COUNT(acirc.id), acirc.duration, acirc.recurring_fine, acirc.max_fine, aou.name FROM action_circulation_legacy acirc JOIN actor.org_unit aou ON aou.id = acirc.circ_lib WHERE acirc.x_migrate = TRUE GROUP BY 2, 3, 4, 5 ORDER BY 2, 3, 4, 5</query>
153 <name>circs_by_orgunit</name>
155 <iteration>1</iteration>
156 <report_title>Circulations by Rules and Org Unit</report_title>
157 <heading>Count of Circs.Duration.Fine.Max Fine.Library Branch</heading>
158 <query>SELECT COUNT(acirc.id), acirc.duration, acirc.recurring_fine, acirc.max_fine, aou.name FROM action_circulation acirc JOIN actor.org_unit aou ON aou.id = acirc.circ_lib GROUP BY 2, 3, 4, 5 ORDER BY 2, 3, 4, 5</query>
162 <name>non_cat_circs</name>
164 <iteration>0</iteration>
165 <report_title>Non-Cataloged Circulation</report_title>
166 <heading>Circulations Count.Migrated</heading>
167 <query>SELECT COUNT(id), x_migrate::TEXT FROM action_non_cataloged_circulation_legacy GROUP BY 2</query>
171 <name>non_cat_circs</name>
173 <iteration>1</iteration>
174 <report_title>Non-Cataloged Circulation</report_title>
175 <heading>Circulations Count</heading>
176 <query>SELECT COUNT(id) FROM action_non_cataloged_circulation</query>
180 <name>in_house</name>
182 <iteration>0</iteration>
183 <report_title>In House Use</report_title>
184 <heading>In House Use Records.Migrated</heading>
185 <query>SELECT COUNT(id), x_migrate::TEXT FROM action_in_house_use_legacy GROUP BY 2</query>
189 <name>in_house</name>
191 <iteration>1</iteration>
192 <report_title>In House Use</report_title>
193 <heading>In House Use Records</heading>
194 <query>SELECT COUNT(id) FROM action_in_house_use</query>
198 <name>circs_missing_rules</name>
200 <iteration>1</iteration>
201 <report_title>Circs Missing Rules</report_title>
202 <heading>Count.Field Missing</heading>
203 <query>SELECT COUNT(id), 'Duration Rule Value' FROM action_circulation WHERE duration IS NULL
204 UNION ALL SELECT COUNT(id), 'Recurring Fine Rule Value' FROM action_circulation WHERE recurring_fine IS NULL
205 UNION ALL SELECT COUNT(id), 'Max Fine Rule Value' FROM action_circulation WHERE max_fine IS NULL
206 UNION ALL SELECT COUNT(id), 'Duration Rule' FROM action_circulation WHERE duration_rule IS NULL
207 UNION ALL SELECT COUNT(id), 'Recurring Fine Rule' FROM action_circulation WHERE recurring_fine_rule IS NULL
208 UNION ALL SELECT COUNT(id), 'Max Fine Rule' FROM action_circulation WHERE max_fine_rule IS NULL
213 <name>circ_open_by_item_status</name>
215 <iteration>0</iteration>
216 <report_title>Open Circulation and Status of Linked Items</report_title>
217 <heading>Count.Status</heading>
218 <query>SELECT COUNT(acirc.id), ccs.name FROM action.circulation acirc JOIN asset.copy ac ON ac.id = acirc.target_copy JOIN config.copy_status ccs ON ccs.id = ac.status WHERE acirc.xact_finish IS NULL AND acirc.checkin_time IS NULL AND acirc.id IN (SELECT id FROM action_circulation) GROUP BY 2 ORDER BY 2</query>
221 <!-- HOLDS REPORTS -->
226 <iteration>0</iteration>
227 <report_title>Migrated Holds</report_title>
228 <heading>Hold Type.Hold Count.Migrated</heading>
229 <query>SELECT 'Closed Holds', COUNT(id), x_migrate::TEXT FROM action_hold_request_legacy WHERE (expire_time::TIMESTAMP < now()) OR cancel_time IS NOT NULL OR fulfillment_time IS NOT NULL GROUP BY 3 UNION ALL SELECT 'Open Holds', COUNT(id), x_migrate::TEXT FROM action_hold_request_legacy WHERE (expire_time IS NULL OR expire_time::TIMESTAMP > now()) AND cancel_time IS NULL AND fulfillment_time IS NULL GROUP BY 3</query>
233 <name>holds_bytype</name>
235 <iteration>0</iteration>
236 <report_title>Migrated Holds By Type</report_title>
237 <heading>Hold Type.Hold Count.Migrated</heading>
238 <query>SELECT hold_type as "Hold Type", COUNT(id), x_migrate::TEXT FROM action_hold_request_legacy GROUP BY 1, 3</query>
242 <name>transit_open_by_item_status</name>
244 <iteration>0</iteration>
245 <report_title>Transit Copy Records and Status of Linked Items</report_title>
246 <heading>Count.Status</heading>
247 <query>SELECT COUNT(atc.id), ccs.name FROM action.transit_copy atc JOIN asset.copy ac ON ac.id = atc.target_copy JOIN config.copy_status ccs ON ccs.id = ac.status WHERE atc.id IN (SELECT id FROM action_transit_copy) AND atc.dest_recv_time IS NULL GROUP BY 2 ORDER BY 2</query>
251 <name>transit_copies_by_status</name>
253 <iteration>0</iteration>
254 <report_title>Status of Items with Count of Open In Transits</report_title>
255 <heading>Count.Status.Count of Open Transits</heading>
256 <query>SELECT COUNT(ac.id), ccs.name, SUM(CASE WHEN atc.id IS NULL THEN 0 ELSE 1 END) FROM asset.copy ac JOIN config.copy_status ccs ON ccs.id = ac.status LEFT JOIN (SELECT * FROM action.transit_copy WHERE id IN (SELECT id FROM action_transit_copy) AND dest_recv_time IS NULL) atc ON atc.target_copy = ac.id WHERE ac.id IN (SELECT id from asset_copy) GROUP BY 2 ORDER BY 2</query>
260 <name>hold_copies_by_status</name>
262 <iteration>0</iteration>
263 <report_title>Captured Holds with Status of Items</report_title>
264 <heading>Count of Captured Hold.Status of Item</heading>
265 <query>SELECT COUNT(ahr.id), ccs.name FROM action.hold_request ahr JOIN asset.copy ac ON ac.id = ahr.current_copy JOIN config.copy_status ccs ON ccs.id = ac.status WHERE ahr.capture_time IS NOT NULL AND ahr.fulfillment_time IS NULL and ahr.cancel_time IS NULL AND ahr.id IN (SELECT id FROM action_hold_request) GROUP BY 2 ORDER By 2</query>
269 <name>hold_depth</name>
271 <iteration>0</iteration>
272 <report_title>Depth of Unfilled Holds</report_title>
273 <heading>Count.Depth</heading>
274 <query>SELECT COUNT(ahr.id), ahr.selection_depth FROM action.hold_request ahr WHERE ahr.id IN (SELECT id FROM action_hold_request) AND ahr.cancel_time IS NULL AND ahr.capture_time IS NULL AND ahr.fulfillment_time IS NULL GROUP BY 2 ORDER BY 2</query>
277 <!-- ASSET REPORTS -->
280 <name>asset_copy_count</name>
281 <report_title>Count of Copies by Library</report_title>
283 <iteration>0</iteration>
284 <heading>Copy Count.Library.Migrated</heading>
285 <query>SELECT COUNT(ac.id), aou.name, ac.x_migrate::TEXT FROM asset_copy_legacy ac JOIN actor.org_unit aou ON aou.id = ac.circ_lib GROUP BY 2, 3 ORDER BY 2, 3</query>
289 <name>asset_deleted_copies</name>
290 <report_title>Deleted Copies</report_title>
292 <iteration>0</iteration>
293 <heading>Copy Count.Deleted.Migrated</heading>
294 <query>SELECT COUNT(ac.id), ac.deleted::TEXT, ac.x_migrate::TEXT FROM asset_copy_legacy ac GROUP BY 2, 3</query>
298 <name>asset_copies_by_status</name>
299 <report_title>Copies by Status</report_title>
301 <iteration>0</iteration>
302 <heading>Copy Count.Status.Migrated</heading>
303 <query>SELECT COUNT(ac.id), cs.name, ac.x_migrate::TEXT FROM asset_copy_legacy ac JOIN config.copy_status cs ON cs.id = ac.status GROUP BY 2, 3 ORDER BY 2, 3</query>
307 <name>asset_circ_mod_copies_count</name>
308 <report_title>Copies by Circulation Modifier</report_title>
310 <iteration>0</iteration>
311 <heading>Copy Count.Circulation Modifier.Migrated</heading>
312 <query>SELECT COUNT(ac.id), ac.circ_modifier, ac.x_migrate::TEXT FROM asset_copy_legacy ac GROUP BY 2, 3 ORDER BY 2, 3</query>
316 <name>asset_copy_notes</name>
317 <report_title>Copy Notes</report_title>
319 <iteration>0</iteration>
320 <heading>Note Count.Public.Migrated</heading>
321 <query>SELECT COUNT(acnote.id), acnote.pub::TEXT, acnote.x_migrate::TEXT FROM asset_copy_note_legacy acnote GROUP BY 2, 3 ORDER BY 2, 3</query>
325 <name>asset_copy_notes</name>
326 <report_title>Copy Notes</report_title>
328 <iteration>1</iteration>
329 <heading>Note Count.Public</heading>
330 <query>SELECT COUNT(acnote.id), acnote.pub::TEXT FROM asset_copy_note acnote GROUP BY 2 ORDER BY 2</query>
334 <name>asset_vols_by_lib</name>
335 <report_title>Volumes by Library</report_title>
337 <iteration>0</iteration>
338 <heading>Volume Count.Library.Migrated</heading>
339 <query>SELECT COUNT(acn.id), aou.name, acn.x_migrate::TEXT FROM asset_call_number_legacy acn JOIN actor_org_unit_legacy aou ON aou.id = acn.owning_lib GROUP BY 2, 3 ORDER BY 2, 3</query>
343 <name>asset_vols_by_lib</name>
344 <report_title>Volumes by Library</report_title>
346 <iteration>1</iteration>
347 <heading>Volume Count.Library</heading>
348 <query>SELECT COUNT(acn.id), aou.name FROM asset_call_number acn JOIN actor.org_unit aou ON aou.id = acn.owning_lib GROUP BY 2 ORDER BY 2</query>
352 <name>asset_cops_by_loc</name>
353 <report_title>Copies by Location</report_title>
355 <iteration>0</iteration>
356 <heading>Copy Count.Library.Migrated</heading>
357 <query>SELECT COUNT(ac.id), acl.name, ac.x_migrate::TEXT FROM asset_copy_legacy ac JOIN asset.copy_location acl ON acl.id = ac.location GROUP BY 2, 3 ORDER BY 2, 3</query>
361 <name>asset_cops_by_loc_and_org</name>
362 <report_title>Copies by Location</report_title>
364 <iteration>0</iteration>
365 <heading>Copy Count.Library.Circ Library.Migrated</heading>
366 <query>SELECT COUNT(ac.id), acl.name, aou.name, ac.x_migrate::TEXT FROM asset_copy_legacy ac JOIN asset.copy_location acl ON acl.id = ac.location JOIN actor.org_unit aou ON aou.id = ac.circ_lib GROUP BY 2, 3, 4 ORDER BY 2, 3, 4</query>
370 <name>asset_barcode_lengths</name>
371 <report_title>Barcode Lengths by Library</report_title>
373 <iteration>0</iteration>
374 <heading>Count of Barcode.Barcode Length.Library</heading>
375 <query>SELECT COUNT(ac.id), LENGTH(ac.barcode), aou.name FROM asset_copy_legacy ac JOIN actor.org_unit aou ON aou.id = ac.circ_lib WHERE ac.x_migrate = TRUE GROUP BY 2, 3 ORDER BY 3, 2</query>
379 <name>asset_barcode_patterns</name>
380 <report_title>Common Barcode Starting Patterns</report_title>
382 <iteration>0</iteration>
383 <heading>Count of Barcodes (greater than 10).Left 60% of Characters</heading>
384 <query>SELECT COUNT(ac.id), LEFT(ac.barcode,(ROUND(LENGTH(ac.barcode)*.6))::INT) FROM asset_copy_legacy ac WHERE ac.x_migrate = TRUE GROUP BY 2 HAVING COUNT(ac.id) > 10 ORDER BY 2</query>
388 <name>asset_barcode_incumbent_collisions</name>
389 <report_title>Copy Barcode Incumbent Collisions</report_title>
391 <iteration>0</iteration>
392 <heading>Collision Count</heading>
393 <query>SELECT COUNT(id) FROM asset_copy_legacy WHERE x_migrate = TRUE AND barcode ~* 'collision' and barcode ~* 'incumbent'</query>
394 <note>Incumbent collisions are those where the migrated barcodes collide with existing barcodes in the database.</note>
398 <name>asset_barcode_incumbent_collisions</name>
399 <report_title>Copy Barcode Incumbent Collisions</report_title>
401 <iteration>1</iteration>
402 <heading>Collision Count</heading>
403 <query>SELECT COUNT(id) FROM asset_copy WHERE barcode ~* 'collision' and barcode ~* 'incumbent'</query>
404 <note>Incumbent collisions are those where the migrated barcodes collide with existing barcodes in the database.</note>
408 <name>asset_barcode_internal_collisions</name>
409 <report_title>Copy Barcode Internal Collisions</report_title>
411 <iteration>0</iteration>
412 <heading>Collision Count</heading>
413 <query>SELECT COUNT(id) FROM asset_copy_legacy WHERE x_migrate = TRUE AND barcode ~* 'collision' and barcode ~* 'internal'</query>
414 <note>Internal collisions are those where the migrated barcodes have conflicts within their list of barcodes.</note>
418 <name>asset_barcode_internal_collisions</name>
419 <report_title>Copy Barcode Internal Collisions</report_title>
421 <iteration>1</iteration>
422 <heading>Collision Count</heading>
423 <query>SELECT COUNT(id) FROM asset_copy WHERE barcode ~* 'collision' and barcode ~* 'internal'</query>
424 <note>Internal collisions are those where the migrated barcodes have conflicts within their list of barcodes.</note>
428 <name>asset_barcode_collisions_shortlist</name>
429 <report_title>Copy Barcode Collisions (first 20)</report_title>
431 <iteration>0</iteration>
432 <heading>Collision List</heading>
433 <query>SELECT ac.barcode FROM asset_copy_legacy ac WHERE ac.barcode ~* 'collision' ORDER BY 1 LIMIT 20</query>
434 <note>This is a shortlist of patron barcode collisions that maxes out at 20. If there are more collisions we will need to run a custom report.</note>
438 <name>asset_barcode_collisions_shortlist</name>
439 <report_title>Copy Barcode Collisions (first 20)</report_title>
441 <iteration>1</iteration>
442 <heading>Collision List</heading>
443 <query>SELECT ac.barcode FROM asset_copy ac WHERE ac.barcode ~* 'collision' ORDER BY 1 LIMIT 20</query>
444 <note>This is a shortlist of patron barcode collisions that maxes out at 20. If there are more collisions we will need to run a custom report.</note>
448 <name>asset_barcode_collision_patterns</name>
449 <report_title>Common Copy Barcode Collision Patterns</report_title>
451 <iteration>0</iteration>
452 <heading>Number of Barcodes Matching Pattern Greater than 10.Left 60% of Characters</heading>
453 <query>SELECT COUNT(ac.id), LEFT(ac.barcode,(ROUND(LENGTH(ac.barcode)*.6))::INT) FROM asset_copy_legacy ac WHERE barcode ~* 'collision' GROUP BY 2 HAVING COUNT(ac.id) > 10 ORDER BY 2</query>
457 <name>asset_barcode_collision_patterns</name>
458 <report_title>Common Copy Barcode Collision Patterns</report_title>
460 <iteration>1</iteration>
461 <heading>Number of Barcodes Matching Pattern Greater than 10.Left 60% of Characters</heading>
462 <query>SELECT COUNT(ac.id), LEFT(ac.barcode,(ROUND(LENGTH(ac.barcode)*.6))::INT) FROM asset_copy ac WHERE barcode ~* 'collision' GROUP BY 2 HAVING COUNT(ac.id) > 10 ORDER BY 2</query>
466 <name>asset_stat_cats</name>
467 <report_title>Copy Statistical Categories</report_title>
469 <iteration>0</iteration>
470 <heading>Stat Cat Count.Library.Statistical Category</heading>
471 <query>SELECT COUNT(ac_sc.id), aou.name, ac_sc.name FROM asset_stat_cat_legacy ac_sc JOIN actor.org_unit aou ON aou.id = ac_sc.owner GROUP BY 2,3 ORDER BY 2,3</query>
475 <name>asset_stat_cats</name>
476 <report_title>Copy Statistical Categories</report_title>
478 <iteration>1</iteration>
479 <heading>Stat Cat Count.Library.Statistical Category</heading>
480 <query>SELECT COUNT(ac_sc.id), aou.name, ac_sc.name FROM asset_stat_cat ac_sc JOIN actor.org_unit aou ON aou.id = ac_sc.owner GROUP BY 2,3 ORDER BY 2,3</query>
484 <name>asset_stat_cat_entries</name>
485 <report_title>Copy Stat Cat User Entries</report_title>
487 <iteration>0</iteration>
488 <heading>Copy Stat Count.Library.Statistical Category</heading>
489 <query>SELECT COUNT(map.id), aou.name, ac_sc.name FROM asset_stat_cat_entry_copy_map_legacy map JOIN asset_stat_cat_legacy ac_sc ON ac_sc.id = map.stat_cat JOIN actor.org_unit aou ON aou.id = ac_sc.owner GROUP BY 2,3 ORDER BY 2,3</query>
493 <name>asset_stat_cat_entries</name>
494 <report_title>Copy Stat Cat User Entries</report_title>
496 <iteration>1</iteration>
497 <heading>Copy Stat Count.Library.Statistical Category</heading>
498 <query>SELECT COUNT(map.id), aou.name, ac_sc.name FROM asset_stat_cat_entry_copy_map map JOIN asset_stat_cat ac_sc ON ac_sc.id = map.stat_cat JOIN actor.org_unit aou ON aou.
499 id = ac_sc.owner GROUP BY 2,3 ORDER BY 2,3</query>
503 <name>asset_copy_tags</name>
504 <report_title>Copy Tags</report_title>
506 <iteration>0</iteration>
507 <heading>Tag Count.Copy Tag Type.Copy Tag Label.Staff Note.Public</heading>
508 <query>SELECT COUNT(map.id), tag.tag_type, tag.label, tag.staff_note, tag.pub FROM asset_copy_tag tag JOIN asset_copy_tag_copy_map map ON map.tag = tag.id GROUP BY 2,3,4,5 ORDER BY 2,3</query>
511 <!-- MONEY REPORTS -->
514 <name>money_billing_voided</name>
515 <report_title>Bills Voided And Not</report_title>
517 <iteration>0</iteration>
518 <heading>Count.Voided.Sum.Migrated</heading>
519 <query>SELECT COUNT(a.id), a.voided::TEXT, SUM(a.amount), a.x_migrate::TEXT FROM money_billing_legacy a GROUP BY 2, 4 ORDER BY 2, 4</query>
523 <name>money_billing_voided</name>
524 <report_title>Bills Voided And Not</report_title>
526 <iteration>1</iteration>
527 <heading>Count.Voided.Sum</heading>
528 <query>SELECT COUNT(a.id), a.voided::TEXT, SUM(a.amount) FROM money_billing a GROUP BY 2 ORDER BY 2, 3</query>
532 <name>money_billing_by_type</name>
533 <report_title>Bills by Type</report_title>
535 <iteration>0</iteration>
536 <heading>Count.Billing Type.Migrated</heading>
537 <query>SELECT COUNT(a.id), a.billing_type, a.x_migrate::TEXT FROM money_billing_legacy a GROUP BY 2, 3 ORDER BY 2, 3</query>
541 <name>money_billing_by_type</name>
542 <report_title>Bills by Type</report_title>
544 <iteration>1</iteration>
545 <heading>Count.Billing Type</heading>
546 <query>SELECT COUNT(a.id), a.billing_type FROM money_billing a GROUP BY 2 ORDER BY 2</query>
550 <name>money_cash_payment</name>
551 <report_title>Cash Payments</report_title>
553 <iteration>0</iteration>
554 <heading>Count.Voided.Sum.Migrated</heading>
555 <query>SELECT COUNT(a.id), a.voided::TEXT, SUM(a.amount), a.x_migrate::TEXT FROM money_cash_payment_legacy a GROUP BY 2, 4 ORDER BY 2, 4</query>
559 <name>money_cash_payment</name>
560 <report_title>Cash Payments</report_title>
562 <iteration>1</iteration>
563 <heading>Count.Voided.Sum</heading>
564 <query>SELECT COUNT(a.id), a.voided::TEXT, SUM(a.amount) FROM money_cash_payment a GROUP BY 2 ORDER BY 2</query>
568 <name>money_check_payment</name>
569 <report_title>Check Payments</report_title>
571 <iteration>0</iteration>
572 <heading>Count.Voided.Sum.Migrated</heading>
573 <query>SELECT COUNT(a.id), a.voided::TEXT, SUM(a.amount), a.x_migrate::TEXT FROM money_check_payment_legacy a GROUP BY 2, 4 ORDER BY 2, 4</query>
577 <name>money_forgive_payment</name>
578 <report_title>Forgive Payments</report_title>
580 <iteration>0</iteration>
581 <heading>Count.Voided.Sum.Migrated</heading>
582 <query>SELECT COUNT(a.id), a.voided::TEXT, SUM(a.amount), a.x_migrate::TEXT FROM money_forgive_payment_legacy a GROUP BY 2, 4 ORDER BY 2, 4</query>
586 <name>money_forgive_payment</name>
587 <report_title>Forgive Payments</report_title>
589 <iteration>1</iteration>
590 <heading>Count.Voided.Sum</heading>
591 <query>SELECT COUNT(a.id), a.voided::TEXT, SUM(a.amount) FROM money_forgive_paymen a GROUP BY 2 ORDER BY 2</query>
595 <name>money_goods_payment</name>
596 <report_title>Goods Payments</report_title>
598 <iteration>0</iteration>
599 <heading>Count.Voided.Sum.Migrated</heading>
600 <query>SELECT COUNT(a.id), a.voided::TEXT, SUM(a.amount), a.x_migrate::TEXT FROM money_goods_payment_legacy a GROUP BY 2, 4 ORDER BY 2, 4</query>
604 <name>money_work_payment</name>
605 <report_title>Work Payments</report_title>
607 <iteration>0</iteration>
608 <heading>Count.Voided.Sum.Migrated</heading>
609 <query>SELECT COUNT(a.id), a.voided::TEXT, SUM(a.amount), a.x_migrate::TEXT FROM money_work_payment_legacy a GROUP BY 2, 4 ORDER BY 2, 4</query>
613 <name>money_credit_card_payment</name>
614 <report_title>Credit Card Payments</report_title>
616 <iteration>0</iteration>
617 <heading>Count.Voided.Sum.Migrated</heading>
618 <query>SELECT COUNT(a.id), a.voided::TEXT, SUM(a.amount), a.x_migrate::TEXT FROM money_credit_card_payment_legacy a GROUP BY 2, 4 ORDER BY 2, 4</query>
622 <name>money_credit_payment</name>
623 <report_title>Credit Payments</report_title>
625 <iteration>0</iteration>
626 <heading>Count.Voided.Sum.Migrated</heading>
627 <query>SELECT COUNT(a.id), a.voided::TEXT, SUM(a.amount), a.x_migrate::TEXT FROM money_credit_payment_legacy a GROUP BY 2, 4 ORDER BY 2, 4</query>
631 <!-- BIBS REPORTS -->
635 <report_title>Extracted Bibliographic Records</report_title>
637 <iteration>0</iteration>
638 <heading>Count.Deleted.Migrated</heading>
639 <query>SELECT COUNT(bre.id), bre.deleted::TEXT, bre.x_migrate::TEXT FROM biblio_record_entry_legacy bre GROUP BY 2, 3 ORDER BY 2, 3</query>
640 <note>False means the records are not deleted.</note>
645 <report_title>Extracted Bibliographic Records</report_title>
647 <iteration>1</iteration>
648 <heading>Count</heading>
649 <query>SELECT COUNT(eg) FROM bib_id_map</query>
653 <name>bibswovolumes</name>
654 <report_title>Bibliographic Records Without Volumes</report_title>
656 <iteration>0</iteration>
657 <heading>Count</heading>
658 <query>SELECT COUNT(eg) FROM bib_id_map where eg::INTEGER NOT IN (SELECT DISTINCT record FROM asset_call_number)</query>
662 <name>bibs_notes</name>
663 <report_title>Bib Record Notes</report_title>
665 <iteration>0</iteration>
666 <heading>Count.Migrated</heading>
667 <query>SELECT COUNT(b.id), b.x_migrate::TEXT FROM biblio_record_note_legacy b GROUP BY 2</query>
671 <name>bibs_notes</name>
672 <report_title>Bib Record Notes</report_title>
674 <iteration>1</iteration>
675 <heading>Count</heading>
676 <query>SELECT COUNT(b.id) FROM biblio_record_note b</query>
680 <name>bibs_peers</name>
681 <report_title>Peer Bib Copies</report_title>
683 <iteration>0</iteration>
684 <heading>Count.Migrated</heading>
685 <query>SELECT COUNT(b.id), b.x_migrate::TEXT FROM biblio_peer_bib_copy_map_legacy b GROUP BY 2</query>
689 <name>bibs_peers</name>
690 <report_title>Peer Bib Copies</report_title>
692 <iteration>1</iteration>
693 <heading>Count</heading>
694 <query>SELECT COUNT(b.id) FROM biblio_peer_bib_copy_map b</query>
698 <name>bibs_parts</name>
699 <report_title>Monograph Parts</report_title>
701 <iteration>0</iteration>
702 <heading>Count.Migrated</heading>
703 <query>SELECT COUNT(b.id), b.x_migrate::TEXT FROM biblio_monograph_part_legacy b GROUP BY 2</query>
707 <name>bibs_parts</name>
708 <report_title>Monograph Parts</report_title>
710 <iteration>1</iteration>
711 <heading>Count</heading>
712 <query>SELECT COUNT(b.id) FROM biblio_monograph_part b</query>
715 <!-- ACTORS REPORTS -->
718 <name>usrsbyorg</name>
719 <report_title>Patrons by Home Org</report_title>
721 <iteration>0</iteration>
722 <heading>Count.Library.Deleted.Migrated</heading>
723 <query>SELECT COUNT(au.id), aou.name, au.deleted::TEXT, au.x_migrate::TEXT FROM actor_usr_legacy au JOIN actor.org_unit aou ON aou.id = au.home_ou GROUP BY 2, 3, 4 ORDER BY 2, 3, 4</query>
727 <name>usrsbypgt</name>
728 <report_title>Patrons by Permission Group</report_title>
730 <iteration>0</iteration>
731 <heading>Count.Permission Group.Migrated</heading>
732 <query>SELECT COUNT(au.id), pgt.name, au.x_migrate::TEXT FROM actor_usr_legacy au JOIN permission.grp_tree pgt ON pgt.id = au.profile GROUP BY 2, 3 ORDER BY 2, 3</query>
736 <name>active_usrs</name>
737 <report_title>Patron by Active Status</report_title>
739 <iteration>0</iteration>
740 <heading>Count of Users.Active.Migrated</heading>
741 <query>SELECT COUNT(id), active::TEXT, x_migrate::TEXT FROM actor_usr_legacy GROUP BY 2, 3</query>
745 <name>active_usrs</name>
746 <report_title>Patrons by Active Status</report_title>
748 <iteration>1</iteration>
749 <heading>Count of Users.Active</heading>
750 <query>SELECT COUNT(id), active::TEXT FROM actor_usr GROUP BY 2</query>
754 <name>active_usr_barcodes</name>
755 <report_title>Patron Barcodes by Active Status</report_title>
757 <iteration>0</iteration>
758 <heading>Count of Barcodes.Active.Migrated</heading>
759 <query>SELECT COUNT(id), active::TEXT, x_migrate::TEXT FROM actor_card_legacy GROUP BY 2, 3</query>
763 <name>active_usr_barcodes</name>
764 <report_title>Patron Barcodes by Active Status</report_title>
766 <iteration>1</iteration>
767 <heading>Count of Barcodes.Active</heading>
768 <query>SELECT COUNT(id), active::TEXT FROM actor_card GROUP BY 2</query>
772 <name>usr_barcode_lengths</name>
773 <report_title>Barcode Lengths by Library</report_title>
775 <iteration>0</iteration>
776 <heading>Count of Barcode.Barcode Length.Library</heading>
777 <query>SELECT COUNT(acard.id), LENGTH(acard.barcode), aou.name FROM actor_card_legacy acard JOIN actor_usr_legacy au ON au.id = acard.usr JOIN actor.org_unit aou ON aou.id = au.home_ou WHERE acard.x_migrate = TRUE GROUP BY 2, 3 ORDER BY 3, 2</query>
781 <name>usr_barcode_lengths</name>
782 <report_title>Barcode Lengths by Library</report_title>
784 <iteration>1</iteration>
785 <heading>Count of Barcode.Barcode Length.Library</heading>
786 <query>SELECT COUNT(acard.id), LENGTH(acard.barcode), aou.name FROM actor_card acard JOIN actor_usr au ON au.id = acard.usr JOIN actor.org_unit aou ON aou.id = au.home_ou GROUP BY 2, 3 ORDER BY 3, 2</query>
790 <name>usr_barcode_patterns</name>
791 <report_title>Common Barcode Starting Patterns</report_title>
793 <iteration>0</iteration>
794 <heading>Count of Barcodes (greater than 10).Left 60% of Characters</heading>
795 <query>SELECT COUNT(acard.id), LEFT(acard.barcode,(ROUND(LENGTH(acard.barcode)*.6))::INT) FROM actor_card_legacy acard WHERE acard.x_migrate = TRUE GROUP BY 2 HAVING COUNT(acard.id) > 10 ORDER BY 2</query>
799 <name>usr_barcode_patterns</name>
800 <report_title>Common Barcode Starting Patterns</report_title>
802 <iteration>1</iteration>
803 <heading>Count of Barcodes (greater than 10).Left 60% of Characters</heading>
804 <query>SELECT COUNT(acard.id), LEFT(acard.barcode,(ROUND(LENGTH(acard.barcode)*.6))::INT) FROM actor_card acard GROUP BY 2 HAVING COUNT(acard.id) > 10 ORDER BY 2</query>
808 <name>usr_barcode_collisions</name>
809 <report_title>Patron Barcode Collisions</report_title>
811 <iteration>0</iteration>
812 <heading>Collision Count</heading>
813 <query>SELECT COUNT(acard.id) FROM actor_card_legacy acard WHERE barcode ~* 'collision' AND x_migrate = TRUE</query>
817 <name>usr_barcode_collisions</name>
818 <report_title>Patron Barcode Collisions</report_title>
820 <iteration>1</iteration>
821 <heading>Collision Count</heading>
822 <query>SELECT COUNT(acard.id) FROM actor_card acard WHERE barcode ~* 'collision'</query>
826 <name>usr_barcode_collision_shortlist</name>
827 <report_title>Patron Barcode Collisions (first 20)</report_title>
829 <iteration>0</iteration>
830 <heading>Collision List</heading>
831 <query>SELECT acard.barcode FROM actor_card_legacy acard WHERE acard.barcode ~* 'collision' AND acard.x_migrate = TRUE ORDER BY 1 LIMIT 20</query>
832 <note>This is a shortlist of patron barcode collisions that maxes out at 20. If there are more collisions we will need to run a custom report. In some cases we may flag individual accounts to not migrate.</note>
836 <name>usr_barcode_collision_shortlist</name>
837 <report_title>Patron Barcode Collisions (first 20)</report_title>
839 <iteration>1</iteration>
840 <heading>Collision List</heading>
841 <query>SELECT acard.barcode FROM actor_card acard WHERE acard.barcode ~* 'collision' ORDER BY 1 LIMIT 20</query>
842 <note>This is a shortlist of patron barcode collisions that maxes out at 20. If there are more collisions we will need to run a custom report. In some cases we may flag individual accounts to not migrate.</note>
846 <name>usr_barcode_collision_patterns</name>
847 <report_title>Common Patron Barcode Collision Patterns</report_title> a.x_migrate
849 <iteration>0</iteration>
850 <heading>Number of Barcodes Matching Pattern Greater than 10.Left 60% of Characters</heading>
851 <query>SELECT COUNT(acard.id), LEFT(acard.barcode,(ROUND(LENGTH(acard.barcode)*.6))::INT) FROM actor_card_legacy acard WHERE acard.barcode ~* 'collision' AND acard.x_migrate = TRUE GROUP BY 2 HAVING COUNT(acard.id) > 10 ORDER BY 2</query>
855 <name>usr_barcode_collision_patterns</name>
856 <report_title>Common Patron Barcode Collision Patterns</report_title> a.x_migrate
858 <iteration>1</iteration>
859 <heading>Number of Barcodes Matching Pattern Greater than 10.Left 60% of Characters</heading>
860 <query>SELECT COUNT(acard.id), LEFT(acard.barcode,(ROUND(LENGTH(acard.barcode)*.6))::INT) FROM actor_card acard WHERE acard.barcode ~* 'collision' GROUP BY 2 HAVING COUNT(acard.id) > 10 ORDER BY 2</query>
864 <name>usr_addressses_status</name>
865 <report_title>Patron Addresses by Valid Status</report_title>
867 <iteration>0</iteration>
868 <heading>Count.Valid.Migrated</heading>
869 <query>SELECT COUNT(aua.id), valid::TEXT, x_migrate::TEXT FROM actor_usr_address_legacy aua GROUP BY 2, 3</query>
873 <name>usr_addressses_status</name>
874 <report_title>Patron Addresses by Valid Status</report_title>
876 <iteration>1</iteration>
877 <heading>Count.Valid</heading>
878 <query>SELECT COUNT(aua.id), valid::TEXT FROM actor_usr_address aua GROUP BY 2</query>
882 <name>usr_addresses_pending</name>
883 <report_title>Patron Addresses by Pending Status</report_title>
885 <iteration>0</iteration>
886 <heading>Count of Addresses.Pending.Migrated</heading>
887 <query>SELECT COUNT(aua.id), pending::TEXT, x_migrate::TEXT FROM actor_usr_address_legacy aua GROUP BY 2, 3</query>
891 <name>usr_addresses_pending</name>
892 <report_title>Patron Addresses by Pending Status</report_title>
894 <iteration>1</iteration>
895 <heading>Count of Addresses.Pending</heading>
896 <query>SELECT COUNT(aua.id), pending::TEXT FROM actor_usr_address aua GROUP BY 2</query>
900 <name>usr_messages</name>
901 <report_title>Patron Messages</report_title>
903 <iteration>0</iteration>
904 <heading>Count.Deleted.Migrated</heading>
905 <query>SELECT COUNT(aum.id), deleted::TEXT, x_migrate::TEXT FROM actor_usr_message_legacy aum GROUP BY 2, 3</query>
909 <name>usr_messages</name>
910 <report_title>Patron Messages</report_title>
912 <iteration>1</iteration>
913 <heading>Count.Deleted</heading>
914 <query>SELECT COUNT(aum.id), deleted::TEXT FROM actor_usr_message_legacy aum GROUP BY 2</query>
918 <name>usr_notes</name>
919 <report_title>Patron Notes</report_title>
921 <iteration>0</iteration>
922 <heading>Count.Public.Migrated</heading>
923 <query>SELECT COUNT(aun.id), pub::TEXT, x_migrate::TEXT FROM actor_usr_note_legacy aun GROUP BY 2, 3</query>
927 <name>usr_notes</name>
928 <report_title>Patron Notes</report_title>
930 <iteration>1</iteration>
931 <heading>Count.Public</heading>
932 <query>SELECT COUNT(aun.id), pub::TEXT FROM actor_usr_note aun GROUP BY 2</query>
936 <name>usr_stat_cats</name>
937 <report_title>Patron Statistical Categories</report_title>
939 <iteration>0</iteration>
940 <heading>Stat Cat Count.Library.Statistical Category.Migrated</heading>
941 <query>SELECT COUNT(au_sc.id), aou.name, au_sc.name, au_sc.x_migrate::TEXT FROM actor_stat_cat_legacy au_sc JOIN actor.org_unit aou ON aou.id = au_sc.owner GROUP BY 2, 3, 4 ORDER BY 2, 3, 4</query>
945 <name>usr_stat_cats</name>
946 <report_title>Patron Statistical Categories</report_title>
948 <iteration>1</iteration>
949 <heading>Stat Cat Count.Library.Statistical Category</heading>
950 <query>SELECT COUNT(au_sc.id), aou.name, au_sc.name FROM actor_stat_cat au_sc JOIN actor.org_unit aou ON aou.id = au_sc.owner GROUP BY 2, 3 ORDER BY 2, 3</query>
954 <name>usr_stat_cat_entries</name>
955 <report_title>Patron Stat Cat User Entries</report_title>
957 <iteration>0</iteration>
958 <heading>Patron Stat Count.Library.Statistical Category.Migrated</heading>
959 <query>SELECT COUNT(map.id), aou.name, au_sc.name, map.x_migrate::TEXT FROM actor_stat_cat_entry_usr_map_legacy map JOIN actor_stat_cat_legacy au_sc ON au_sc.id = map.stat_cat JOIN actor.org_unit aou ON aou.id = au_sc.owner GROUP BY 2, 3, 4 ORDER BY 2,3, 4</query>
963 <name>usr_stat_cat_entries</name>
964 <report_title>Patron Stat Cat User Entries</report_title>
966 <iteration>1</iteration>
967 <heading>Patron Stat Count.Library.Statistical Category</heading>
968 <query>SELECT COUNT(map.id), aou.name, au_sc.name FROM actor_stat_cat_entry_usr_map map JOIN actor_stat_cat au_sc ON au_sc.id = map.stat_cat JOIN actor.org_unit aou ON aou.id = au_sc.owner GROUP BY 2, 3 ORDER BY 2,3</query>
972 <name>usr_thresholds</name>
973 <report_title>Patron Thresholds</report_title>
975 <iteration>0</iteration>
976 <heading>Pateron Group.Org Unit.Penalty.Threshold</heading>
977 <query>SELECT pgt.name, aou.shortname, sp.name, p.threshold FROM permission_grp_penalty_threshold p
978 JOIN actor.org_unit aou ON aou.id = p.org_unit JOIN permission.grp_tree pgt ON pgt.id = p.grp JOIN config.standing_penalty sp ON sp.id = p.penalty
979 ORDER BY 2, 1, 3</query>
983 <!-- ACQUISITIONS REPORTS -->
985 <name>fund_count</name>
986 <iteration>0</iteration>
988 <report_title>Migrated Funds</report_title>
989 <heading>Number of Funds.Migrated</heading>
990 <query>SELECT COUNT(id), x_migrate::TEXT FROM acq_fund_legacy GROUP BY 2;</query>
994 <name>fund_count</name>
995 <iteration>1</iteration>
997 <report_title>Migrated Funds</report_title>
998 <heading>Number of Funds</heading>
999 <query>SELECT COUNT(id) FROM acq_fund;</query>
1003 <name>invoice_count</name>
1004 <iteration>0</iteration>
1006 <report_title>Migrated Invoices</report_title>
1007 <heading>Number of Invoices.Migrated</heading>
1008 <query>SELECT COUNT(id), x_migrate::TEXT FROM acq_invoice_legacy GROUP BY 2;</query>
1012 <name>invoice_count</name>
1013 <iteration>1</iteration>
1015 <report_title>Migrated Invoices</report_title>
1016 <heading>Number of Funds</heading>
1017 <query>SELECT COUNT(id) FROM acq_invoice;</query>
1020 <!-- SERIALS REPORTS -->
1022 <name>serials_mfhd_count</name>
1024 <iteration>0</iteration>
1025 <report_title>Migrated Serial MFHDs</report_title>
1026 <heading>Number of MFHDs</heading>
1027 <query>SELECT COUNT(id) FROM serial_record_entry</query>
1030 <!-- DEDUPE REPORTS -->
1033 <name>dedupe_explain</name>
1035 <file>dedupe_process.asciidoc</file>
1039 <name>dedupe_format_count</name>
1041 <iteration>0</iteration>
1042 <report_title>Count of Items Matching By Format</report_title>
1043 <heading>Count.Format(s)</heading>
1044 <query>SELECT COUNT(id), search_formats FROM bib_matches GROUP BY 2 ORDER BY 2;</query>
1048 <name>dedupe_scores</name>
1050 <iteration>0</iteration>
1051 <report_title>Scoring Values in Matches</report_title>
1052 <heading>Count.Scoring Information</heading>
1053 <query>SELECT COUNT(id), 'Incumbent Records With Higher Scores to Incoming' FROM bib_matches WHERE incumbent_bib_score > incoming_bib_score
1054 UNION ALL SELECT COUNT(id), 'Incumbent Records With Equal Scores to Incoming' FROM bib_matches WHERE incumbent_bib_score = incoming_bib_score
1055 UNION ALL SELECT COUNT(id), 'Incumbent Records With Lower Scores to Incoming' FROM bib_matches WHERE incumbent_bib_score < incoming_bib_score
1060 <name>dedupe_score_ranges</name>
1062 <iteration>0</iteration>
1063 <report_title>Count of Items Matching By Format</report_title>
1064 <heading>Lowest Record Score.Largest Record Score.Record Set</heading>
1065 <query>SELECT MIN(incumbent_bib_score), MAX(incumbent_bib_score), 'Incumbent Records' FROM bib_matches
1066 UNION ALL SELECT MIN(incoming_bib_score), MAX(incoming_bib_score), 'Incoming Records' FROM bib_matches ;
1072 <name>dedupe_sample_set</name>
1074 <iteration>0</iteration>
1075 <report_title>Sample of 20 Matching Dedupe Record Sets</report_title>
1076 <heading>Bib Being Merged Into.Bib Being Merged</heading>
1077 <query>SELECT incumbent_bib, incoming_bib FROM bib_matches WHERE incumbent_bib_score >= incoming_bib_score LIMIT 20 ;