SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Delicious Data:
Automated Techniques for
   Complex Reports


             Presented by
    Jeff Godin and Benjamin Shum
How NOT to run reports...
Planning the framework
Planning the framework

   SQL Query
     Report
Planning the framework

   SQL Query   Export Results
     Report       to CSV
Planning the framework

   SQL Query    Export Results
     Report        to CSV




    Convert
   CSV to XLS
Planning the framework

   SQL Query    Export Results
     Report        to CSV




    Convert       Email XLS
   CSV to XLS     to Library
Planning the framework

   SQL Query      Export Results
     Report          to CSV

           Schedule as
            Cron Job

    Convert          Email XLS
   CSV to XLS        to Library
Some Strategies


Schedule as   Use our experience
 Cron Job     setting up crontab
SQL Query        Use our existing
   Report          SQL reports



Export Results     CSV is a standard
   to CSV        format to work with
Convert
CSV to XLS    Find a converter




Email XLS
             Find an email client
to Library
Implementation


• Can find online at
  http://evergreen-ils.org/dokuwiki/doku.php?
  id=scratchpad:automated_sql_reports
Future of the work

• Additional formatting
• Dealing with reports with zero results
• Adding new reports
• Implementing more refinements
No database access?

• Create scheduled reports
• Completion notification via e-mail
• Script pulls report data
• Import and process
Don’t do this unless
   you have to
Reports as Exports

• Create template that outputs raw data
• Schedule report
• Enable e-mail notification to special address
Act on the e-mail

• fetchmail -> procmail -> perl
• Report data is automatically downloaded
• Within a minute or so
act-on-mail.pl
#!/usr/bin/perl

# called by procmail, and receives the mail message on stdin

use strict; use warnings;

my $url;

while (<>) {

    if ($_ =~ /https://reporter/) {

    
     $url = $_;

    
     last;

    }
}

system("/home/stats/bin/fetch-report.pl", "-u", $url);
fetch-report.pl logic

• Fetch URL like:
  https://host/reporter/[...]/report-data.html

•   Automatically log in if needed (keep a cookie)

•   Download report-data.csv and save to output dir
imports.ini example 1
[general]
dir=/home/stats/reports
state_dir=/home/stats/state

[group holdratio]
name=Hold Ratio
file1=holds_outstanding.csv
file2=holdable_copies.csv
file3=bib_info.csv
command=psql -f /home/stats/sql/holds_init.sql
#post-command=/home/stats/bin/mail-holdratio.pl
imports.ini example 2
[general]
dir=/home/stats/reports
state_dir=/home/stats/state

[group items_for_export]
name=Items for Export
file1=items_for_export.csv
command=psql -f /home/stats/sql/items_for_export.sql
post-command=/home/stats/bin/export_bibs.pl -f /home/stats/
output/bre_ids.csv
Import script overview
• Runs from cron
• Have all input files been updated since the
  last time I ran this import?
• Run import
• Update timestamp
• Run post-import command
The import process

• drop table
• create table
• import data
• process to output
The post-import

• Send the report output somewhere
• E-mail notify that “report’s ready at
  someurl”
• Trigger something like a bib export of the
  records that were output
One more thing...


• Don’t forget to delete your scheduled
  report output
Custom reporting
views exposed in the
        IDL
SQL views in the IDL

• Exposed via reporting interface
• Good for on-demand reporting
• Don’t break the IDL
 • xmllint is your friend
 • pick a class id unlikely to collide
<class id="rlcd"
   controller="open-ils.cstore open-ils.pcrud open-
ils.reporter-store"
   oils_obj:fieldmapper="reporter::last_copy_deleted"
   oils_persist:readonly="true"
   reporter:core="true"
   reporter:label="Last Copy Delete Time" >
<oils_persist:source_definition>

SELECT b.id,
    MAX(dcp.edit_date) AS last_delete_date

FROM biblio.record_entry b
   JOIN asset.call_number cn ON (cn.record = b.id)
   JOIN asset.copy dcp ON (cn.id = dcp.call_number)

WHERE NOT b.deleted

GROUP BY b.id

HAVING SUM( CASE WHEN NOT dcp.deleted THEN 1
ELSE 0 END) = 0
<!-- continued -->
     <fields oils_persist:primary="id"
oils_persist:sequence="biblio.record_entry">
        <field reporter:label="Record ID" name="id"
reporter:datatype="id"/>
        <field reporter:label="Delete Date/Time"
name="last_delete_date" reporter:datatype="timestamp"/>
     </fields>
     <links>
        <link field="id" reltype="has_a" key="id" map=""
class="bre"/>
     </links>
<!-- continued -->
     <permacrud xmlns="http://open-ils.org/spec/opensrf/
IDL/permacrud/v1">
       <actions>
          <retrieve/>
       </actions>
     </permacrud>
  </class>
The Future

• General third party reporting frameworks?
• Library Dashboards?
• Your Ideas?
Photo Credits
Surrounded by papers by Flickr user suratlozowick
http://www.flickr.com/photos/suratlozowick/
4522926028/
Thanks!

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Sqoop on Spark for Data Ingestion
Sqoop on Spark for Data IngestionSqoop on Spark for Data Ingestion
Sqoop on Spark for Data Ingestion
 
Operational Tips for Deploying Spark by Miklos Christine
Operational Tips for Deploying Spark by Miklos ChristineOperational Tips for Deploying Spark by Miklos Christine
Operational Tips for Deploying Spark by Miklos Christine
 
Correctness and Performance of Apache Spark SQL with Bogdan Ghit and Nicolas ...
Correctness and Performance of Apache Spark SQL with Bogdan Ghit and Nicolas ...Correctness and Performance of Apache Spark SQL with Bogdan Ghit and Nicolas ...
Correctness and Performance of Apache Spark SQL with Bogdan Ghit and Nicolas ...
 
Project Tungsten Phase II: Joining a Billion Rows per Second on a Laptop
Project Tungsten Phase II: Joining a Billion Rows per Second on a LaptopProject Tungsten Phase II: Joining a Billion Rows per Second on a Laptop
Project Tungsten Phase II: Joining a Billion Rows per Second on a Laptop
 
Flink Forward SF 2017: Malo Deniélou - No shard left behind: Dynamic work re...
Flink Forward SF 2017: Malo Deniélou -  No shard left behind: Dynamic work re...Flink Forward SF 2017: Malo Deniélou -  No shard left behind: Dynamic work re...
Flink Forward SF 2017: Malo Deniélou - No shard left behind: Dynamic work re...
 
Data all over the place! How SQL and Apache Calcite bring sanity to streaming...
Data all over the place! How SQL and Apache Calcite bring sanity to streaming...Data all over the place! How SQL and Apache Calcite bring sanity to streaming...
Data all over the place! How SQL and Apache Calcite bring sanity to streaming...
 
H2O World - Sparkling Water - Michal Malohlava
H2O World - Sparkling Water - Michal MalohlavaH2O World - Sparkling Water - Michal Malohlava
H2O World - Sparkling Water - Michal Malohlava
 
Degrading Performance? You Might be Suffering From the Small Files Syndrome
Degrading Performance? You Might be Suffering From the Small Files SyndromeDegrading Performance? You Might be Suffering From the Small Files Syndrome
Degrading Performance? You Might be Suffering From the Small Files Syndrome
 
Materialized Column: An Efficient Way to Optimize Queries on Nested Columns
Materialized Column: An Efficient Way to Optimize Queries on Nested ColumnsMaterialized Column: An Efficient Way to Optimize Queries on Nested Columns
Materialized Column: An Efficient Way to Optimize Queries on Nested Columns
 
Spark streaming state of the union
Spark streaming state of the unionSpark streaming state of the union
Spark streaming state of the union
 
Spark Summit EU talk by Shay Nativ and Dvir Volk
Spark Summit EU talk by Shay Nativ and Dvir VolkSpark Summit EU talk by Shay Nativ and Dvir Volk
Spark Summit EU talk by Shay Nativ and Dvir Volk
 
Towards sql for streams
Towards sql for streamsTowards sql for streams
Towards sql for streams
 
Mapping Data Flows Perf Tuning April 2021
Mapping Data Flows Perf Tuning April 2021Mapping Data Flows Perf Tuning April 2021
Mapping Data Flows Perf Tuning April 2021
 
Cost-Based Optimizer in Apache Spark 2.2
Cost-Based Optimizer in Apache Spark 2.2 Cost-Based Optimizer in Apache Spark 2.2
Cost-Based Optimizer in Apache Spark 2.2
 
How Adobe Does 2 Million Records Per Second Using Apache Spark!
How Adobe Does 2 Million Records Per Second Using Apache Spark!How Adobe Does 2 Million Records Per Second Using Apache Spark!
How Adobe Does 2 Million Records Per Second Using Apache Spark!
 
Parallelizing Existing R Packages with SparkR
Parallelizing Existing R Packages with SparkRParallelizing Existing R Packages with SparkR
Parallelizing Existing R Packages with SparkR
 
Structured Streaming Use-Cases at Apple
Structured Streaming Use-Cases at AppleStructured Streaming Use-Cases at Apple
Structured Streaming Use-Cases at Apple
 
Airflow at lyft
Airflow at lyftAirflow at lyft
Airflow at lyft
 
Introduction to Spark Streaming
Introduction to Spark StreamingIntroduction to Spark Streaming
Introduction to Spark Streaming
 
Automated Spark Deployment With Declarative Infrastructure
Automated Spark Deployment With Declarative InfrastructureAutomated Spark Deployment With Declarative Infrastructure
Automated Spark Deployment With Declarative Infrastructure
 

Andere mochten auch

Andere mochten auch (8)

What's New With Open Source (CLA2011)
What's New With Open Source (CLA2011)What's New With Open Source (CLA2011)
What's New With Open Source (CLA2011)
 
The Perils of Perception in 2016: Ipsos MORI
The Perils of Perception in 2016: Ipsos MORIThe Perils of Perception in 2016: Ipsos MORI
The Perils of Perception in 2016: Ipsos MORI
 
Designing Teams for Emerging Challenges
Designing Teams for Emerging ChallengesDesigning Teams for Emerging Challenges
Designing Teams for Emerging Challenges
 
UX, ethnography and possibilities: for Libraries, Museums and Archives
UX, ethnography and possibilities: for Libraries, Museums and ArchivesUX, ethnography and possibilities: for Libraries, Museums and Archives
UX, ethnography and possibilities: for Libraries, Museums and Archives
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with Data
 
3 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 20173 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 2017
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 

Ähnlich wie EG Reports - Delicious Data

Many Faces Of Bi Publisher In Oracle Ebs
Many Faces Of Bi Publisher In Oracle EbsMany Faces Of Bi Publisher In Oracle Ebs
Many Faces Of Bi Publisher In Oracle Ebs
Hossam El-Faxe
 
Ldap Synchronization Connector @ 2011.RMLL
Ldap Synchronization Connector @ 2011.RMLLLdap Synchronization Connector @ 2011.RMLL
Ldap Synchronization Connector @ 2011.RMLL
sbahloul
 
DMann-SQLDeveloper4Reporting
DMann-SQLDeveloper4ReportingDMann-SQLDeveloper4Reporting
DMann-SQLDeveloper4Reporting
David Mann
 

Ähnlich wie EG Reports - Delicious Data (20)

Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理
 
Automating Workflows for Analytics Pipelines
Automating Workflows for Analytics PipelinesAutomating Workflows for Analytics Pipelines
Automating Workflows for Analytics Pipelines
 
Evolutionary db development
Evolutionary db development Evolutionary db development
Evolutionary db development
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performance
 
(BDT404) Large-Scale ETL Data Flows w/AWS Data Pipeline & Dataduct
(BDT404) Large-Scale ETL Data Flows w/AWS Data Pipeline & Dataduct(BDT404) Large-Scale ETL Data Flows w/AWS Data Pipeline & Dataduct
(BDT404) Large-Scale ETL Data Flows w/AWS Data Pipeline & Dataduct
 
Unbreakable Sharepoint 2016 With SQL Server 2016 availability groups
Unbreakable Sharepoint 2016 With SQL Server 2016 availability groupsUnbreakable Sharepoint 2016 With SQL Server 2016 availability groups
Unbreakable Sharepoint 2016 With SQL Server 2016 availability groups
 
