79
The ART of Voyage r Access The ART of Voyager Access d v a n c e d e p o r t i n g e c h n i q u e s Getty Research Institute Library 14 February 2002 Alan Manifold Systems Implementation Manager Purdue University Libraries [email protected]

Art - advanced reporting techniques

Embed Size (px)

DESCRIPTION

This presentation was given at the Getty Research Library and other locations through the years to sites that had already had Alan Manifold's Using Microsoft Access for Reporting from Voyager workshop. There is some overlap between the two, but this one goes into more depth on some special techniques that help create more complex reports and queries.

Citation preview

Page 1: Art - advanced reporting techniques

The ART of Voyager Accessdvanced

eporting

echniques

Getty Research Institute Library

14 February 2002

Alan ManifoldSystems Implementation

ManagerPurdue University [email protected]

Page 2: Art - advanced reporting techniques

TheART

ofVoyager Access

VOYAGER

SQL

BLOB PROGRAMMING

ACCESSWE’LL BE COVERING LOTS OF TOPICS. WATCH FOR THESE ICONS TO HELP YOU FOLLOW WHAT WE’RE FOCUSING ON.

Page 3: Art - advanced reporting techniques

TheART

ofVoyager Access

WHAT’S IN IT FOR ME?

EACH MODULEHASITSOWNTABLES.

WE’LLLOOK ATEACH INTURN.

Page 4: Art - advanced reporting techniques

TheART

ofVoyager Access

ACQUISITIONS

ACQUISITIONS IN VOYAGER IS COMPLEX

LET’S DO SOME EXPLORING!

Page 5: Art - advanced reporting techniques

TheART

ofVoyager Access

SERIALS CHECK-IN

LINE_ITEM

PO STUFF

PO_ID

COMPONENT

SUBSCRIPTIONLINE_ITEM_ID

COMPONENT_PATTERN

PATTERN

ISSUES_RECEIVED

SERIAL_ISSUES

UNPREDICTABLE_ISSUES

COMPONENT_ID ISSUE_ID

ISSUE_ID

SUBSCRIPTION_ID

COMPONENT_ID

PATTERN_ID

Page 6: Art - advanced reporting techniques

TheART

ofVoyager Access

PURCHASE ORDER LINKS

PURCHASE_ORDER

LINE_ITEM

PO_ID

PO_NOTESPO_STATUS

PO_TYPE

PO_STATUS

PO_TYPEPO_ID

BIB TABLES

BIB_ID

LINE_ITEM_FUNDS

LINE_ITEM_COPY_STATUS

LINE_ITEM_COPYLINE_ITEM_ID

LINE_ITEM_ID

COPY_ID FUNDLEDGER_ID

FUND_ID

Page 7: Art - advanced reporting techniques

TheART

ofVoyager Access

INVOICES

INVOICE

INVOICE_NOTEINVOICE_STATUS

INVOICE_STATUS INVOICE_ID

INVOICE_ID

INVOICE_LINE_ITEM

LINE ITEM TABLES

LINE_ITEM_ID

INVOICE_LINE_ITEM_FUNDS

INV_LINE_ITEM_ID

FUNDLEDGER_ID

FUND_ID

Page 8: Art - advanced reporting techniques

TheART

ofVoyager Access

APPLICATION 1

FOR EACH FUND, LIST THE FUND NAME AND EACH PO TYPE THAT APPLIES TO IT.

USE THE INVOICE_LINE_ITEM_FUNDS TABLE TO DETERMINE THE FUNDS USED. LINK THE INVOICE LINE ITEMS TO THE APPROPRIATE PURCHASE ORDERS AND DETERMINE THE PO_TYPE_DESC OF EACH SUCH ORDER. GROUP BY ALL FIELDS OR INDICATE UNIQUE VALUES.

Page 9: Art - advanced reporting techniques

TheART

ofVoyager Access

THE RIGHT STUFFLINE_ITEM_FUNDS

funds assigned to PO line items in “Copies/Funds”box (amounts in foreign currency)

PO_FUNDSfunds assigned to PO line items, plus funds for PO adjustments until invoice is approved (base currency)

LINE_ITEM_COPYfunds assigned to line item copies on the PO (no amounts)

FUND_PAYMENTfunds used for prepayments and invoice adjustments

(foreign)INVOICE_LINE_ITEM_FUNDS

funds assigned or used for invoice line items (foreign)INVOICE_FUNDS

funds assigned or used for invoice line items, plus funds for invoice adjustments, after approval (base)

Page 10: Art - advanced reporting techniques

TheART

ofVoyager Access

EXPRESSIONS

AN EXPRESSION, OR CALCULATED FIELD, USES MULTIPLE FIELD VALUES TOGETHER OR USES FUNCTIONS TO CREATE NEW VALUES.

X + YÖW

ABS(ALLOCATION-EXPENDITURE)RO

UN

D(N

)UCASE(NAME)

I - (K * L)

Page 11: Art - advanced reporting techniques

TheART

ofVoyager Access

FUNCTIONS TRANSFORM DATA

GROCERYLIST

GROCERIES

EGGS

QUICHE

TO END UP WITHQUICHE, YOU START WITH A GROCERY LIST AND TRANSFORM IT STEP BY STEP

Page 12: Art - advanced reporting techniques

TheART

ofVoyager Access

FUZZY MATH

QUICHE = BAKE(EGGS,4)

EGGS = UNPACK(GROCERIES,“EGGS”)

GROCERIES = SHOP(GROCERY LIST)

( , 4)

( ,“EGGS”)

( )

QUICHE = BAKE(UNPACK(SHOP(GROCERY LIST),“EGGS”),4)

=

=

=

SHORTHAND METHOD:

TRANS: GO TO THE GROCERY AND BUY THE THINGS ON THE LIST.

TRANS: UNPACK THE GROCERIES AND FIND

THE EGGS.

TRANS: BAKE FOUR OF THE EGGS (AND SOME OTHER STUFF) INTO A QUICHE.

Page 13: Art - advanced reporting techniques

TheART

ofVoyager Access

CREATING EXPRESSIONSACCESS PROVIDES AN EXPRESSION BUILDER

THE BEST THING ABOUT IT IS THAT IT GIVES YOU A LIST OF THE FUNCTIONS THAT ARE BUILT INTO ACCESS.

ONCE YOU KNOW THE FUNCTIONS, YOU CAN TYPE THEM DIRECTLY.

Page 14: Art - advanced reporting techniques

TheART

ofVoyager Access

EXPRESSIONS IN QUERIES

EXPRESSIONS GO WHERE YOU WOULD OTHERWISE PUT A FIELD

IF YOU DON’T SUPPLY A LABEL, IT WILL BE “Expr1”

Page 15: Art - advanced reporting techniques

TheART

ofVoyager Access

AS CRITERIA, TOO

YOU CAN ALSO USE EXPRESSIONS IN CRITERIA

Page 16: Art - advanced reporting techniques

ZOOM! ZOOM!

PUT YOUR CURSOR HERE AND PRESS SHIFT-F2

WHEN YOU NEED TO ENTER OR EDIT COMPLEX EXPRESSIONS, THE ZOOM FEATURE OF ACCESS IS VERYHANDY.

Page 17: Art - advanced reporting techniques

TheART

ofVoyager Access

ALSO IN REPORTSYOU CAN USE AN EXPRESSION AS THE VALUE OF A TEXT BOX IN AN ACCESS REPORT.

Page 18: Art - advanced reporting techniques

TheART

ofVoyager Access

SOME FUNCTIONSCCur Convert to currency CCur(AMOUNT)

CCur(5396/100) = $53.96Val Numeric value of text Val(MFHD_COUNT)

Val(“13”) = 13UCase Convert to upper case UCase(LAST_NAME)

UCase(“Getty Library”) = “GETTY LIBRARY”Mid Part of text Mid(CALLNUM,5,2)

Mid(“004.12 A324d”,5,2) = “12”Left Left part of text Left(CALLNUM,3)

Left(“004.12 A324d”,3) = “004”Date Current date Date()

Date() = #2/14/2002#InStr Find a substring Instr(LOC,”refe”)

Instr(“ugrl,refe”,“refe”) = 6DateAdd Date math DateAdd(“m”,1,[Start of Month])

DateAdd(“yyyy”,-1,Date()) = #2/14/2001#

Page 19: Art - advanced reporting techniques

TheART

ofVoyager Access

APPLICATION 2PREDICT THE RESULTS OF THE FOLLOWING FUNCTION CALLS. TO CHECK YOURSELF, YOU CAN PUT THEM INTO THE QUERY SHOWN (IN PLACE OF THE CCur() CALL.Date()CCur(16.89)CCur(“12705”/100)Val(“2002”)Val(“341.23 H23p”)UCase(“101 Dalmations”)LCase(“The C++ Programming Language”)Mid(“821027s1974 nyu 00010 engm”,13,3)Mid(“PR4253.23 H551n”,3,7)Instr(“Jefferson on democracy”,“on”)Instr(“Working : people talk about what they do all day”, “:”) + 2

Mid(“0 v.34”, 3)Left(“ugrl,refe”,4)Right(“ugrl,refe”,4)DateAdd(“q”,1,Date())

Page 20: Art - advanced reporting techniques

TheART

ofVoyager Access

SQUARE BRACKETS, ETC.SEVERAL DIFFERENT KINDS OF THINGS CAN BE FOUND INSIDE SQUARE BRACKETS. TABLE NAMES, FIELD NAMES AND PROMPTS CAN ALL BE THERE.

IF A FIELD HAS NO SPACES, YOU DON’T NEED SQUARE BRACKETS, BUT ACCESS SOMETIMES PUTS THEM THERE, ANYWAY

PATRON_ID[AMOUNT]

[PO Number]BIB_MFHD.MFHD_ID

[BIB_MFHD.MFHD_ID][BIB_MFHD].[MFHD_ID]

WHEN YOU NEED TO SPECIFY WHICH TABLE A FIELD COMES FROM, YOU PUT A DOT BETWEEN THE TABLE NAME AND FIELD NAME. BRACKETS ARE OPTIONAL.

[Start Date:][Days overdue?][Location code]

IF AN ACCESS QUERY OR REPORT DOESN’T RECOGNIZE WHAT IS IN THE SQUARE BRACKETS AS A FIELD NAME, IT PROMPTS FOR A VALUE. THIS IS HOW PROMPTING FOR CRITERIA WORKS. IF IT PROMPTS YOU FOR THE VALUE OF A FIELD, IT MEANS IT ISN’T IN YOUR QUERY.

Page 21: Art - advanced reporting techniques

TheART

ofVoyager Access

BASE CURRENCY CONVERSION

BASE CURRENCY CONVERSION (FOR DOLLARS AND OTHER 100-BASED CURRENCIES):

AMT: CCur([AMOUNT]/100)

MORE GENERALLY, INCLUDE THE BASE_CURRENCY TABLE IN YOUR QUERY AND USE:

AMT: CCur([AMOUNT]/10^[BASE_DECIMALS])

Page 22: Art - advanced reporting techniques

TheART

ofVoyager Access

FOREIGN CURRENCIESAMT: CCur(([LINE_PRICE] / ([CONVERSION_RATE] / 100000)) /10 ^ [BASE_DECIMALS])

THIS SHOWS THE CURRENCY USED

Page 23: Art - advanced reporting techniques

TheART

ofVoyager Access

APPLICATION 3FOR EACH LINE ITEM THAT USES A FOREIGN CURRENCY, SHOW THE VALUE OF THE LINE_PRICE FIELD CALCULATED BY THE CURRENT CONVERSION RATE FOR THAT CURRENCY.

THE CURRENT CONVERSION RATE FOR A CURRENCY CAN BE FOUND IN THE CURRENCY_CONVERSION TABLE. YOU’LL NEED TO LINK TO THIS TABLE USING THE CURRENCY_CODE FIELD (IN THE PURCHASE_ORDER TABLE). THE CONVERSION RATE ASSUMES FIVE DIGITS AFTER THE DECIMAL. YOU CAN ASSUME THAT THE BASE CURRENCY IS USD. ROUND THE AMOUNT TO THECLOSEST CENT (USE THE Round() FUNCTION).

Page 24: Art - advanced reporting techniques

TheART

ofVoyager Access

CONDITIONALS

SOMETIMES YOU WANT YOUR RESULTS TO VARY, BASED ON SOME CRITERION. THIS IS CALLED A CONDITIONAL. IN A TYPICAL PROGRAMMING LANGUAGE, THIS LOOKS SOMETHING LIKE THIS:

if (sun is up) then“day”;

else“night”;

if (name = “GARFIELD”) thentype = cat;

else if (name = “ODIE”) thentype = dog;

elsetype = human;

OR:

Page 25: Art - advanced reporting techniques

TheART

ofVoyager Access

IMMEDIATE IF (IIf)THERE IS NO PROGRAM STRUCTURE IN SQL, BUT THE IIf() OR “IMMEDIATE IF” FUNCTION ALLOWS FOR CONDITIONALS.

IIf (expr, truepart, falsepart)

If the expression, “expr” turns out to be true, the value of IIf is “truepart”. If the expression is not true, the value of IIf is “falsepart”.

if (expr) thentruepart;

elsefalsepart;

Page 26: Art - advanced reporting techniques

TheART

ofVoyager Access

IIf EXAMPLESPREZ: IIf (Katherine Harris is Republican,

George W. Bush, Al Gore)

IIf(InStr([LINE_ITEM_NOTES].[NOTE],“xn!”)<>0, Mid([LINE_ITEM_NOTES].[NOTE], InStr([LINE_ITEM_NOTES].[NOTE], “xn!”)), “”)

IIf(Mid(ISSN,5,1)=“-”,Mid(ISSN,1,4) & Mid(ISSN,6,4),ISSN)

IIf([BIB_FORMAT] Like “*s”,Mid([FIELD_008],19,1),“ ”)

IIf(ADDRESS_LINE1 Is Not Null,ADDRESS_LINE1,“”)

Page 27: Art - advanced reporting techniques

TheART

ofVoyager Access

IIf() IN ACTIONWE WANT THE PHONE NUMBER ASSOCIATED WITH EACH PATRON’S PERMANENT ADDRESS. A PHONE NUMBER IS NOT REQUIRED, HOWEVER, SO WE HAVE TO USE AN OUTER JOIN, THEN WE USE AN IIf() FUNCTION TO PUT “NO PHONE” IF THERE IS NO PHONE NUMBER.

PH: IIf([PHONE_NUMBER] Is Null,“NO PHONE”,[PHONE_NUMBER])

Page 28: Art - advanced reporting techniques

TheART

ofVoyager Access

APPLICATION 4CHANGE THE PREVIOUS EXERCISE SO IT WORKS FOR ALL LINE ITEMS, WHETHERIN THE BASE CURRENCY OR IN AFOREIGN CURRENCY.

THIS IS PRETTY TRICKY. IF YOU DO A NORMAL LINK TO THE CURRENCY_CONVERSION TABLE, YOU WILL LOSE ALL LINE ITEMS IN THE BASE CURRENCY, BECAUSE ITS CURRENCY_CODE IS NOT IN THE CURRENCY_CONVERSION TABLE. SO, YOU’LL NEED TO CHANGE THE JOIN PROPERTIES TO RETAIN ALL LINE ITEMS. THEN YOU’LL HAVE TO USE THE IIf() FUNCTION TO CONVERT ONLY THOSE LINE ITEMS THAT ARE NOT IN THE BASE CURRENCY AND TO RETURN THE RAW FIELD FOR THOSE IN THE BASE CURRENCY.

Page 29: Art - advanced reporting techniques

TheART

ofVoyager Access

CATALOGING

YOU CAN’T REALLY SEPARATE THE CATALOGING MODULE FROM THE OTHERS, BUT THERE ARE SOME INTERESTING TABLES

Page 30: Art - advanced reporting techniques

TheART

ofVoyager Access

LEFT-ANCHORED INDEXES

LEFT-ANCHORED INDEXES ARE STORED IN THE BIB_INDEX AND AUTH_INDEX TABLES. OY! SUCH A GOOD SOURCE OF DATA, YOU WOULDN’T BELIEVE!

Page 31: Art - advanced reporting techniques

TheART

ofVoyager Access

HEADINGS

HEADINGS ARE EXTRACTED FROM BOTH BIB AND AUTH RECORDS INTO THE HEADING TABLE

Page 32: Art - advanced reporting techniques

TheART

ofVoyager Access

APPLICATION 5

FIND THE AUTHOR, TITLE AND ALL SUBJECT HEADINGS FOR EACH RECORD WHOSE BIB_ID IS LESS THAN 100. PUT THEM IN ORDER BY AUTHOR, THEN BY TITLE.

THERE ARE AT LEAST TWO GOOD WAYS TO GO ABOUT THIS. YOU CAN USE THE BIB_INDEX TABLE TO LOOK FOR ALL HEADINGS FROM A “6XX” FIELD OR YOU CAN USE THE BIB_HEADINGS TABLE TO LINK TO THE HEADINGS TABLE AND FIND ALL HEADINGS WITH AN INDEX_CODE FIELD OF “S”.

Page 33: Art - advanced reporting techniques

TheART

ofVoyager Access

BLOB FIELDS

SOME FIELDS ARE NOT PART OF ANY OF THE “BROKEN OUT” TABLES, BUT MIGHT BE USEFUL FOR A QUERY. IN THAT CASE, YOU HAVE TO GET THEM FROM ONE OF THE BLOBS.

Page 34: Art - advanced reporting techniques

TheART

ofVoyager Access

ADDING BLOB FIELDS

AS WITH OTHER EXPRESSIONS, YOU ADD THE BLOB FUNCTIONS INTO THE FIELD LINE OF A QUERY

Page 35: Art - advanced reporting techniques

TheART

ofVoyager Access

GETFIELDALL RESULTS

SO, IF WE “GOT” “ALL”, WHERE ARE THESE?FOR THE ANSWER, WE GO TO “REPORTS”

Page 36: Art - advanced reporting techniques

TheART

ofVoyager Access

REPORTING GETFIELDALL

WITH NO INTERVENTION, THIS IS HOW THAT RECORD’S INFORMATION WOULD APPEAR IN A REPORT.

Page 37: Art - advanced reporting techniques

TheART

ofVoyager Access

PERMIT GROWTH

SET “CAN GROW” FOR THE HOLD TEXT BOX

Page 38: Art - advanced reporting techniques

TheART

ofVoyager Access

AND VOILA!

A TEXT BOX SET FOR “CAN GROW” WILL EXPAND (VERTICALLY) TO WHATEVER SIZE IS REQUIRED TO SHOW ALL OF THE DATA FOR ITS FIELD

Page 39: Art - advanced reporting techniques

TheART

ofVoyager Access

SPEAKING OF PROPERTIES

WHEN FINE-TUNING A REPORT, CHANGING A REPORT’S, SECTION’S OR CONTROL’S PROPERTIES DIRECTLY GIVES YOU NEARLY ABSOLUTE CONTROL OVER THE RESULTS.

Page 40: Art - advanced reporting techniques

TheART

ofVoyager Access

APPLICATION 6CREATE A QUERY THAT GETS THE BIB_ID AND ALL NOTES (5XX) FIELDS FROM RECORDS WITH BIB_ID LESS THAN 500. THEN CREATE A REPORT BASED ON THIS QUERY THAT SHOWS ALL THE RESULTS.

TO GET ALL 5XX FIELDS, USE GetFieldAll WITH A SECOND PARAMETER OF “5”. THAT WILL MATCH ANY FIELD THAT STARTS WITH A “5”--IN OTHER WORDS, ALL 5XX FIELDS. IN THE REPORT, YOU’LL NEED TO MANUALLY CHANGE THE NOTES TEXT BOX TO SET THE “CAN GROW” PROPERTY. TRY THE REPORT WITH AND WITHOUT THAT SET AND SEE THE DIFFERENCE.

Page 41: Art - advanced reporting techniques

TheART

ofVoyager Access

CIRCULATION

CIRCULATION IS OFTEN THE FIRST TARGET FOR AD HOC REPORTING, SINCE THE SYSTEM PROVIDES ONLY A FEW OF THE STATISTICS THAT MOST LIBRARIES WANT.

UNFORTUNATELY, CIRCULATION ISN’T AS SIMPLE AS YOU MIGHT HOPE.

Page 42: Art - advanced reporting techniques

TheART

ofVoyager Access

CIRCULATIONBIB_TEXT

MFHD_MASTER

ITEM

BIB_MFHD

MFHD_ITEM

CIRC_TRANSACTIONS(and RENEW_TRANSACTIONS)

CIRC_TRANS_ARCHIVE(and RENEW_TRANS_ARCHIVE)

PATRON

PATRON_BARCODE

ITEM_TYPE

ITEM_BARCODE

ITEM_STATUS

ITEM_STATS

PATRON_GROUPLOCATION

ITEM_STAT_CODE

ITEM_STATUS_TYPE

COURSERESERVES

STUFF

HOLDS/RECALLS

FINES & FEES PATRON_STATS

SHORT LOANS

CALL SLIPS

MEDIA

PATRON_STAT_CODE

PROXY_PATRON

AL

MO

ST

AS

CO

MP

LE

X

AS

AC

QU

ISIT

ION

S

Page 43: Art - advanced reporting techniques

TheART

ofVoyager Access

HOLDS AND RECALLS

PATRON

PATRON_ID

HOLD_RECALL

HOLD_RECALL_ITEMS ITEM

BIB_ITEM

BIB_TEXT

HOLD_RECALL_ARCHIVE

HOLD_RECALL_ITEMS

HOLD_RECALL_ID

ITEM_ID

ITEM_ID

BIB_ID

BIB_ID

HOLD_RECALL_ID

THE ONLY THING HERE THAT IS NOT FAIRLY OBVIOUS IS THAT HOLDS AND RECALLS CAN BE PLACED AT THE COPY (ITEM) OR TITLE (BIB) LEVEL.

HOLD_RECALL_TYPEH=HOLD, R=RECALLREQUEST_LEVELT=TITLE, C=COPY

Page 44: Art - advanced reporting techniques

TheART

ofVoyager Access

COURSE RESERVESITEMS GO ON RESERVE BY PUTTING THEM ON A LIST AND SETTING THE ON_RESERVE FIELD, BUT SEARCHING IS BY COURSE INFORMATION, WHICH IS LINKED TO THE RESERVE_LIST_COURSES TABLE.

RESERVE_LIST_COURSES

RESERVE_LIST_ID

INSTRUCTOR

RESERVE_LIST_ITEMS

RESERVE_LIST

COURSE

DEPARTMENT

CLASS_SECTION

RESERVE_LIST_EITEMSITEM

EITEM

EITEM_ID

ITEM_ID

COURSE_ID

INSTRUCTOR_ID

DEPARTMENT_ID

SECTION_ID

Page 45: Art - advanced reporting techniques

TheART

ofVoyager Access

APPLICATION 7

FIND THE TITLES OF ALL ITEMS ON RESERVE FOR ANY COURSES TAUGHT BY INSTRUCTOR, MICHELE ARMS.

YOU’LL WANT TO LOOK AT THE INSTRUCTOR FILE TO SEE HOW THE INFORMATION THERE IS LAID OUT SO YOU CAN SET YOUR CRITERIA CORRECTLY. THEN YOU’LL HAVE TO CONSTRUCT A BRIDGE BETWEEN THE INSTRUCTOR TABLE AND WHEREVER YOU’RE GOING TO GET THE TITLE (HOW ABOUT BIB_TEXT?).

Page 46: Art - advanced reporting techniques

TheART

ofVoyager Access

FULL CIRC HISTORY

ITEM CIRC_TRANSACTIONS PATRON

TO GET FULL CIRCULATION HISTORY, YOU HAVE TO GO TO AT LEAST FOUR TABLES. WHILE AN ITEM IS CHECKED OUT, THE TABLES LOOK LIKE THIS:

RENEW_TRANSACTIONS

ITEM_ID PATRON_ID

CIRC_TRANSACTION_ID

AFTER THE ITEM IS CHECKED BACK IN, THE TABLES LOOK LIKE THIS:

ITEM CIRC_TRANS_ARCHIVE PATRON

RENEW_TRANS_ARCHIVE

ITEM_ID

ONLY IF “RETAIN PATRON ID FOR CIRC HISTORY”PATRON_ID

CIRC_TRANSACTION_ID

PATRON_STAT_CODE

PATRON_STATS

CIRC_TRANSACTION_STATS

PATRON_STAT_CODE

CIRC_TRANSACTION_ID

LOTS MORE

LOTS MORE

LOTS MORE

LOTS MORE

Page 47: Art - advanced reporting techniques

TheART

ofVoyager Access

FULL CIRC HISTORY 2TO GET CHARGE-ONLY STATS FOR ITEMS THAT HAVE BEEN RETURNED, YOU MIGHT DO:

Page 48: Art - advanced reporting techniques

TheART

ofVoyager Access

FULL CIRC HISTORY 3TO GET RENEWAL STATS FOR ITEMS THAT HAVE BEEN RETURNED, YOU MIGHT DO:

Page 49: Art - advanced reporting techniques

TheART

ofVoyager Access

FULL CIRC HISTORY 4TO GET THESE TOGETHER, YOU HAVE TO USE A UNION QUERY. A UNION QUERY TAKES TWO TABLES WITH THE SAME FIELDS AND MAKES ONE LONGER TABLE OUT OF THEM:

SELECT LOCATION_CODE, PATRON_GROUP_CODE, CHARGE_DATE AS TRANS_DATEFROM (PATRON_GROUP INNER JOIN CIRC_TRANS_ARCHIVE ON PATRON_GROUP.PATRON_GROUP_ID = CIRC_TRANS_ARCHIVE.PATRON_GROUP_ID) INNER JOIN LOCATION ON CIRC_TRANS_ARCHIVE.CHARGE_LOCATION = LOCATION.LOCATION_IDUNION SELECT LOCATION_CODE, PATRON_GROUP_CODE, RENEW_DATE AS TRANS_DATEFROM ((RENEW_TRANS_ARCHIVE INNER JOIN CIRC_TRANS_ARCHIVE ON RENEW_TRANS_ARCHIVE.CIRC_TRANSACTION_ID = CIRC_TRANS_ARCHIVE.CIRC_TRANSACTION_ID) INNER JOIN PATRON_GROUP ON CIRC_TRANS_ARCHIVE.PATRON_GROUP_ID = PATRON_GROUP.PATRON_GROUP_ID) INNER JOIN LOCATION ON RENEW_TRANS_ARCHIVE.RENEW_LOCATION = LOCATION.LOCATION_ID;

IN ACCESS, UNION QUERIES ARE SQL-ONLY QUERIES, SO LET’S LEARN SOME SQL!

Page 50: Art - advanced reporting techniques

TheART

ofVoyager Access

ACCESS SQL VIEW

Page 51: Art - advanced reporting techniques

TheART

ofVoyager Access

READING SQL

SELECTLOCATION_CODE, PATRON_GROUP_CODE,CHARGE_DATE AS TRANS_DATE

FROM(PATRON_GROUP

INNER JOINCIRC_TRANS_ARCHIVE

ON PATRON_GROUP.PATRON_GROUP_ID =CIRC_TRANS_ARCHIVE.PATRON_GROUP_ID)

INNER JOINLOCATION

ON CIRC_TRANS_ARCHIVE.CHARGE_LOCATION = LOCATION.LOCATION_ID;

Page 52: Art - advanced reporting techniques

TheART

ofVoyager Access

SQL KEYWORDSHERE IS A PARTIAL LIST OF SQL KEYWORDS :

SELECT List the fields you wantDISTINCT Keep only unique valuesFROM List the tables from which to get dataINNER JOIN Standard join -- fields in both tables are equalOUTER JOIN Special join -- if no matching value in 2nd table, keep record anywayINTO Make a table from the results of your queryAS Rename a field or a table within the queryORDER BY Sort the results by these fields, left to rightASC Do the sort in ascending order (default)DESC Do the sort in descending orderGROUP BY Aggregate the records where these fields are the sameWHERE Keep only records that match these criteriaAND Additional WHERE criteriaHAVING When you use GROUP BY, the WHEREs turn to HAVINGs !?!UNION Combine two tables into one long tableUNION ALL Do a UNION, but don’t delete duplicate records (this is a “gotcha”)

Page 53: Art - advanced reporting techniques

TheART

ofVoyager Access

A SQL EXAMPLE

SELECT DISTINCTLAST_NAME AS DEADBEAT

FROMPATRON

INNER JOINCIRC_TRANSACTIONS

ON PATRON.PATRON_ID =CIRC_TRANSACTIONS.PATRON_ID

WHERE CURRENT_DUE_DATE < Date()AND OVERDUE_NOTICE_COUNT > “3”ORDER BY

CURRENT_DUE_DATE DESC;

Page 54: Art - advanced reporting techniques

TheART

ofVoyager Access

APPLICATION 8LOOK AT THE SQL VIEW FOR THE QUERY, “DUPLICATE ITEM BARCODES” AND TRY TO UNDERSTAND ALL OF IT. NOTE ANY QUESTIONS YOU HAVE FOR DISCUSSION.

LOOK AT THE SQL VIEW FOR THE QUERY, “REQUESTOR LIST” AND TRY TO UNDERSTAND ALL OF IT.

LOOK AT THE QUERY, “ITEM NOTE SEARCH” IN DESIGN VIEW. SEE IF YOU CAN CREATE CORRECT SQL CODE FOR THE QUERY. CHECK YOURSELF AGAINST THE SQL VIEW WHEN YOU HAVE FINISHED.

Page 55: Art - advanced reporting techniques

TheART

ofVoyager Access

BEFORE WE LEAVE SQL…

HARD TO TRANSLATE FROM ONE TO THE OTHER, BUT THEY ARE NOT COMPATIBLE.

ACCESS SQL:SELECT

LAST_NAMEFROM

PATRONINNER JOIN

PATRON_GROUPON PATRON.PATRON_GROUP_ID =

PATRON_GROUP.PATRON_GROUP_IDWHERE PATRON_GROUP_CODE Like “fac*”AND CREATE_DATE > #1/1/2001#AND HISTORICAL_CHARGES > “0”;

SQL*Plus:SELECT

LAST_NAMEFROM

PATRON,PATRON_GROUP

WHERE PATRON.PATRON_GROUP_ID =PATRON_GROUP.PATRON_GROUP_ID

AND PATRON_GROUP_CODE Like ‘fac%’AND CREATE_DATE > TO_DATE(‘1/1/2001','mm/dd/yyyy')AND HISTORICAL_CHARGES > 0;

THE VOYAGER SERVER USES SQL*Plus, WHICH IS SLIGHTLY DIFFERENT FROM ACCESS SQL. IT’S NOT TOO

Page 56: Art - advanced reporting techniques

TheART

ofVoyager Access

FULL CIRC HISTORY 5TO GET ALL OF THE CIRC STATS:

SELECT LOCATION_CODE, PATRON_GROUP_CODE, CHARGE_DATE AS TRANS_DATEFROM (PATRON_GROUP INNER JOIN CIRC_TRANS_ARCHIVE ON PATRON_GROUP.PATRON_GROUP_ID = CIRC_TRANS_ARCHIVE.PATRON_GROUP_ID) INNERJOIN LOCATION ON CIRC_TRANS_ARCHIVE.CHARGE_LOCATION = LOCATION.LOCATION_IDUNIONSELECT LOCATION_CODE, PATRON_GROUP_CODE, RENEW_DATE AS TRANS_DATEFROM ((RENEW_TRANS_ARCHIVE INNER JOIN CIRC_TRANS_ARCHIVE ON RENEW_TRANS_ARCHIVE.CIRC_TRANSACTION_ID = CIRC_TRANS_ARCHIVE.CIRC_TRANSACTION_ID) INNER JOIN PATRON_GROUP ON CIRC_TRANS_ARCHIVE.PATRON_GROUP_ID = PATRON_GROUP.PATRON_GROUP_ID) INNER JOIN LOCATION ON RENEW_TRANS_ARCHIVE.RENEW_LOCATION = LOCATION.LOCATION_IDUNIONSELECT LOCATION_CODE, PATRON_GROUP_CODE, CHARGE_DATE AS TRANS_DATEFROM (PATRON_GROUP INNER JOIN CIRC_TRANSACTIONS ON PATRON_GROUP.PATRON_GROUP_ID = CIRC_TRANSACTIONS.PATRON_GROUP_ID) INNER JOIN LOCATION ON CIRC_TRANSACTIONS.CHARGE_LOCATION = LOCATION.LOCATION_IDUNIONSELECT LOCATION_CODE, PATRON_GROUP_CODE, RENEW_DATE AS TRANS_DATEFROM ((RENEW_TRANSACTIONS INNER JOIN CIRC_TRANSACTIONS ON RENEW_TRANSACTIONS.CIRC_TRANSACTION_ID = CIRC_TRANSACTIONS.CIRC_TRANSACTION_ID) INNER JOIN PATRON_GROUP ON CIRC_TRANSACTIONS.PATRON_GROUP_ID = PATRON_GROUP.PATRON_GROUP_ID) INNER JOIN LOCATION ON RENEW_TRANSACTIONS.RENEW_LOCATION = LOCATION.LOCATION_ID

Page 57: Art - advanced reporting techniques

TheART

ofVoyager Access

WITH FULL CIRC HISTORY,NOW WHAT?

THE QUERY ON THE PREVIOUS SLIDE PRODUCES RAW DATA. RATHER THAN CHANGE THE QUERY EVERY TIME TO SELECT DATA, YOU COULD USE IT AS A SUBQUERY TO MORE SPECIFIC QUERIES.

Page 58: Art - advanced reporting techniques

TheART

ofVoyager Access

CIRCCHARGES_VWTHIS VIEW DOES HALF OF WHAT THE PREVIOUS SLIDE SHOWS -- THE TWO “CHARGE” PARTS. SHOULD YOU USE IT OR NOT?

IT DOES SOME OF WHAT YOU WANT, BUT IT MAY DO TOO MUCH. THE MORE TABLES IT USES AND THE MORE FIELDS IT GRABS, THE LONGER IT TAKES TO COMPLETE.

SELECT22 FIELDS (6 CALCULATED)

FROMCIRC_TRANSACTIONS,9 OTHER TABLES

UNIONSELECT

22 FIELDS (6 CALCULATED)FROM

CIRC_TRANS_ARCHIVE,9 OTHER TABLES;

Page 59: Art - advanced reporting techniques

TheART

ofVoyager Access

CIRCRENEW_VWTHERE IS ALSO A CIRCRENEW_VW THAT DOESN’T GET LINKED, BUT YOU CAN LINK IT MANUALLY.

Page 60: Art - advanced reporting techniques

TheART

ofVoyager Access

SEEING VIEW SOURCEYOU CAN SEE THE VIEW “SOURCE CODE” IN THE TEXT FIELD OF THE ALL_VIEWS TABLE THROUGH SQL*Plus:

SQL> set long 4000SQL> select text from all_views 2 where owner = 'WLAFDB' 3 and view_name = 'CIRCCHARGES_VW';

TEXT---------------------------------------------select c1.patron_group_id, pg1.patron_group_code, pg1.patron_group_name, c1.item_id, mi.mfhd_id, bm.bib_id,

...

Page 61: Art - advanced reporting techniques

TheART

ofVoyager Access

OPAC DISPLAYS

WHERE DO THESE FIELDS COME FROM?

Page 62: Art - advanced reporting techniques

TheART

ofVoyager Access

OPAC INDEX SCREEN

SEARCHPARM.SEARCHNAME

BIB_TEXT.[SEARCHPARM.DISPLAYFIELD1]

BIB_TEXT.[SEARCHPARM.DISPLAYFIELD2]

BIB_TEXT_DISPLAYFIELD.DISPLAY_NAME

LOCATION.LOCATION_DISPLAY_NAMEWHERE LOCATION_ID = MFHD_MASTER.LOCATION_ID

MFHD_MASTER.DISPLAY_CALL_NO

WEBVOYAGE opac.ini FILE [Title_Page] STANZA WHERE ITEM STATUS CODE CORRESPONDS TO ITEM_STATUS_TYPE.ITEM_STATUS_TYPE FOR ITEM_STATUS WHERE ITEM_ID IS FOR THIS ITEM (IF SINGLE ITEM TITLE)

BIB_INDEX.DISPLAY_HEADING

Page 63: Art - advanced reporting techniques

TheART

ofVoyager Access

OPAC RECORD SCREEN

WEBVOYAGE display[n].cfg FOR FIELDS SELECTED FROM MARC RECORD

TEXT FROM MARC FIELD, HOTLINKED IF HOTLINK FIELD IS PRESENT IN display[n].cfg

WEBVOYAGE displayh.cfg FOR FIELDS SELECTED FROM MFHD AND RELATED RECORDS

LOCATION.LOCATION_DISPLAY_NAME FOR ITEM.PERM_LOCATION

WEBVOYAGE OPAC.INI AS ON INDEX SCREEN

MFHD_MASTER.DISPLAY_CALL_NO

Page 64: Art - advanced reporting techniques

TheART

ofVoyager Access

APPLICATION 9DO AN AUTHOR SEARCH FOR “ZOLA” AND RETURN ALL OF THE FIELDS THAT YOU WOULD SEE IN AN OPAC TITLES LIST: AUTHOR, TITLE, DATE, LOCATION NAME, CALL NUMBER AND ITEM STATUS.

TO DO AN AUTHOR SEARCH, MATCH BIB_INDEX ENTRIES WITH AN INDEX_CODE THAT BEGINS WITH “1”. TITLE AND DATE (BEGIN_PUB_DATE) YOU CAN GET FROM BIB_TEXT. FOR ITEM STATUS, THE ITEM_STATUS_DESC FIELD IN THE ITEM_STATUS_TYPE TABLE IS SUFFICIENT.

SORTA LIKE THIS:

Page 65: Art - advanced reporting techniques

TheART

ofVoyager Access

SYSADMIN

MOST OF WHAT IS DONE THROUGH THE SYSADMIN CLIENT IS EITHER UNINTERESTING FOR REPORTING (E.G. “BIB DUPLICATION DETECTION PROFILES” OR “DEFAULT ADDRESS”) OR IT IS NATURALLY RELATED TO OTHER TABLES (E.G. “LOCATIONS” OR “VENDOR TYPES”).

Page 66: Art - advanced reporting techniques

TheART

ofVoyager Access

OPERATORS

UNLIKE MOST TABLES, THE KEY TO THE OPERATOR TABLE IS NOT NUMERIC, BUT TEXT. THIS WAY, YOU CAN READ IT EASILY IN OTHER RECORDS.

Page 67: Art - advanced reporting techniques

TheART

ofVoyager Access

XXX_OPID = OPERATOR_IDIN MANY TABLES, THE OPERATOR_ID FIELD HAS A NAME LIKE XXX_OPID. IT WON’T LINK AUTOMATICALLY TO THE OPERATOR_ID, BUT IT’S THE SAME THING.

DON’T CONFUSE THE CREATE_OPID IN THE OPERATOR TABLE WITH THE CREATE_OPID IN OTHER TABLES. THE ONE IN THE OPERATOR TABLE IS THE OPERATOR WHO CREATED THIS OPERATOR.

Page 68: Art - advanced reporting techniques

TheART

ofVoyager Access

OPERATOR PROFILESTO FIND OUT WHAT EACH OPERATOR IS AUTHORIZED TO DO, YOU TYPICALLY HAVE A THREE-TABLE JOIN:

THE SAME PATTERN APPLIES TO ACQ, CIRC, MEDIA AND THE MASTER PROFILE

Page 69: Art - advanced reporting techniques

TheART

ofVoyager Access

CIRC MATRIX

ZOOM

SEEING THE CIRC MATRIX ISN’T TERRIBLY HARD

Page 70: Art - advanced reporting techniques

TheART

ofVoyager Access

APPLICATION 10

CREATE A QUERY THAT SHOWS FOR EACH OPERATOR HOW MANY ITEMS THAT OPERATOR CREATED. INCLUDE THE LAST AND FIRST NAMES OF THE OPERATOR AND THE ITEM COUNT.

EASY AS PIE!

Page 71: Art - advanced reporting techniques

CREATING FORMS

IT’S EASY TO CREATE A FORM TO PRINT A REPORT. START BY CLICKING NEW FROM THE FORMS TAB. CHOOSE DESIGN VIEW OR THE FORM WIZARD.

Page 72: Art - advanced reporting techniques

CREATING FORMS

FIND THE COMMAND BUTTON ICON AND CLICK IT, THEN POSITION YOUR COMMAND BUTTON ON THE BLANK FORM.

Page 73: Art - advanced reporting techniques

CREATING FORMSWHEN YOU PLACE THE BUTTON, YOU’LL GET THE WIZARD. TO PRINT A REPORT CHOOSE PRINT REPORT.DUH!

Page 74: Art - advanced reporting techniques

CREATING FORMS

WHAT THE BUTTON LOOKS LIKE DEPENDS ON THE CHOICES YOU MAKE IN THE BUTTON WIZARD. I CHOSE AND SPECIFIED TEXT, BUT THE DEFAULT IS A PICTURE.

Page 75: Art - advanced reporting techniques

CREATING FORMS

SWITCH TO FORM VIEW TO SEE THE FORM AS A USER WOULD SEE IT. IF YOU DON’T LIKE IT, GO BACK TO DESIGN VIEW AND FIX IT BY MOVING THINGS OR CHANGING PROPERTIES.

Page 76: Art - advanced reporting techniques

TheART

ofVoyager Access

HOW THE FORM WORKS

THE FORM’S PROPERTIES INCLUDE AN EVENT PROCEDURE THAT RUNS WHEN THE BUTTON IS CLICKED.

Page 77: Art - advanced reporting techniques

TheART

ofVoyager Access

EVENT PROCEDURES

EVENT PROCEDURES ARE VISUAL BASIC SUBROUTINES WITH SPECIAL NAMES. BY STUDYING THEM A BIT, YOU MIGHT LEARN ENOUGH VB TO WRITE YOUR OWN FUNCTIONS.

Page 78: Art - advanced reporting techniques

TheART

ofVoyager Access

APPLICATION 11CREATE A FORM TO PRINT THE “ITEM STATUS - WITHDRAWN” REPORT. LOOK AT THE VISUAL BASIC SOURCE AND CHANGE IT TO RUN THE “ITEM STATUS - IN TRANSIT” REPORT INSTEAD.

YOU JUST SAW HOW TO CREATE THE FORM. ONCE IT’S THERE, YOU CAN SEE THE VISUAL BASIC BY CLICKING ON THE ELLIPSIS AFTER THE “ON CLICK” PROPERTY EVENT PROCEDURE. YOU MAY NOT UNDERSTAND ALL OF THE VISUAL BASIC, BUT YOU CAN PROBABLY SEE FAIRLY QUICKLY HOW TO CHANGE IT AS REQUESTED. DON’T CHANGE ANYTHING ELSE IF YOU DON’T UNDERSTAND IT.

Page 79: Art - advanced reporting techniques

TheART

ofVoyager Access

WHAT ELSE?

IS THERE ANYTHING WE DIDN’T COVER THAT YOU WOULD LIKE TO DISCUSS?

PLEASE FILL OUT EVALUATION FORMS!

ALWAYS FEEL FREE TO CONTACT ME:[email protected]

“Please, sir, may I have some more?”