{"id":26477571,"url":"https://github.com/splware/esproc_reporting","last_synced_at":"2025-03-20T00:47:42.331Z","repository":{"id":269639375,"uuid":"908048644","full_name":"SPLWare/esProc_Reporting","owner":"SPLWare","description":"A middleware for report data preparation that effiently manages endless report development.","archived":false,"fork":false,"pushed_at":"2025-02-20T11:31:13.000Z","size":10,"stargazers_count":3,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-20T12:29:20.605Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.esproc.com/esproc-for-Reporting/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SPLWare.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-25T01:31:50.000Z","updated_at":"2025-02-20T11:31:17.000Z","dependencies_parsed_at":"2025-02-06T02:26:13.765Z","dependency_job_id":"74cdbfec-6025-4759-874d-1c1244e59419","html_url":"https://github.com/SPLWare/esProc_Reporting","commit_stats":null,"previous_names":["splware/esproc_reporting"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SPLWare%2FesProc_Reporting","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SPLWare%2FesProc_Reporting/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SPLWare%2FesProc_Reporting/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SPLWare%2FesProc_Reporting/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SPLWare","download_url":"https://codeload.github.com/SPLWare/esProc_Reporting/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244530998,"owners_count":20467388,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-20T00:47:41.823Z","updated_at":"2025-03-20T00:47:42.314Z","avatar_url":"https://github.com/SPLWare.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=center\u003e\n\u003ca href=\"http://www.esproc.com\" target=\"_blank\" \u003e\u003cimg src=\"https://img.shields.io/badge/-esProc-red?style=social\u0026logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0i5Zu+5bGCXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDMuNCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDMuNCA2NDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6IzI4ODFFRTt9DQo8L3N0eWxlPg0KPGc+DQoJPGc+DQoJCTxnPg0KCQkJPGc+DQoJCQkJPGc+DQoJCQkJCTxnPg0KCQkJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTE4LDQxLjhsLTUuNCwxLjVDMy41LDQ1LjYtMS45LDU1LDAuNiw2NGwwLDBMMjIsNTguM2wwLjctMC4yYzMuOS0xLjMsNi4zLTQuOSw1LjgtOC45DQoJCQkJCQkJYy0wLjEtMC45LTAuMS0xLjEtMC4yLTEuNkMyNyw0My4xLDIyLjQsNDAuNiwxOCw0MS44eiIvPg0KCQkJCQk8L2c+DQoJCQkJPC9nPg0KCQkJPC9nPg0KCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTI4LDI1LjRsLTcuNS0xLjZjLTIuNS0xLTUuOS0yLjEtNy4zLTcuMmMtMS0zLjcsMC4yLTcuNCwyLjctOS45QzguOSw5LDQuNCwxNS40LDQuNCwyMi44DQoJCQkJYzAsNy41LDQuOCwxMy42LDExLjksMTUuN2MwLDAsNS4yLDEuNCw2LjcsMS45YzEuOSwwLjYsNS42LDIuMyw3LDYuOGMwLjEsMC4yLDAuMywxLjMsMC4zLDEuOGMwLjIsMi45LTAuNyw1LjYtMi40LDcuNg0KCQkJCWM2LjgtMi41LDExLjMtOC45LDExLjItMTYuMkMzOC44LDMzLjIsMzUuMiwyNy42LDI4LDI1LjR6Ii8+DQoJCTwvZz4NCgk8L2c+DQoJPGc+DQoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0zMS41LDEyLjlMMzEuNSwxMi45YzAtMC4yLTAuMy0xLjYtMC41LTEuOGwxMS45LTMuMmMwLjEtMC42LDAuMi0xLjMsMC4yLTEuOWwtMTYuOCw0LjQNCgkJCWMwLjcsMC42LDEuMywxLjQsMS41LDIuM2MwLjEsMC4yLDAuMSwwLjMsMC4yLDAuN2MwLDAsMCwwLjEsMCwwLjJjMC4yLDIuMy0xLjEsNC40LTMuNCw1LjFsLTAuNSwwLjFjLTIuNSwwLjYtNS4xLTEtNS44LTMuNQ0KCQkJczAuNi01LDIuOS01LjhjMC4xLDAsMC4yLTAuMSwwLjMtMC4xbDIxLjQtNS43YzAuMSwwLDAuMSwwLDAuMiwwYy0wLjEtMS4xLTAuMi0yLjQtMC42LTMuN2wwLDBMMjEuNCw1LjdsLTAuNywwLjINCgkJCWMtMy45LDEuMy02LjMsNC45LTUuOCw4LjljMC4xLDAuNSwwLDAuNiwwLjEsMC44YzAsMCwwLTAuMSwwLjEsMC44YzEuMyw0LjQsNS44LDcsMTAuMyw1LjhsNS40LTEuNWMzLjctMSw2LjYtMy4xLDguOC01LjgNCgkJCUwzMSwxNy4yYzAuMy0wLjgsMC42LTEuNiwwLjYtMi40bDkuNy0yLjZjMC4zLTAuNywwLjctMS40LDAuOS0yLjFMMzEuNSwxMi45QzMxLjUsMTMuMSwzMS41LDEzLDMxLjUsMTIuOXoiLz4NCgk8L2c+DQo8L2c+DQo8L3N2Zz4NCg==\" style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e \n\u003ca href=\"http://c.esproc.com\" target=\"_blank\" \u003e\u003cimg src=\"https://img.shields.io/badge/-Community-red?style=social\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAXNJREFUWEftlitLRUEURtdVEVExWUx2qxgNVouoXYtNDP4Tw20WtftAsItZrHaTYBJREZ98MAc248wcZxi4CGfSeezHmm/23kyPAa/egPPTAXQK/FsFBP7ldVDRZoqcgO9I+2bHy3ZIJBfTCPCZM1tqAxwBmzUBrNQNbEx+5b0B5oEN4NCBrAMnMaiUAuPAs3HU82TLEZwBqwGbaJ4UgKQ8CFR6SoEl4LIWwCJwZQCegKkWBWLHVKSActvdzgG3DqitDf3/VQBskBDALrDnAKXUo3ueAF5KinAf2DKOmnzD7l214bdbA6hC1XHZNQa8hSBC0hwDa57xDHDvvvWB7ciOZoE79+8CWPbsBGc769eFxJdWIKcuyIdRoG3W7AAC1dJkHDIOo8B78+4rEBo8r4AkLFk6Jk3HaeDBBTgHVmIAfpJUz+cAFXVBreQCvQYW/lqEjV1NAMUMqpAaxQMHyDnjYtuS+0BxstwaqJooFqxToFPgB5FuPCEB6XK2AAAAAElFTkSuQmCC\" style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://www.esproc.com/download-esproc\" target=\"_blank\" \u003e\u003cimg src=\"https://img.shields.io/badge/-Download-red?style=social\u0026logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0i5Zu+5bGCXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMTYgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE2IDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMEY5RTAyO3N0cm9rZS13aWR0aDowLjc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDt9DQoJLnN0MXtmaWxsOiMwRjlFMDI7c3Ryb2tlOiMwRjlFMDI7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30NCgkuc3Qye2ZpbGw6bm9uZTtzdHJva2U6I0ZGRkZGRjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7fQ0KPC9zdHlsZT4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMy44LDMuOWwtMS43LTIuMkgzLjlMMi4yLDMuOSIvPg0KPHBhdGggY2xhc3M9InN0MSIgZD0iTTIsNC4zQzIsNCwyLjMsMy43LDIuNywzLjdoMTAuN0MxMy43LDMuNywxNCw0LDE0LDQuM3Y5YzAsMC42LTAuNCwxLTEsMUgzYy0wLjYsMC0xLTAuNC0xLTFWNC4zeiIvPg0KPHBhdGggY2xhc3M9InN0MiIgZD0iTTEwLjcsOUw4LDExLjdMNS4zLDkiLz4NCjxwYXRoIGNsYXNzPSJzdDIiIGQ9Ik04LDYuM3Y1LjMiLz4NCjwvc3ZnPg0K\"  style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://twitter.com/esProc_SPL\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/-Twitter-red?style=social\u0026logo=X\" style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://discord.gg/2bkGwqTj\" target=\"_blank\" \u003e\u003cimg src=\"https://img.shields.io/badge/-discord-red?style=social\u0026logo=discord\"  style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://www.reddit.com/r/esProcSPL\" target=\"_blank\" \u003e\u003cimg src=\"https://img.shields.io/badge/-reddit-red?style=social\u0026logo=reddit\" style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://blog.esproc.com\" target=\"_blank\" \u003e\u003cimg src=\"https://img.shields.io/badge/-Blog-red?style=social\u0026logo=data:image/svg+xml;base64,PHN2ZyB0PSIxNzQwMDQ4ODIzMDk1IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEwMDE1IiB3aWR0aD0iMTMyIiBoZWlnaHQ9IjEzMiI+PHBhdGggZD0iTTg0LjA1ODIxIDk1OS4yNTU4ODRTMjk3LjM4MzI5NSA1Ny42OTEwOTcgOTI4LjY4NjAzMiAwYzAgMC0yMC41MDI5NjMgMzQxLjQ4MDM4OS0yMDEuOTY1OTcyIDQ3OS40ODY1NDIgMCAwLTM0LjAzMDIwNiA0Ni4wOTYzMTggNzMuMzM5MzM1IDMyLjA5Nzc0MyAwIDAtMTIuNzczMTEgMTUzLjUxMjk5Mi0yMDEuOTY1OTcyIDE5MS44MzIzMjMgMCAwLTI4Ljk4Njk0OCAyOC45ODY5NDggNTUuMjQwMTY4IDMxLjkwOTIxIDAgMC04OS4wODE4NDEgMTM3LjUzNDgyMS0zMTIuMjU3Nzc1IDYzLjkxMjY4NSAwIDAgODkuNzQxNzA2LTIxNy40MjU2NzggMTY1LjI5NjMwNS0yODcuNjU0MjE4QTIyMTEuMzk3Nzc3IDIyMTEuMzk3Nzc3IDAgMCAwIDEyMC43Mjc4NzcgOTQzLjEzNjMxM3MtMTUuNjk1MzcyIDM2LjY2OTY2OC0zNi42Njk2NjcgMTYuMTY2NzA0eiIgZmlsbD0iIzNGODVFQiIgcC1pZD0iMTAwMTYiPjwvcGF0aD48L3N2Zz4=\" style=\" margin: 0 10px 0 0; height:25px; width: auto;\"/\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n\n\n\n\n\n\n\n![image](https://www.esproc.com/images/reporting/0.png)\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch2\u003eesProc Reporting Solution\u003c/h2\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch3\u003e Technical Architecture\u003c/h3\u003e\n    \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/1.png\" width=\"70%\" /\u003e\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch3\u003eSeamless integration with reporting tools/Java applications\u003c/h3\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003ctable style=\" border:0; width:100%\"\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/2.png\" width=\"400px\" /\u003e\n            \u003c/td\u003e \n            \u003ctd\u003e\n            \u003cdiv\u003e\u003cstrong\u003eesProcPure Java\u003c/strong\u003e\u003c/div\u003e\n            \u003cdiv\u003e ✓ Lightweight\u003c/div\u003e\n            \u003cdiv\u003e ✓ Embedded, no independent server\u003c/div\u003e\n            \u003cdiv\u003e ✓ JVM，JDK1.8 or above\u003c/div\u003e\n            \u003cdiv\u003e ✓ VM/Container/Android\u003c/div\u003e\n        \u003c/tr\u003e\n    \u003c/table\u003e \n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch2\u003eDevelopment Efficiency Improvement\u003c/h2\u003e\n\u003c/div\u003e\n \n\u003cdiv align=\"center\"\u003e\n    \u003ch3\u003eEasy to develop and debug grid programming\u003c/h3\u003e\n    \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/3.png\" width=\"70%\" /\u003e\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch3\u003eSimplify complex SQL of report\u003c/h3\u003e\n\u003c/div\u003e\n\n\n\u003e **Report objective: To query the status of major customers and orders that account for half of the total sales revenue**\n\n#### SQL\n```sql\nSELECT CUSTOMER, AMOUNT, SUM_AMOUNT\n  FROM (SELECT CUSTOMER, AMOUNT,\n    SUM(AMOUNT) OVER(ORDER BY AMOUNT DESC) SUM_AMOUNT\n      FROM (SELECT CUSTOMER, SUM(AMOUNT) AMOUNT\n           FROM ORDERS GROUP BY CUSTOMER))\n           WHERE 2 * SUM_AMOUNT \u003c (SELECT SUM(AMOUNT) TOTAL FROM ORDERS)\n```\n#### SPL\n\n| | A | B |\n| --- | --- | --- |\n| 1 | =db.query(\"select customer,amount from orders order by amount desc\") ||\n| 2 | =A1.sum(amount)/2\t | =0 |\n| 3 | =A1.pselect((B1+=amount)\u003e=A2)\t| return A1.to(A3) |\n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch3\u003eMore complex SQL\u003c/h3\u003e\n\u003c/div\u003e\n\n\u003e **Report objective: To track the retention of new users for the next day on a daily basis**\n\n#### SQL\n```sql\nWITH first_login AS ( \n    SELECT userid, MIN(TRUNC(ts)) AS first_login_date  FROM login_data GROUP BY userid),\nnext_day_login AS (\n    SELECT DISTINCT(fl.userid), fl.first_login_date, TRUNC(ld.ts) AS next_day_login_date\n    FROM first_login fl LEFT JOIN login_data ld ON fl.userid = ld.userid WHERE TRUNC(ld.ts) = fl.first_login_date + 1),\nday_new_users AS (\n    SELECT first_login_date,COUNT(*) AS new_user_num FROM first_login GROUP BY first_login_date),\nnext_new_users AS (\n    SELECT next_day_login_date, COUNT(*) AS next_user_num FROM next_day_login GROUP BY next_day_login_date),\nall_date AS (\n    SELECT DISTINCT(TRUNC(ts)) AS login_date FROM login_data)\nSELECT all_date.login_date+1 AS dt,dn. new_user_num,nn. next_user_num,\n      (CASE  WHEN nn. next_day_login_date IS NULL THEN 0  ELSE nn.next_user_num END)/dn.new_user_num AS ret_rate\nFROM all_date JOIN day_new_users dn ON all_date.login_date=dn.first_login_date\n    LEFT JOIN next_new_users nn ON dn.first_login_date+1=nn. next_day_login_date\nORDER BY all_date.login_date;\n```\n\n#### SPL\n\n| | A |\n| --- | --- |\n| 1 | =file(\"login_data.csv\").import@tc() |\n| 2 | =A1.group(userid;fst=date(ts):fst\\_login,~.(date(ts)).pos(fst+1)\u003e0:w\\_sec_login) |\n| 3 | =A2.groups(fst_login+1:dt;count(w_sec_login)/count(1):ret_rate) |\n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch3\u003eEnrich report formats\u003c/h3\u003e\n\u003c/div\u003e \n\n\n\u003ctable style=\" border:0; width:100%\"\u003e\n    \u003ctr\u003e\n        \u003ctd style=\" width:40%\"\u003e\n            \u003cimg  src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/6.png\" \u003e\n        \u003c/td\u003e \n        \u003ctd style=\"width:60%;\"\u003e\n            \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/6-1.png\" \u003e\n            \u003cdiv align=\"center\"\u003e\u003cstrong\u003eCreating complex reports is simpler than BIRT/JasperReport\u003c/strong\u003e\u003c/div\u003e\n        \u003c/td\u003e \n    \u003c/tr\u003e\n\u003c/table\u003e \n\n---\n \n\u003cdiv align=\"center\"\u003e\n    \u003ch2\u003eMulti Data Source Computing\u003c/h2\u003e\n\u003c/div\u003e\n\n\u003ctable style=\" border:0; width:100%\"\u003e\n    \u003ctr\u003e\n        \u003ctd style=\" width:40%\"\u003e\n            \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/7.png\"  width=\"400px\"\u003e\n        \u003c/td\u003e \n        \u003ctd style=\" width:60%\"\u003e\n            \u003ch3\u003eMulti data source report\u003c/h3\u003e\n            \u003cdiv\u003e ✓ Access data sources directly through the native interface, without predefined mapping, while preserving their features\u003c/div\u003e\n            \u003cdiv\u003e ✓ Lightweight, avoiding heavy logical data warehouses\u003c/div\u003e\n        \u003c/td\u003e \n    \u003c/tr\u003e\n\u003c/table\u003e \n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/7-2.png\"  width=\"80%\"\u003e\n\u003c/div\u003e\n \n \n---\n\n\u003ctable style=\" border:0; width:100%\"\u003e\n    \u003ctr\u003e\n        \u003ctd style=\" width:60%\"\u003e\n            \u003ch3\u003e Application of multi source mixed computing - Real-time report\u003c/h3\u003e\n            \u003cdiv\u003e ✓ AHistorical cold data is calculated and read from the AP database\u003c/div\u003e\n            \u003cdiv\u003e ✓ Transaction hot data is read from the TP database in real time\u003c/div\u003e\n            \u003cdiv\u003e ✓ Mixed computing to implement real-time report of whole dat \u003c/div\u003e\n        \u003c/td\u003e \n        \u003ctd style=\" width:40%\"\u003e\n            \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/8.png\"  width=\"400px\"\u003e\n        \u003c/td\u003e \n    \u003c/tr\u003e\n\u003c/table\u003e \n \n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch3\u003eCross database migration\u003c/h3\u003e\n    \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/9.png\"  width=\"70%\"\u003e\n    \u003cdiv\u003e\u003cstrong\u003eOne SQL statement that works across all databases, allowing migration without altering the report.\u003c/strong\u003e\u003c/div\u003e\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch3\u003eCross database migration – Conversion example\u003c/h3\u003e \n\u003c/div\u003e\n\n\n|  | |\n| --- | --- |\n| **SQL** | SELECT EID, NAME, BIRTHDAY, **ADDMONTHS(BIRTHDAY,10)** DAY10 FROM EMP |\n| | **⇩ esProc conversion ⇩** | \n| **ORACLE** | SELECT EID, NAME, BIRTHDAY, **BIRTHDAY+NUMTOYMINTERVAL(10,'MONTH')** DAY10 FROM EMP| \n| **SQLSVR** | SELECT EID, NAME, BIRTHDAY, **DATEADD(MM,10,BIRTHDAY)** DAY10 FROM EMP| \n| **DB2** | SELECT EID, NAME, BIRTHDAY, **BIRTHDAY+10 MONTHS** DAY10 FROM EMP| \n| **MYSQL** | SELECT EID, NAME, BIRTHDAY, **BIRTHDAY+INTERVAL 10 MONTH** DAY10 FROM EMP| \n| **POSTGRES** | SELECT EID, NAME, BIRTHDAY, **BIRTHDAY+interval '10 months'** DAY10 FROM EMP| \n| **TERADATA** | SELECT EID, NAME, BIRTHDAY, **ADD_MONTHS(BIRTHDAY, 10)** DAY10 FROM EMP| \n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch3\u003eThe file data source\u003c/h3\u003e \n\u003c/div\u003e\n\n\u003ctable style=\" border:0; width:100%\"\u003e\n    \u003ctr\u003e\n        \u003ctd style=\" width:50%\"\u003e\n            \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/11.png\"  width=\"400\"\u003e\n        \u003c/td\u003e \n        \u003ctd style=\" width:50%\"\u003e\n            \u003cimg src=\"https://www.esproc.com/images/reporting/11-1.png\" width=\"500\"\u003e\n        \u003c/td\u003e \n    \u003c/tr\u003e\n\u003c/table\u003e \n \n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch2\u003eArchitecture Optimization\u003c/h2\u003e \n\u003c/div\u003e\n\n\n\n\u003ctable style=\" border:0; width:100%\"\u003e\n    \u003ctr\u003e\n        \u003ctd style=\" width:40%\"\u003e\n            \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/12.png\"  width=\"400\"\u003e\n        \u003c/td\u003e \n        \u003ctd style=\" width:60%\"\u003e\n            \u003ch3\u003eReport microservices\u003c/h3\u003e\n            \u003cdiv\u003e ✓ \"Report data sources are delivered as microservices, simplifying extension and migration\u003c/div\u003e\n            \u003cdiv\u003e ✓ esProc scripts are interpreted, enabling hot swapping by default\u003c/div\u003e\n            \u003cdiv\u003e ✓ Adapt to the ever-changing reporting business.\u003c/div\u003e\n        \u003c/td\u003e \n    \u003c/tr\u003e\n\u003c/table\u003e \n\n---\n\n\u003ctable style=\" border:0; width:100%\"\u003e\n    \u003ctr\u003e\n        \u003ctd style=\" width:40%\"\u003e\n            \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/13.png\"  width=\"400\"\u003e\n        \u003c/td\u003e \n        \u003ctd style=\" width:60%\"\u003e\n            \u003ch3\u003eReplace stored procedures\u003c/h3\u003e\n            \u003cdiv\u003e ✓ Move stored procedures outside the database, making them independent and easily migratable\u003c/div\u003e\n            \u003cdiv\u003e ✓ Reduce coupling between applications\u003c/div\u003e\n            \u003cdiv\u003e ✓ No need for compile privileges on stored procedures, enhancing security and reliability\u003c/div\u003e\n        \u003c/td\u003e \n    \u003c/tr\u003e\n\u003c/table\u003e \n\n---\n\n\u003ctable style=\" border:0; width:100%\"\u003e\n    \u003ctr\u003e\n        \u003ctd style=\" width:40%\"\u003e\n            \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/14.png\"  width=\"400\"\u003e\n        \u003c/td\u003e \n        \u003ctd style=\" width:60%\"\u003e\n            \u003ch3\u003eEliminate intermediate tables in the database\u003c/h3\u003e\n            \u003cdiv\u003e ✓ Move intermediate tables to files for storage and processing, easing the database load\u003c/div\u003e\n            \u003cdiv\u003e ✓ The tree-structured file system simplifies management and reduces coupling between applications\u003c/div\u003e\n        \u003c/td\u003e \n    \u003c/tr\u003e\n\u003c/table\u003e \n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch2\u003ePerformance Boosting\u003c/h2\u003e \n\u003c/div\u003e\n\n\u003ctable style=\" border:0; width:100%\"\u003e\n    \u003ctr\u003e\n        \u003ctd style=\" width:50%\"\u003e\n            \u003ch3\u003eMulti threaded parallel data retrieval\u003c/h3\u003e\n            \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/15.png\"  width=\"400\"\u003e\n            \u003cdiv\u003e\u003cstrong\u003eMulti threaded parallel data retrieval, compatible with both homogeneous and heterogeneous databases, boosts query performance\u003c/strong\u003e\u003c/div\u003e\n        \u003c/td\u003e \n        \u003ctd style=\" width:50%\"\u003e\n            \u003cdiv\u003eSingle table parallel data retrieval:\u003c/div\u003e\n            \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/15-1.png\"  \u003e\n            \u003cdiv\u003eParallel data retrieval from multiple tables (databases):\u003c/div\u003e\n            \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/15-2.png\"  \u003e\n        \u003c/td\u003e \n    \u003c/tr\u003e\n\u003c/table\u003e \n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch3\u003eSimple Big Data and Parallel Computing\u003c/h3\u003e\n    \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/16.png\"  \u003e\n    \u003cdiv\u003e\u003cstrong\u003eAn option to enable parallelism can significantly enhance computing performance\u003c/strong\u003e\u003c/div\u003e\n\u003c/div\u003e\n\n---\n\n\u003ctable style=\" border:0; width:100%\"\u003e\n    \u003ctr\u003e\n        \u003ctd style=\" width:40%\"\u003e\n            \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/17.png\"  width=\"400px\"\u003e\n        \u003c/td\u003e \n        \u003ctd style=\" width:60%\"\u003e\n            \u003ch3\u003eLocal file data cache\u003c/h3\u003e\n            \u003cdiv\u003e ✓ Faster file system IO\u003c/div\u003e\n            \u003cdiv\u003e ✓ Binary format does not require parsing\u003c/div\u003e\n            \u003cdiv\u003e ✓ High performance support: compression, columnar storage, indexing …\u003c/div\u003e\n        \u003c/td\u003e \n    \u003c/tr\u003e\n\u003c/table\u003e \n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch3\u003eHigh performance algorithms\u003c/h3\u003e\n    \u003cimg src=\"https://www.esproc.com/wp-content/themes/scudata-en/images/Langding-Page-esProc-for-Reporting/18.png\"  \u003e\n    \u003cdiv\u003e\u003cstrong\u003eImprove the performance of report computation\u003c/strong\u003e\u003c/div\u003e\n\u003c/div\u003e\n\n---\n\n# Resource\n\n- [Download esProc SPL](https://www.esproc.com/download-esproc)\n- [Community - c.esproc.com](https://c.esproc.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsplware%2Fesproc_reporting","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsplware%2Fesproc_reporting","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsplware%2Fesproc_reporting/lists"}