Transcript Slide 1

SQL for Elite!

Mining the Enterprise Database John Ashley Financial Systems Administrator Moore & Van Allen PLLC

♦ Database Structures ♦ Major Tables & Indices ♦ SQL Basics ♦ Joins ♦ Query Examples ♦ Tips & Tricks

Agenda

2

Database Structures

♦ Elite Documentation – Heavy SQL users, print a copy out to have handy – See table structures in Query Analyzer or Management Studio’s Object Explorer 3

Major Elite Tables & Indices

♦ matter – mmatter, mclient, mbillaty ♦ client – clnum, crelated ♦ timekeep – tkinit ♦ ledger – lindex, lmatter, llcode, lbatch ♦ timecard – tindex, tmatter, ttk, tbatch ♦ cost – cindex, cmatter, ctk, ccode, cbatch ♦ batch – bbatch ♦ trsttran – trindex, tmatter, tracct, trbatch ♦ prohead – phindex, phmatter, phbatch ♦ udf – udfindex, udjoin ♦ ap – apnum ♦ apaddr – apnum, apaddid ♦ apvo – vo_id, apnum, apaddid ♦ csd – cknum, baid, apnum 4

SQL Basics

♦ SELECT – Identifies the columns in the resulting output ♦ FROM – Identifies the source tables ♦ WHERE – Applies criteria to the output ♦ GROUP BY – Applies grouping when using summary functions ♦ HAVING – Applies criteria based on GROUP BY ♦ ORDER BY – Applies sorting to the output 5

Aliases

♦ Alias a column or table within the SELECT or FROM clause – SELECT matter.mmatter matnum … – SELECT matter.mmatter AS matnum … ♦ Reference the columns using the table alias – Helpful when joining the same table multiple times in the same query 6

♦ INNER JOIN – Returns only records from two tables that match ♦ LEFT OUTER JOIN – Returns all records from left table and any records from the right table that match ♦ RIGHT OUTER JOIN – Returns all records from the right table and any records from the left table that match – Usually best to rewrite as a LOJ

Joins

7

Methods of Joining

♦ Join in the WHERE clause – SELECT client.clname1, matter.mdesc1

FROM client, matter WHERE client.clnum = matter.mclient

– Inner Join (=); Left Outer Join (*=), Right Outer Join (=*) ♦ Join in the FROM clause – SELECT client.clname1, matter.mdesc1

FROM client INNER JOIN matter ON client.clnum = matter.mclient

– Preferred Method ◊ Easier to read ◊ Helps avoid Cartesian joins ◊ ANSI Standard 8

Left Outer Join Sample

♦ Number of open matters by billing attorney for all Senior Partners Inner Join Outer Join (correct) 9

Querying Tip #1

♦ Build queries one table at a time – Start with the specific population ◊ Information on Non-Terminated Associates SELECT * FROM timekeep WHERE tktitle = ‘Associate’ AND tktmdate IS NULL ◊ Note the number of records returned – Add additional tables – Ensure record count remains constant 10

Criteria in Outer Joins

♦ Use criteria within the join – Often necessary with outer joins Criteria in WHERE Criteria in FROM 66 records 67 records 11

Limiting Result Sets

♦ Two options to limit your result set to a specific number of records – Top 10 Members by worked hours for 2009 TOP SET ROWCOUNT 12

♦ UDF fields in Elite can be set up for many different types of records – Each UDF has an index and is tied to a UDF type (i.e. matter, client, timekeep, vendor, etc.) – For validated fields, it is easy to find the index number by pulling up a record in the master file

UDF Fields

13

UDF Fields, cont.

♦ UDF list can be printed from Elite under Setups / Other / User Defined Fields ♦ Alternatively, the code below will give you a list of UDFs sorted by type and line # – Keep handy if you will be querying on UDFs often 14

UDF Fields, cont.

♦ UDF values are stored in the

udf

table ♦ UDF validation descriptions are stored in the

udfval

table ♦ Example Query: – Firms that use Whitehill likely have a matter udf called Total Hours Billing that displays the total hours on an invoice. How many open matters are set to display or not display Total Hours?

15

Summary Tables

♦ Summary tables in Elite are used for Inquiry.

– matths ◊ Summary statistics by matter by period – mattimhs ◊ Summary statistics by matter by working timekeeper by period – timewahs ◊ Summary statistics by working timekeeper by period ♦ Make sure you pick the right column for the exact data that you need 16

Summary Table Examples

♦ Year-to-date Collections for all matters of a client – Collections will match Matter Inquiry in Elite 17

Summary Table, cont.

♦ Top 10 Clients by worked hours for a timekeeper 18

periodt Table

♦ When querying across multiple periods, I highly recommend using the periodt table.

Not using periodt Using periodt 19

Transaction Volume Samples

♦ It is often helpful to see how much data is being processed within Elite over a given date range – Trust Volume Example – Number and absolute dollar value of transactions by period 20

Transaction Volumes, cont.

♦ Billing volume example – Number, amount and average of invoices processed by billing operator 21

Cost Write-down Sample

♦ Clients with more than $1,000 in cost write-downs for the current period 22

Time Card Sample

♦ Latest time entry and timekeeper by client – Use sub-queries 23

Net Investment Sample

♦ WIP & AR by client and matter 24

AP Voucher Sample

♦ This query will return any vouchers that may be duplicates 25

AP Voucher / Cost Sample

♦ This query will return all unbilled client costs for a specific vendor 26

Tips & Tricks

♦ Use a read-only login when using Query Analyzer or SQL Server Management Studio – You don’t want to make any inadvertent changes ♦ Use UPPER-CASE for all SQL specific words – This makes queries much easier to read when revisiting later ♦ Use TOP clause to limit results when testing – SELECT TOP 100 * FROM client ORDER BY clnum – This is especially helpful when determining which columns to pull into result set 27

♦ Comment your code!

– use two dashes to comment out the remainder of a line – use slash star ( /* ) to begin commenting and star slash ( */ ) to close comment

Tips & Tricks

28

Acknowledgements

♦ ILTA ♦ Moore & Van Allen ♦ ILTA Thomson Elite Listserv participants ♦ Elite 29

Contact Info

John Ashley Financial Systems Administrator Moore & Van Allen PLLC [email protected]

704-331-3578 30