Uploaded image for project: 'OASIS Open Data Protocol (OData) TC'
  1. OASIS Open Data Protocol (OData) TC
  2. ODATA-1169

Transformation for nesting the result of another transformation within a single entity

    Details

    • Type: New Feature
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: V4.0_CSD03
    • Fix Version/s: V4.0_CSD04
    • Component/s: Data Aggregation
    • Labels:
      None
    • Environment:

      Applied

    • 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> ] }

      Description

      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

        Attachments

          Activity

          gerald.krause1 Gerald Krause created issue -
          gerald.krause1 Gerald Krause made changes -
          Field Original Value New Value
          Proposal An OData representation of a grid-like result spanned by multiple axes could be achieved by a new transformation transpose that allows to embed data of one axis as a nested collection of another axis. 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 An OData representation of a grid-like result spanned by multiple axes could be achieved by a new transformation transpose that allows to embed data of grid cells as a nested collection of entities representing grid rows. 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]
          Hide
          gerald.krause1 Gerald Krause added a comment - - edited

          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

          [ { “FirstLetter”: “J”, “Customers”: [ { “ID”: “C1”, … } ] },
            { “FirstLetter”: “S”, “Customers”: [ { “ID”: “C2”, … }, 
                                                 { “ID”: “C3”, … } ] }
          ]
          

          2. Retrieve customers per product category

          GET Sales?$apply = groupby( (Product/Category/ID),
          transpose( Customers, groupby( (Customer/ID) ) )

          returns

          [ { “Product”: { “Category”: { “ID”: “PG1”} }, 
              “Customers”: [ { “Customer”: { “ID”: “C1”} }, 
                             { “Customer”: { “ID”: “C2” } }, 
                             { “Customer”: { "ID": “C3” } } ] },
          { “Product”: { “Category”: { “ID”: “PG2”} }, 
              “Customers”: [ { “Customer”: { “ID”: “C1”} }, 
                             { “Customer”: { “ID”: “C2” } }, 
                             { “Customer”: { "ID": “C3” } } ] }
          ]
          
          Show
          gerald.krause1 Gerald Krause added a comment - - edited 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 [ { “FirstLetter”: “J”, “Customers”: [ { “ID”: “C1”, … } ] }, { “FirstLetter”: “S”, “Customers”: [ { “ID”: “C2”, … }, { “ID”: “C3”, … } ] } ] 2. Retrieve customers per product category GET Sales?$apply = groupby( (Product/Category/ID), transpose( Customers, groupby( (Customer/ID) ) ) returns [ { “Product”: { “Category”: { “ID”: “PG1”} }, “Customers”: [ { “Customer”: { “ID”: “C1”} }, { “Customer”: { “ID”: “C2” } }, { “Customer”: { "ID": “C3” } } ] }, { “Product”: { “Category”: { “ID”: “PG2”} }, “Customers”: [ { “Customer”: { “ID”: “C1”} }, { “Customer”: { “ID”: “C2” } }, { “Customer”: { "ID": “C3” } } ] } ]
          gerald.krause1 Gerald Krause made changes -
          Proposal An OData representation of a grid-like result spanned by multiple axes could be achieved by a new transformation transpose that allows to embed data of grid cells as a nested collection of entities representing grid rows. 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] An OData representation of a grid-like result spanned by multiple axes could be achieved by a new transformation transpose 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 transpose transformation has two parameters. The first takes the name of a dynamic containment navigation property, the second is a (chain of) $apply transformations. transpose( 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:

          {color:#000000} {color}

          {color:#000000}[ \{ <cnp>: [ <result of t applied to input set> ] } ]{color}
          Description 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. 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]
          mikep Michael Pizzo (Inactive) made changes -
          Status New [ 10000 ] Open [ 1 ]
          gerald.krause1 Gerald Krause made changes -
          Proposal An OData representation of a grid-like result spanned by multiple axes could be achieved by a new transformation transpose 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 transpose transformation has two parameters. The first takes the name of a dynamic containment navigation property, the second is a (chain of) $apply transformations. transpose( 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:

          {color:#000000} {color}

          {color:#000000}[ \{ <cnp>: [ <result of t applied to input set> ] } ]{color}
          An OData representation of a grid-like result spanned by multiple axes could be achieved by a new transformation transpose 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 transpose transformation has two parameters. The first takes the name of a dynamic containment navigation property, the second is a (chain of) $apply transformations. transpose( 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:

          {color:#000000} {color}

          {color:#000000}[ \{ <cnp>: [ <result of t applied to input set> ] } ]{color}

           

          {color:#000000}Amendment: Use "nest" as name for the transformation instead of "transpose"{color}
          Hide
          mikep Michael Pizzo (Inactive) added a comment -

          Discussed in 2018-5-24.  Agreed to change the name to "nest"

          Show
          mikep Michael Pizzo (Inactive) added a comment - Discussed in 2018-5-24.  Agreed to change the name to "nest"
          Hide
          handl Ralf Handl added a comment -

          Resolved 2018-05-24

          Show
          handl Ralf Handl added a comment - Resolved 2018-05-24
          handl Ralf Handl made changes -
          Resolution Fixed [ 1 ]
          Status Open [ 1 ] Resolved [ 5 ]
          mikep Michael Pizzo (Inactive) made changes -
          Proposal An OData representation of a grid-like result spanned by multiple axes could be achieved by a new transformation transpose 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 transpose transformation has two parameters. The first takes the name of a dynamic containment navigation property, the second is a (chain of) $apply transformations. transpose( 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:

          {color:#000000} {color}

          {color:#000000}[ \{ <cnp>: [ <result of t applied to input set> ] } ]{color}

           

          {color:#000000}Amendment: Use "nest" as name for the transformation instead of "transpose"{color}
          An OData representation of a grid-like result spanned by multiple axes could be achieved by a new transformation transpose 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. transpose( 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:

          {color:#000000} {color}

          {color:#000000}[ \{ <cnp>: [ <result of t applied to input set> ] } ]{color}

           

          {color:#000000}2018/5/24: Amendment: Use "nest" as name for the transformation instead of "transpose"{color}
          handl Ralf Handl made changes -
          Proposal An OData representation of a grid-like result spanned by multiple axes could be achieved by a new transformation transpose 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. transpose( 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:

          {color:#000000} {color}

          {color:#000000}[ \{ <cnp>: [ <result of t applied to input set> ] } ]{color}

           

          {color:#000000}2018/5/24: Amendment: Use "nest" as name for the transformation instead of "transpose"{color}
          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:

          {color:#000000} {color}

          {color:#000000}[ \{ <cnp>: [ <result of t applied to input set> ] } ]{color}

           

          {color:#000000}Amendment: Use "nest" as name for the transformation instead of "transpose"{color}
          handl Ralf Handl made changes -
          Proposal 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:

          {color:#000000} {color}

          {color:#000000}[ \{ <cnp>: [ <result of t applied to input set> ] } ]{color}

           

          {color:#000000}Amendment: Use "nest" as name for the transformation instead of "transpose"{color}
          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> ]}}
          handl Ralf Handl made changes -
          Proposal 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> ]}}
          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:


          {code:json}
          { <cnp>: [ <result of t applied to input set> ] }
          {code}
          gerald.krause1 Gerald Krause made changes -
          Environment Proposed Applied
          handl Ralf Handl made changes -
          Status Resolved [ 5 ] Applied [ 10002 ]
          heiko.theissen Heiko Theissen made changes -
          Status Applied [ 10002 ] Closed [ 6 ]

            People

            • Assignee:
              Unassigned
              Reporter:
              gerald.krause1 Gerald Krause
            • Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: