Changes for page 12 Validation and Transformation Language (VTL)
Last modified by Artur on 2025/09/10 11:19
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -80,9 +80,9 @@ 80 80 81 81 For example, by using the URN, the VTL Transformation that sums two SDMX Dataflows DF1 and DF2 and assigns the result to a third persistent Dataflow DFR, assuming that DF1, DF2 and DFR are the maintainedobject-id of the three Dataflows, that their version is 1.0.0 and their Agency is AG, would be written as{{footnote}}Since these references to SDMX objects include non-permitted characters as per the VTL ID notation, they need to be included between single quotes, according to the VTL rules for irregular names.{{/footnote}}: 82 82 83 -> (%style="font-size:16px" %)'urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=AG:DFR(1.0.0)' <-84 -> (%style="font-size:16px" %)'urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=AG:DF1(1.0.0)' +85 -> (%style="font-size:16px" %)'urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=AG:DF2(1.0.0)'83 +> 'urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=AG:DFR(1.0.0)' <- 84 +> 'urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=AG:DF1(1.0.0)' + 85 +> 'urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=AG:DF2(1.0.0)' 86 86 87 87 === 12.2.3 Abbreviation of the URN === 88 88 ... ... @@ -110,51 +110,47 @@ 110 110 111 111 For example, the full formulation that uses the complete URN shown at the end of the previous paragraph: 112 112 113 -'urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=AG:DFR(1.0.0)' := 113 +> 'urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=AG:DFR(1.0.0)' := 114 +> 'urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=AG:DF1(1.0.0)' + 115 +> 'urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=AG:DF2(1.0.0)' 114 114 115 -'urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=AG:DF1(1.0.0)' + 116 - 117 -'urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=AG:DF2(1.0.0)' 118 - 119 119 by omitting all the non-essential parts would become simply: 120 120 121 -DFR := DF1 + DF2 119 +> DFR : = DF1 + DF2 122 122 123 123 The references to the Codelists can be simplified similarly. For example, given the non-abbreviated reference to the Codelist AG:CL_FREQ(1.0.0), which is{{footnote}}Single quotes are needed because this reference is not a VTL regular name. 19 Single quotes are not needed in this case because CL_FREQ is a VTL regular name.{{/footnote}}: 124 124 125 -'urn:sdmx:org.sdmx.infomodel.codelist.Codelist=AG:CL_FREQ(1.0.0)' 123 +> 'urn:sdmx:org.sdmx.infomodel.codelist.Codelist=AG:CL_FREQ(1.0.0)' 126 126 127 127 if the Codelist is referenced from a RulesetScheme belonging to the agency AG, omitting all the optional parts, the abbreviated reference would become simply^^19^^: 128 128 129 -CL_FREQ 127 +> CL_FREQ 130 130 131 131 As for the references to the components, it can be enough to specify the componentId, given that the dataStructure-Id can be omitted. An example of non-abbreviated reference, if the data structure is DST1 and the component is SECTOR, is the following: 132 132 133 -'urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=AG:DST1(1.0.0).S 131 +> 'urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=AG:DST1(1.0.0).S ECTOR' 134 134 135 -ECTOR' 136 - 137 137 The corresponding fully abbreviated reference, if made from a TransformationScheme belonging to AG, would become simply: 138 138 139 -SECTOR 135 +> SECTOR 140 140 141 141 For example, the Transformation for renaming the component SECTOR of the Dataflow DF1 into SEC can be written as{{footnote}}The result DFR(1.0.0) is be equal to DF1(1.0.0) save that the component SECTOR is called SEC{{/footnote}}: 142 142 143 -'DFR(1.0.0)' := 'DF1(1.0.0)' [rename SECTOR to SEC] 139 +> 'DFR(1.0.0)' := 'DF1(1.0.0)' [rename SECTOR to SEC] 144 144 145 145 In the references to the Concepts, which can exist for example in the definition of the VTL Rulesets, at least the conceptScheme-id and the concept-id must be specified. 146 146 147 147 An example of non-abbreviated reference, if the conceptScheme-id is CS1 and the concept-id is SECTOR, is the following: 148 148 149 -'urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=AG:CS1(1.0.0).SECTOR' 145 +> 'urn:sdmx:org.sdmx.infomodel.conceptscheme.Concept=AG:CS1(1.0.0).SECTOR' 150 150 151 151 The corresponding fully abbreviated reference, if made from a RulesetScheme belonging to AG, would become simply: 152 152 153 -CS1(1.0.0).SECTOR 149 +> CS1(1.0.0).SECTOR 154 154 155 155 The Codes and in general all the Values can be written without any other specification, for example, the transformation to check if the values of the measures of the Dataflow DF1 are between 0 and 25000 can be written like follows: 156 156 157 -'DFR(1.0.0)' := between ( 'DF1(1.0.0)', 0, 25000 ) 153 +> 'DFR(1.0.0)' := between ( 'DF1(1.0.0)', 0, 25000 ) 158 158 159 159 The artefact (Component, Concept, Codelist …) which the Values are referred to can be deduced from the context in which the reference is made, taking also into account the VTL syntax. In the Transformation above, for example, the values 0 and 2500 are compared to the values of the measures of DF1(1.0.0). 160 160 ... ... @@ -202,7 +202,7 @@ 202 202 203 203 The possible mapping options are described in more detail in the following sections. 204 204 205 -=== 12.3. 2Mapping from SDMX to VTL data structures ===201 +=== 12.3.3 Mapping from SDMX to VTL data structures === 206 206 207 207 ==== 12.3.3.1 Basic Mapping ==== 208 208 ... ... @@ -210,11 +210,12 @@ 210 210 211 211 When transforming **from SDMX to VTL**, this method consists in leaving the components unchanged and maintaining their names and roles, according to the following table: 212 212 213 -|**SDMX**|**VTL** 214 -|Dimension|(Simple) Identifier 215 -|TimeDimension|(Time) Identifier 216 -|Measure|Measure 217 -|DataAttribute|Attribute 209 +(% style="width:468.294px" %) 210 +|(% style="width:196px" %)**SDMX**|(% style="width:269px" %)**VTL** 211 +|(% style="width:196px" %)Dimension|(% style="width:269px" %)(Simple) Identifier 212 +|(% style="width:196px" %)TimeDimension|(% style="width:269px" %)(Time) Identifier 213 +|(% style="width:196px" %)Measure|(% style="width:269px" %)Measure 214 +|(% style="width:196px" %)DataAttribute|(% style="width:269px" %)Attribute 218 218 219 219 The SDMX DataAttributes, in VTL they are all considered "at data point / observation level" (i.e. dependent on all the VTL Identifiers), because VTL does not have the SDMX AttributeRelationships, which defines the construct to which the DataAttribute is related (e.g. observation, dimension or set or group of dimensions, whole data set). 220 220 ... ... @@ -224,10 +224,8 @@ 224 224 225 225 An alternative mapping method from SDMX to VTL is the **Pivot **mapping, which makes sense and is different from the Basic method only for the SDMX data structures that contain a Dimension that plays the role of measure dimension (like in SDMX 2.1) and just one Measure. Through this method, these structures can be mapped to multimeasure VTL data structures. Besides that, a user may choose to use any Dimension acting as a list of Measures (e.g., a Dimension with indicators), either by considering the “Measure” role of a Dimension, or at will using any coded Dimension. Of course, in SDMX 3.0, this can only work when only one Measure is defined in the DSD. 226 226 227 -In SDMX 2.1 the MeasureDimension was a subclass of DimensionComponent like Dimension and TimeDimension. In the current SDMX version, this subclass does not exist anymore, however a Dimension can have the role of measure dimension (i.e. a Dimension that contributes to the identification of the measures). In SDMX 2.1 a DataStructure could have zero or one MeasureDimensions, in the current version of the standard, from zero to many Dimension may have the role of measure dimension. Hereinafter a Dimension that plays the role of measure dimension is referenced for simplicity as “MeasureDimension“, i.e. maintaining the capital letters and the courier font even if the MeasureDimension is not anymore a class in the SDMX Information Model of the current SDMX version. For the sake of simplicity, the description below considers just one Dimension having the role of MeasureDimension (i.e., the more simple and common case). Nevertheless, it maintains its validity also if in the DataStructure there are more dimension with the role of MeasureDimensions: in this case what is said about the MeasureDimension must be applied to the combination of all the 224 +In SDMX 2.1 the MeasureDimension was a subclass of DimensionComponent like Dimension and TimeDimension. In the current SDMX version, this subclass does not exist anymore, however a Dimension can have the role of measure dimension (i.e. a Dimension that contributes to the identification of the measures). In SDMX 2.1 a DataStructure could have zero or one MeasureDimensions, in the current version of the standard, from zero to many Dimension may have the role of measure dimension. Hereinafter a Dimension that plays the role of measure dimension is referenced for simplicity as “MeasureDimension“, i.e. maintaining the capital letters and the courier font even if the MeasureDimension is not anymore a class in the SDMX Information Model of the current SDMX version. For the sake of simplicity, the description below considers just one Dimension having the role of MeasureDimension (i.e., the more simple and common case). Nevertheless, it maintains its validity also if in the DataStructure there are more dimension with the role of MeasureDimensions: in this case what is said about the MeasureDimension must be applied to the combination of all the MeasureDimensions considered as a joint variable{{footnote}}E.g., if in the data structure there exist 3 Dimensions C,D,E having the role of MeasureDimension, they should be considered as a joint MeasureDimension Z=(C,D,E); therefore when the description says “each possible value Cj of the MeasureDimension …” it means “each possible combination of values (Cj, Dk, Ew) of the joint MeasureDimension Z=(C,D,E)”.{{/footnote}}. 228 228 229 -MeasureDimensions considered as a joint variable{{footnote}}E.g., if in the data structure there exist 3 Dimensions C,D,E having the role of MeasureDimension, they should be considered as a joint MeasureDimension Z=(C,D,E); therefore when the description says “each possible value Cj of the MeasureDimension …” it means “each possible combination of values (Cj, Dk, Ew) of the joint MeasureDimension Z=(C,D,E)”.{{/footnote}}. 230 - 231 231 Among other things, the Pivot method provides also backward compatibility with the SDMX 2.1 data structures that contained a MeasureDimension. 232 232 233 233 If applied to SDMX structures that do not contain any MeasureDimension, this method behaves like the Basic mapping (see the previous paragraph). ... ... @@ -240,16 +240,18 @@ 240 240 * The SDMX Measure is not mapped to VTL as well (it disappears in the VTL Data Structure); 241 241 * An SDMX DataAttribute is mapped in different ways according to its AttributeRelationship: 242 242 ** If, according to the SDMX AttributeRelationship, the values of the DataAttribute do not depend on the values of the MeasureDimension, the SDMX DataAttribute becomes a VTL Attribute having the same name. This happens if the AttributeRelationship is not specified (i.e. the DataAttribute does not depend on any DimensionComponent and therefore is at data set level), or if it refers to a set (or a group) of dimensions which does not include the MeasureDimension; 243 -** Otherwise, if, according to the SDMX AttributeRelationship, the values of the DataAttribute depend on the MeasureDimension, the SDMX DataAttribute is mapped to one VTL Attribute for each possible Code of the SDMX MeasureDimension. By default, the names of the VTL Attributes are obtained by concatenating the name of the SDMX DataAttribute and the names of the correspondent Code of the MeasureDimension separated by underscore. For example, if the SDMX DataAttribute is named DA and the possible Codes of the SDMX MeasureDimension are named C1, C2, …, Cn, then the corresponding VTL Attributes will be named DA_C1, DA_C2, …, DA_Cn (if different names are desired, they can be achieved afterwards by renaming the Attributes through VTL operators). o Like in the Basic mapping, the resulting VTL Attributes are considered as dependent on all the VTL identifiers (i.e. "at data point / observation level"), because VTL does not have the SDMX notion of Attribute Relationship. 238 +** Otherwise, if, according to the SDMX AttributeRelationship, the values of the DataAttribute depend on the MeasureDimension, the SDMX DataAttribute is mapped to one VTL Attribute for each possible Code of the SDMX MeasureDimension. By default, the names of the VTL Attributes are obtained by concatenating the name of the SDMX DataAttribute and the names of the correspondent Code of the MeasureDimension separated by underscore. For example, if the SDMX DataAttribute is named DA and the possible Codes of the SDMX MeasureDimension are named C1, C2, …, Cn, then the corresponding VTL Attributes will be named DA_C1, DA_C2, …, DA_Cn (if different names are desired, they can be achieved afterwards by renaming the Attributes through VTL operators). 239 +** Like in the Basic mapping, the resulting VTL Attributes are considered as dependent on all the VTL identifiers (i.e. "at data point / observation level"), because VTL does not have the SDMX notion of Attribute Relationship. 244 244 245 245 The summary mapping table of the "pivot" mapping from SDMX to VTL for the SDMX data structures that contain a MeasureDimension is the following: 246 246 247 -|**SDMX**|**VTL** 248 -|Dimension|(Simple) Identifier 249 -|TimeDimension|(Time) Identifier 250 -|MeasureDimension & one Measure|One Measure for each Code of the SDMX MeasureDimension 251 -|DataAttribute not depending on the MeasureDimension|Attribute 252 -|DataAttribute depending on the MeasureDimension|((( 243 +(% style="width:739.294px" %) 244 +|(% style="width:335px" %)**SDMX**|(% style="width:400px" %)**VTL** 245 +|(% style="width:335px" %)Dimension|(% style="width:400px" %)(Simple) Identifier 246 +|(% style="width:335px" %)TimeDimension|(% style="width:400px" %)(Time) Identifier 247 +|(% style="width:335px" %)MeasureDimension & one Measure|(% style="width:400px" %)One Measure for each Code of the SDMX MeasureDimension 248 +|(% style="width:335px" %)DataAttribute not depending on the MeasureDimension|(% style="width:400px" %)Attribute 249 +|(% style="width:335px" %)DataAttribute depending on the MeasureDimension|(% style="width:400px" %)((( 253 253 One Attribute for each Code of the 254 254 SDMX MeasureDimension 255 255 ))) ... ... @@ -259,19 +259,14 @@ 259 259 At observation / data point level, calling Cj (j=1, … n) the j^^th^^ Code of the MeasureDimension: 260 260 261 261 * The set of SDMX observations having the same values for all the Dimensions except than the MeasureDimension become one multi-measure VTL Data Point, having one Measure for each Code Cj of the SDMX MeasureDimension; 262 -* The values of the SDMX simple Dimensions, TimeDimension and DataAttributes not depending on the MeasureDimension (these components by definition have always the same values for all the observations of the set above) become the values of the corresponding VTL (simple) 263 - 264 -Identifiers, (time) Identifier and Attributes. 265 - 259 +* The values of the SDMX simple Dimensions, TimeDimension and DataAttributes not depending on the MeasureDimension (these components by definition have always the same values for all the observations of the set above) become the values of the corresponding VTL (simple) Identifiers, (time) Identifier and Attributes. 266 266 * The value of the Measure of the SDMX observation belonging to the set above and having MeasureDimension=Cj becomes the value of the VTL Measure Cj 267 267 * For the SDMX DataAttributes depending on the MeasureDimension, the value of the DataAttribute DA of the SDMX observation belonging to the set above and having MeasureDimension=Cj becomes the value of the VTL Attribute DA_Cj 268 268 269 269 ==== 12.3.3.3 From SDMX DataAttributes to VTL Measures ==== 270 270 271 -* In some cases, it may happen that the DataAttributes of the SDMX DataStructure need to be managed as Measures in VTL. Therefore, a variant of both the methods above consists in transforming all the SDMX DataAttributes in VTL Measures. When DataAttributes are converted to Measures, the two methods above are called Basic_A2M and Pivot_A2M (the suffix "A2M" stands for Attributes to Measures). Obviously, the resulting VTL data structure is, in general, multi-measure and does not contain 265 +* In some cases, it may happen that the DataAttributes of the SDMX DataStructure need to be managed as Measures in VTL. Therefore, a variant of both the methods above consists in transforming all the SDMX DataAttributes in VTL Measures. When DataAttributes are converted to Measures, the two methods above are called Basic_A2M and Pivot_A2M (the suffix "A2M" stands for Attributes to Measures). Obviously, the resulting VTL data structure is, in general, multi-measure and does not contain Attributes. 272 272 273 -Attributes. 274 - 275 275 The Basic_A2M and Pivot_A2M behaves respectively like the Basic and Pivot methods, except that the final VTL components, which according to the Basic and Pivot methods would have had the role of Attribute, assume instead the role of Measure. 276 276 277 277 Proper VTL features allow changing the role of specific attributes even after the SDMX to VTL mapping: they can be useful when only some of the DataAttributes need to be managed as VTL Measures. ... ... @@ -288,11 +288,12 @@ 288 288 289 289 Mapping table: 290 290 291 -|**VTL**|**SDMX** 292 -|(Simple) Identifier|Dimension 293 -|(Time) Identifier|TimeDimension 294 -|Measure|Measure 295 -|Attribute|DataAttribute 283 +(% style="width:470.294px" %) 284 +|(% style="width:262px" %)**VTL**|(% style="width:205px" %)**SDMX** 285 +|(% style="width:262px" %)(Simple) Identifier|(% style="width:205px" %)Dimension 286 +|(% style="width:262px" %)(Time) Identifier|(% style="width:205px" %)TimeDimension 287 +|(% style="width:262px" %)Measure|(% style="width:205px" %)Measure 288 +|(% style="width:262px" %)Attribute|(% style="width:205px" %)DataAttribute 296 296 297 297 If the distinction between simple identifier and time identifier is not maintained in the VTL environment, the classification between Dimension and TimeDimension exists only in SDMX, as declared in the relevant DataStructureDefinition. 298 298 ... ... @@ -320,11 +320,12 @@ 320 320 321 321 The summary mapping table of the **unpivot** mapping method is the following: 322 322 323 -|**VTL**|**SDMX** 324 -|(Simple) Identifier|Dimension 325 -|(Time) Identifier|TimeDimension 326 -|All Measure Components|MeasureDimension (having one Code for each VTL measure component) & one Measure 327 -|Attribute|DataAttribute depending on all SDMX Dimensions including the TimeDimension and except the MeasureDimension 316 +(% style="width:638.294px" %) 317 +|(% style="width:200px" %)**VTL**|(% style="width:435px" %)**SDMX** 318 +|(% style="width:200px" %)(Simple) Identifier|(% style="width:435px" %)Dimension 319 +|(% style="width:200px" %)(Time) Identifier|(% style="width:435px" %)TimeDimension 320 +|(% style="width:200px" %)All Measure Components|(% style="width:435px" %)MeasureDimension (having one Code for each VTL measure component) & one Measure 321 +|(% style="width:200px" %)Attribute|(% style="width:435px" %)DataAttribute depending on all SDMX Dimensions including the TimeDimension and except the MeasureDimension 328 328 329 329 At observation / data point level: 330 330 ... ... @@ -346,12 +346,13 @@ 346 346 347 347 The mapping table is the following: 348 348 349 -|VTL|SDMX 350 -|(Simple) Identifier|Dimension 351 -|(Time) Identifier|TimeDimension 352 -|Some Measures|Measure 353 -|Other Measures|DataAttribute 354 -|Attribute|DataAttribute 343 +(% style="width:467.294px" %) 344 +|(% style="width:214px" %)VTL|(% style="width:250px" %)SDMX 345 +|(% style="width:214px" %)(Simple) Identifier|(% style="width:250px" %)Dimension 346 +|(% style="width:214px" %)(Time) Identifier|(% style="width:250px" %)TimeDimension 347 +|(% style="width:214px" %)Some Measures|(% style="width:250px" %)Measure 348 +|(% style="width:214px" %)Other Measures|(% style="width:250px" %)DataAttribute 349 +|(% style="width:214px" %)Attribute|(% style="width:250px" %)DataAttribute 355 355 356 356 Even in this case, the resulting SDMX definitions must be compliant with the SDMX consistency rules. For example, the SDMX DSD must have the attributeRelationship for the DataAttributes, which does not exist in VTL. 357 357 ... ... @@ -389,11 +389,11 @@ 389 389 390 390 Therefore, the generic name of this kind of VTL datasets would be: 391 391 392 -'DF(1.0.0)/INDICATORvalue.COUNTRYvalue' 387 +> 'DF(1.0.0)/INDICATORvalue.COUNTRYvalue' 393 393 394 394 Where DF(1.0.0) is the Dataflow and //INDICATORvalue// and //COUNTRYvalue //are placeholders for one value of the INDICATOR and COUNTRY dimensions. Instead the specific name of one of these VTL datasets would be: 395 395 396 -‘DF(1.0.0)/POPULATION.USA’ 391 +> ‘DF(1.0.0)/POPULATION.USA’ 397 397 398 398 In particular, this is the VTL dataset that contains all the observations of the Dataflow DF(1.0.0) for which //INDICATOR// = POPULATION and //COUNTRY// = USA. 399 399 ... ... @@ -407,13 +407,11 @@ 407 407 408 408 SDMX Dataflow having INDICATOR=//INDICATORvalue //and COUNTRY=// COUNTRYvalue//. For example, the VTL dataset ‘DF1(1.0.0)/POPULATION.USA’ would contain all the observations of DF1(1.0.0) having INDICATOR = POPULATION and COUNTRY = USA. 409 409 410 -In order to obtain the data structure of these VTL Data Sets from the SDMX one, it is assumed that the SDMX DimensionComponents on which the mapping is based are dropped, i.e. not maintained in the VTL data structure; this is possible because their values are fixed for each one of the invoked VTL Data Sets{{footnote}}If these DimensionComponents would not be dropped, the various VTL Data Sets resulting from this kind of mapping would have non-matching values for the Identifiers corresponding to the mapping Dimensions (e.g. POPULATION and COUNTRY). As a consequence, taking into account that the typical binary VTL operations at dataset level (+, -, *, / and so on) are executed on the observations having matching values for the identifiers, it would not be possible to compose the resulting VTL datasets one another (e.g. it would not be possible to calculate the population ratio between USA and CANADA).{{/footnote}}. After that, the mapping method from SDMX to VTL specified for the Dataflow DF1(1.0.0) is applied (i.e. 405 +In order to obtain the data structure of these VTL Data Sets from the SDMX one, it is assumed that the SDMX DimensionComponents on which the mapping is based are dropped, i.e. not maintained in the VTL data structure; this is possible because their values are fixed for each one of the invoked VTL Data Sets{{footnote}}If these DimensionComponents would not be dropped, the various VTL Data Sets resulting from this kind of mapping would have non-matching values for the Identifiers corresponding to the mapping Dimensions (e.g. POPULATION and COUNTRY). As a consequence, taking into account that the typical binary VTL operations at dataset level (+, -, *, / and so on) are executed on the observations having matching values for the identifiers, it would not be possible to compose the resulting VTL datasets one another (e.g. it would not be possible to calculate the population ratio between USA and CANADA).{{/footnote}}. After that, the mapping method from SDMX to VTL specified for the Dataflow DF1(1.0.0) is applied (i.e. basic, pivot …). 411 411 412 -basic, pivot …). 413 - 414 414 In the example above, for all the datasets of the kind 415 415 416 -‘DF1(1.0.0)///INDICATORvalue//.//COUNTRYvalue//’, the dimensions INDICATOR and COUNTRY would be dropped so that the data structure of all the resulting VTL Data Sets would have the identifier TIME_PERIOD only. 409 +> ‘DF1(1.0.0)///INDICATORvalue//.//COUNTRYvalue//’, the dimensions INDICATOR and COUNTRY would be dropped so that the data structure of all the resulting VTL Data Sets would have the identifier TIME_PERIOD only. 417 417 418 418 It should be noted that the desired VTL Data Sets (i.e. of the kind ‘DF1(1.0.0)/// INDICATORvalue//.//COUNTRYvalue//’) can be obtained also by applying the VTL operator “**sub**” (subspace) to the Dataflow DF1(1.0.0), like in the following VTL expression: 419 419