-
Proposal:
Hide
An OData representation of a grid-like result spanned by multiple axes could be achieved by a new transformation nest() that allows to embed data of grid cells as a nested collection of entities representing grid rows.
Relevant excerpt from section 3 in the referenced document: The nest transformation has two parameters. The first takes the name of a dynamic containment navigation property, the second is a (chain of) $apply transformations. nest( cnp, t ) applies transformation chain t to the input set and creates a result set containing a single entity that only contains the navigation property cnp, which in turn holds the result collection of t applied to the input set:
{ <cnp>: [ <result of t applied to input set> ] }
Show
An OData representation of a grid-like result spanned by multiple axes could be achieved by a new transformation nest() that allows to embed data of grid cells as a nested collection of entities representing grid rows.
Relevant excerpt from section 3 in the referenced document: The nest transformation has two parameters. The first takes the name of a dynamic containment navigation property, the second is a (chain of) $apply transformations. nest( cnp, t ) applies transformation chain t to the input set and creates a result set containing a single entity that only contains the navigation property cnp , which in turn holds the result collection of t applied to the input set:
{ <cnp>: [ <result of t applied to input set> ] }
This new feature is motivated by a concrete use case. The current version of the Data Aggregation specification already includes an example for a cross-table and describes how to retrieve its data using transformation groupby in combination with rollup. However, this data is returned as linear collection of entities. For working with data in a grid efficiently, it must be possible to access selected sections of the grid. Details are described in the document “Grid-Like Access to Aggregated Data”, sections 2 and 3: https://www.oasis-open.org/committees/document.php?document_id=62593&wg_abbrev=odata
{"report":{"apdex":0.5,"isInitial":true,"journeyId":"a7afadad-af7e-4d27-9171-1e5c110e68e8","key":"jira.project.issue.view-issue","navigationType":0,"readyForUser":2822.5,"redirectCount":0,"resourceLoadedEnd":2642,"resourceLoadedStart":286.6000003814697,"resourceTiming":[{"duration":30,"initiatorType":"link","name":"https://issues.oasis-open.org/s/3edeca31ab9ba77980aae0809fbe7121-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/css/_super/batch.css","startTime":286.6000003814697,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":286.6000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":316.6000003814697,"responseStart":0,"secureConnectionStart":0},{"duration":34.40000009536743,"initiatorType":"link","name":"https://issues.oasis-open.org/s/7d2823769c2e7b66e860863fe879b7f8-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/9aebb1c0aaa4c36289529757ec9dbb54/_/download/contextbatch/css/project.issue.navigator,jira.view.issue,jira.global,atl.general,-_super/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&richediton=true","startTime":287,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":287,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":321.40000009536743,"responseStart":0,"secureConnectionStart":0},{"duration":35,"initiatorType":"link","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/8.0.5/_/download/batch/com.atlassian.auiplugin:split_aui.pattern.label/com.atlassian.auiplugin:split_aui.pattern.label.css","startTime":287.2000002861023,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":287.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":322.2000002861023,"responseStart":0,"secureConnectionStart":0},{"duration":35.59999990463257,"initiatorType":"link","name":"https://issues.oasis-open.org/s/645acc233eb869f48a571293b8358a7d-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:global-static-adgs/jira.webresources:global-static-adgs.css","startTime":287.40000009536743,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":287.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":323,"responseStart":0,"secureConnectionStart":0},{"duration":36.39999961853027,"initiatorType":"link","name":"https://issues.oasis-open.org/s/a0dd6509771c1de0667aae5429c04cda-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:global-static/jira.webresources:global-static.css","startTime":287.6000003814697,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":287.6000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":324,"responseStart":0,"secureConnectionStart":0},{"duration":427.30000019073486,"initiatorType":"script","name":"https://issues.oasis-open.org/s/e5479157e7a0c08b005e6522f2f04104-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/js/_super/batch.js?locale=en-US","startTime":287.80000019073486,"connectEnd":499.5,"connectStart":451.5,"domainLookupEnd":451.5,"domainLookupStart":451.5,"fetchStart":287.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":499.5,"responseEnd":715.1000003814697,"responseStart":544.4000000953674,"secureConnectionStart":475.2000002861023},{"duration":2353.5999999046326,"initiatorType":"script","name":"https://issues.oasis-open.org/s/83514d5d4e8543747b02042eafcdc99c-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/9aebb1c0aaa4c36289529757ec9dbb54/_/download/contextbatch/js/project.issue.navigator,jira.view.issue,jira.global,atl.general,-_super/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":288.40000009536743,"connectEnd":651.4000000953674,"connectStart":602.3000001907349,"domainLookupEnd":602.3000001907349,"domainLookupStart":602.2000002861023,"fetchStart":288.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":651.6000003814697,"responseEnd":2642,"responseStart":688.9000000953674,"secureConnectionStart":626.6000003814697},{"duration":410.6000003814697,"initiatorType":"script","name":"https://issues.oasis-open.org/s/70bb2263e59e7e1f04fbd137c80b895b-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/aae1242f5fc81cc6a5bb8bc963ccda29/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en-US","startTime":288.5,"connectEnd":671.5,"connectStart":622.6000003814697,"domainLookupEnd":622.6000003814697,"domainLookupStart":622.6000003814697,"fetchStart":288.5,"redirectEnd":0,"redirectStart":0,"requestStart":671.6000003814697,"responseEnd":699.1000003814697,"responseStart":698.2000002861023,"secureConnectionStart":646.9000000953674},{"duration":497.2999997138977,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":288.7000002861023,"connectEnd":748.6000003814697,"connectStart":699,"domainLookupEnd":699,"domainLookupStart":699,"fetchStart":288.7000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":748.7000002861023,"responseEnd":786,"responseStart":781.6000003814697,"secureConnectionStart":723.5},{"duration":512.9000000953674,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":288.90000009536743,"connectEnd":763.4000000953674,"connectStart":714.9000000953674,"domainLookupEnd":714.9000000953674,"domainLookupStart":714.9000000953674,"fetchStart":288.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":763.5,"responseEnd":801.8000001907349,"responseStart":800.8000001907349,"secureConnectionStart":738.9000000953674},{"duration":542.1000003814697,"initiatorType":"script","name":"https://issues.oasis-open.org/s/cda37faab827dbdf305de8efe8282062-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/8.0.5/_/download/batch/com.atlassian.auiplugin:split_aui.pattern.label/com.atlassian.auiplugin:split_aui.pattern.label.js?locale=en-US","startTime":289,"connectEnd":800.5,"connectStart":736.6000003814697,"domainLookupEnd":736.6000003814697,"domainLookupStart":736.6000003814697,"fetchStart":289,"redirectEnd":0,"redirectStart":0,"requestStart":802.2000002861023,"responseEnd":831.1000003814697,"responseStart":830,"secureConnectionStart":761.3000001907349},{"duration":69.09999990463257,"initiatorType":"link","name":"https://issues.oasis-open.org/s/07245784f53abc49bad9d9d4d36c577a-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/cadc4f20cc5c138dee060d42cf85f220/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":289.30000019073486,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":289.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":358.40000009536743,"responseStart":0,"secureConnectionStart":0},{"duration":574.8000001907349,"initiatorType":"script","name":"https://issues.oasis-open.org/rest/api/1.0/shortcuts/803004/a29179d70fa8562374ee16707692af77/shortcuts.js?context=issuenavigation&context=issueaction","startTime":289.30000019073486,"connectEnd":835.3000001907349,"connectStart":785.8000001907349,"domainLookupEnd":785.8000001907349,"domainLookupStart":785.6000003814697,"fetchStart":289.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":835.5,"responseEnd":864.1000003814697,"responseStart":863.3000001907349,"secureConnectionStart":810.4000000953674},{"duration":327.09999990463257,"initiatorType":"link","name":"https://issues.oasis-open.org/s/f77fd89aa211a76b20e9b0e63564383c-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/4a9288299d147101bf66484f4be48925/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.css?jira.create.linked.issue=true&richediton=true","startTime":335.1000003814697,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":335.1000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":662.2000002861023,"responseStart":0,"secureConnectionStart":0},{"duration":1687.4000000953674,"initiatorType":"script","name":"https://issues.oasis-open.org/s/41525c48ddceeb9b11e54085268fc285-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/4a9288299d147101bf66484f4be48925/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.js?jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":335.40000009536743,"connectEnd":1994.9000000953674,"connectStart":1946.3000001907349,"domainLookupEnd":1946.3000001907349,"domainLookupStart":1946.3000001907349,"fetchStart":335.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":1995,"responseEnd":2022.8000001907349,"responseStart":2022,"secureConnectionStart":1970.3000001907349},{"duration":2154.5,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":345.90000009536743,"connectEnd":2473,"connectStart":2424.1000003814697,"domainLookupEnd":2424.1000003814697,"domainLookupStart":2424.1000003814697,"fetchStart":345.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":2473.1000003814697,"responseEnd":2500.4000000953674,"responseStart":2499.2000002861023,"secureConnectionStart":2448.300000190735},{"duration":2209.4000000953674,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":366.7000002861023,"connectEnd":2549.5,"connectStart":2500.300000190735,"domainLookupEnd":2500.300000190735,"domainLookupStart":2500.2000002861023,"fetchStart":366.7000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":2549.5,"responseEnd":2576.1000003814697,"responseStart":2575.1000003814697,"secureConnectionStart":2524.6000003814697},{"duration":1412.0999999046326,"initiatorType":"xmlhttprequest","name":"https://issues.oasis-open.org/rest/webResources/1.0/resources","startTime":857.1000003814697,"connectEnd":2238.9000000953674,"connectStart":2190.1000003814697,"domainLookupEnd":2190.1000003814697,"domainLookupStart":2190.1000003814697,"fetchStart":857.1000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":2239,"responseEnd":2269.2000002861023,"responseStart":2268.5,"secureConnectionStart":2214.2000002861023}],"threshold":1000,"fetchStart":0,"domainLookupStart":118,"domainLookupEnd":136,"connectStart":136,"connectEnd":215,"secureConnectionStart":161,"requestStart":215,"responseStart":279,"responseEnd":367,"domLoading":282,"domInteractive":2871,"domContentLoadedEventStart":2871,"domContentLoadedEventEnd":2919,"domComplete":3586,"loadEventStart":3586,"loadEventEnd":3588,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[],"measures":[],"correlationId":"8a709d18e0a8c1","effectiveType":"4g","downlink":9.3,"rtt":0,"serverDuration":123,"dbReadsTimeInMs":23,"dbConnsTimeInMs":27,"applicationHash":"4d4040e0714d65b7fffa4801569d014c0b16eaa9","experiments":[]}}
Some examples to illustrate the transpose transformation applied to the data model in the data aggregation extension specification:
1. Rolodex: Retrieve index cards for customers
GET Customers?$apply = compute( substring( Name, 0, 1 ) as FirstLetter )
/ groupby( (FirstLetter), transpose( Customers, identity ) )
returns
2. Retrieve customers per product category
GET Sales?$apply = groupby( (Product/Category/ID),
transpose( Customers, groupby( (Customer/ID) ) )
returns