Many Faces Of Bi Publisher In Oracle Ebs
Many Faces Of Bi Publisher In Oracle EbsMany Faces Of Bi Publisher In Oracle Ebs
Many Faces Of Bi Publisher In Oracle Ebs
 
Ldap Synchronization Connector @ 2011.RMLL
Ldap Synchronization Connector @ 2011.RMLLLdap Synchronization Connector @ 2011.RMLL
Ldap Synchronization Connector @ 2011.RMLL
 
DW on AWS
DW on AWSDW on AWS
DW on AWS
 
AWS July Webinar Series: Amazon redshift migration and load data 20150722
AWS July Webinar Series: Amazon redshift migration and load data 20150722AWS July Webinar Series: Amazon redshift migration and load data 20150722
AWS July Webinar Series: Amazon redshift migration and load data 20150722
 
Fast federated SQL with Apache Calcite
Fast federated SQL with Apache CalciteFast federated SQL with Apache Calcite
Fast federated SQL with Apache Calcite
 
BDA311 Introduction to AWS Glue
BDA311 Introduction to AWS GlueBDA311 Introduction to AWS Glue
BDA311 Introduction to AWS Glue
 
A smarter Pig: Building a SQL interface to Apache Pig using Apache Calcite
A smarter Pig: Building a SQL interface to Apache Pig using Apache CalciteA smarter Pig: Building a SQL interface to Apache Pig using Apache Calcite
A smarter Pig: Building a SQL interface to Apache Pig using Apache Calcite
 
Loading Data into Redshift
Loading Data into RedshiftLoading Data into Redshift
Loading Data into Redshift
 
Unbreakable SharePoint 2016 with SQL Server 2016 Always On Availability groups
Unbreakable SharePoint 2016 with SQL Server 2016 Always On Availability groupsUnbreakable SharePoint 2016 with SQL Server 2016 Always On Availability groups
Unbreakable SharePoint 2016 with SQL Server 2016 Always On Availability groups
 
DMann-SQLDeveloper4Reporting
DMann-SQLDeveloper4ReportingDMann-SQLDeveloper4Reporting
DMann-SQLDeveloper4Reporting
 
AutoScaling and Drupal
AutoScaling and DrupalAutoScaling and Drupal
AutoScaling and Drupal
 
GGX 2014 - Grails and the real time world
GGX 2014 - Grails and the real time worldGGX 2014 - Grails and the real time world
GGX 2014 - Grails and the real time world
 
Using Databricks as an Analysis Platform
Using Databricks as an Analysis PlatformUsing Databricks as an Analysis Platform
Using Databricks as an Analysis Platform
 
Creating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at ScaleCreating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at Scale
 

Kürzlich hochgeladen

1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
QucHHunhnh
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
ciinovamais
 
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdfVishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
ssuserdda66b
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
heathfieldcps1
 

Kürzlich hochgeladen (20)

Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...
 
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17  How to Extend Models Using Mixin ClassesMixin Classes in Odoo 17  How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Fostering Friendships - Enhancing Social Bonds in the Classroom
Fostering Friendships - Enhancing Social Bonds  in the ClassroomFostering Friendships - Enhancing Social Bonds  in the Classroom
Fostering Friendships - Enhancing Social Bonds in the Classroom
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdf
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdfVishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentation
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 
Spatium Project Simulation student brief
Spatium Project Simulation student briefSpatium Project Simulation student brief
Spatium Project Simulation student brief
 
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 

EG Reports - Delicious Data

  • 1. Delicious Data: Automated Techniques for Complex Reports Presented by Jeff Godin and Benjamin Shum
  • 2. How NOT to run reports...
  • 4. Planning the framework SQL Query Report
  • 5. Planning the framework SQL Query Export Results Report to CSV
  • 6. Planning the framework SQL Query Export Results Report to CSV Convert CSV to XLS
  • 7. Planning the framework SQL Query Export Results Report to CSV Convert Email XLS CSV to XLS to Library
  • 8. Planning the framework SQL Query Export Results Report to CSV Schedule as Cron Job Convert Email XLS CSV to XLS to Library
  • 9. Some Strategies Schedule as Use our experience Cron Job setting up crontab
  • 10. SQL Query Use our existing Report SQL reports Export Results CSV is a standard to CSV format to work with
  • 11. Convert CSV to XLS Find a converter Email XLS Find an email client to Library
  • 12. Implementation • Can find online at http://evergreen-ils.org/dokuwiki/doku.php? id=scratchpad:automated_sql_reports
  • 13. Future of the work • Additional formatting • Dealing with reports with zero results • Adding new reports • Implementing more refinements
  • 14. No database access? • Create scheduled reports • Completion notification via e-mail • Script pulls report data • Import and process
  • 15. Don’t do this unless you have to
  • 16. Reports as Exports • Create template that outputs raw data • Schedule report • Enable e-mail notification to special address
  • 17. Act on the e-mail • fetchmail -> procmail -> perl • Report data is automatically downloaded • Within a minute or so
  • 18. act-on-mail.pl #!/usr/bin/perl # called by procmail, and receives the mail message on stdin use strict; use warnings; my $url; while (<>) { if ($_ =~ /https://reporter/) { $url = $_; last; } } system("/home/stats/bin/fetch-report.pl", "-u", $url);
  • 19. fetch-report.pl logic • Fetch URL like: https://host/reporter/[...]/report-data.html • Automatically log in if needed (keep a cookie) • Download report-data.csv and save to output dir
  • 20. imports.ini example 1 [general] dir=/home/stats/reports state_dir=/home/stats/state [group holdratio] name=Hold Ratio file1=holds_outstanding.csv file2=holdable_copies.csv file3=bib_info.csv command=psql -f /home/stats/sql/holds_init.sql #post-command=/home/stats/bin/mail-holdratio.pl
  • 21. imports.ini example 2 [general] dir=/home/stats/reports state_dir=/home/stats/state [group items_for_export] name=Items for Export file1=items_for_export.csv command=psql -f /home/stats/sql/items_for_export.sql post-command=/home/stats/bin/export_bibs.pl -f /home/stats/ output/bre_ids.csv
  • 22. Import script overview • Runs from cron • Have all input files been updated since the last time I ran this import? • Run import • Update timestamp • Run post-import command
  • 23. The import process • drop table • create table • import data • process to output
  • 24. The post-import • Send the report output somewhere • E-mail notify that “report’s ready at someurl” • Trigger something like a bib export of the records that were output
  • 25. One more thing... • Don’t forget to delete your scheduled report output
  • 27. SQL views in the IDL • Exposed via reporting interface • Good for on-demand reporting • Don’t break the IDL • xmllint is your friend • pick a class id unlikely to collide
  • 28. <class id="rlcd" controller="open-ils.cstore open-ils.pcrud open- ils.reporter-store" oils_obj:fieldmapper="reporter::last_copy_deleted" oils_persist:readonly="true" reporter:core="true" reporter:label="Last Copy Delete Time" >
  • 29. <oils_persist:source_definition> SELECT b.id, MAX(dcp.edit_date) AS last_delete_date FROM biblio.record_entry b JOIN asset.call_number cn ON (cn.record = b.id) JOIN asset.copy dcp ON (cn.id = dcp.call_number) WHERE NOT b.deleted GROUP BY b.id HAVING SUM( CASE WHEN NOT dcp.deleted THEN 1 ELSE 0 END) = 0
  • 30. <!-- continued --> <fields oils_persist:primary="id" oils_persist:sequence="biblio.record_entry"> <field reporter:label="Record ID" name="id" reporter:datatype="id"/> <field reporter:label="Delete Date/Time" name="last_delete_date" reporter:datatype="timestamp"/> </fields> <links> <link field="id" reltype="has_a" key="id" map="" class="bre"/> </links>
  • 31. <!-- continued --> <permacrud xmlns="http://open-ils.org/spec/opensrf/ IDL/permacrud/v1"> <actions> <retrieve/> </actions> </permacrud> </class>
  • 32. The Future • General third party reporting frameworks? • Library Dashboards? • Your Ideas?
  • 33. Photo Credits Surrounded by papers by Flickr user suratlozowick http://www.flickr.com/photos/suratlozowick/ 4522926028/

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n