Extend transformation nest to multiple sequences

    • Type: Improvement
    • Resolution: Fixed
    • Priority: Major
    • V4.0_CSD04
    • Affects Version/s: V4.0_CSD03
    • Component/s: Data Aggregation
    • None
    • Environment:

      Applied

    • Hide

      The nest transformation takes a comma-separated list of one or more nest expressions as parameters. A nest expression is a sequence of set transformations followed by a SimpleIdentifier, called an alias (see [OData-CSDL, section 17.2]). This alias MUST NOT collide with names of properties in the input set or with other aliases introduced in the same nest transformation.

      The result set consists of a single entity having one dynamic property per nest expression. The name of the added property is the alias following the as keyword. The value of the property is the result collection of the transformation sequence in the nest expression applied to the input set:

      nest( t_1 as cnp_1, ..., t_N as cnp_N ) returns

      [{ <cnp_1>: [ <result of t_1 applied to input set> ],
        ...
        <cnp_N>: [ <result of t_N applied to input set> ]
      }]
      
      Show
      The nest transformation takes a comma-separated list of one or more nest expressions as parameters. A nest expression is a sequence of set transformations followed by a SimpleIdentifier, called an alias (see [OData-CSDL, section 17.2] ). This alias MUST NOT collide with names of properties in the input set or with other aliases introduced in the same nest transformation. The result set consists of a single entity having one dynamic property per nest expression. The name of the added property is the alias following the as keyword. The value of the property is the result collection of the transformation sequence in the nest expression applied to the input set: nest( t_1 as cnp_1, ..., t_N as cnp_N ) returns [{ <cnp_1>: [ <result of t_1 applied to input set> ], ... <cnp_N>: [ <result of t_N applied to input set> ] }]

      Currently, nest can be used to create an entity with a single containment navigation property holding the result of a transformation sequence:

      nest( cnp, t ) returns

      [{ <cnp>: [ <result of t applied to input set> ] }]

      There are use cases to generalize this and nest the results of multiple transformation sequences at once. Consider, for example, a request to combine the results of two transformations in a single response. Using transformation concat requires an extra computation of a concat index to relate an entity in the result to the corresponding concat argument (see ODATA-1138):

      GET ~/Sales?$apply=concat(
         filter(<complex expression 1>)
         }}{{/groupby((Customer),aggregate(Amount with sum as Total))/compute(1 as concat_index),
         filter(<complex expression 2>)
         /groupby((Customer),aggregate(Amount with sum as Total))/compute(2 as concat_index))

       

      If it makes sense to keep the results of the two transformations separately, they could be retrieved via an extended syntax of the transformation nest:

      GET ~/Sales?$apply=nest(
         filter(<complex expression 1>)
         /groupby((Customer),aggregate(Amount with sum as Total)) as part_1,
         filter(<complex expression 2>)
         /groupby((Customer),aggregate(Amount with sum as Total)) as part_2)

       

            Assignee:
            Unassigned
            Reporter:
            gerald.krause1
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: