Data Models File Format

Last modified by Aurelie Bertrand on 2024/12/09 17:09

Data models are persisted in a tabledatamodelrepository.xml file (or tabledatamodelrepository_<roleId>.xml for a role). Each one of the file lists all the data models of the role or user.

At the moment we describe the most important parts of the file that would be mandatory for integrating DigDash Metadata. Other fields are not considered important for this purpose. We reserve the right to modify the file format and this document as we need it. 

XML Sample

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
<TableDataModels version="2020B0910">
<TableDataModel Role="Retail_2d6e0f1e" TransformSelFunctionId="" enableCubeStatistics="true" id="4ed0efaf2746ec7c60593590bf140d59" lastedit="1588595267807" name="1 - Retail DB" processMode="1">
 <Description>
  <SpeakableNames contextprefix="DM" global="false" id="1_-_Retail_DB_Desc" readonly="false">
   <SpeakableName DisplayName="${user.langChoice}" ImageName="" Lang="1" VocalName=""></SpeakableName>
   <SpeakableName DisplayName="" ImageName="" Lang="2" VocalName=""></SpeakableName>
  </SpeakableNames>
 </Description>
 <ScheduleList>
  <Schedule frequency="daily" fromDay="18" fromHour="0" fromMinute="0" fromMonth="10" fromYear="2015" periods="1" time="20:0"></Schedule>
 </ScheduleList>
 <ExcelDS AddedColumns="0" DisableEmptyCol="false" FilterMode="0" FirstRowHeader="true" Limit="-1" Name="retail_v9_intl_world.xls" Path="239354567|demoretail/retail_v9_intl_world.xls" PreviewLimit="1000" SheetIdx="0" SheetName="Fact" SkipRow="0" TrimHeaders="true">
  <Filters></Filters>
  <ColProperties>
   <Column Format="_DD_NOFORMAT_" Position="1"/>
   <Column Format="_DD_NOFORMAT_" Position="2"/>
   <Column Format="_DD_NOFORMAT_" Position="3"/>
   <Column Format="_DD_NOFORMAT_" Position="11"/>
  </ColProperties>
  <ColTransformers>
   <ColTransformer JSTransform="return namedValues[&quot;Product&quot;] + &quot; Brand&quot;;" JSTransformId="DV9MUcSV" Position="11"/>
  </ColTransformers>
 </ExcelDS>
 <Columns>
  <Column DSColName="Date" DSColType="2" Name="Date" Position="0"/>
  <Column DSColName="Geography" DSColType="1" Name="Geography" Position="1"/>
  <Column DSColName="Product" DSColType="1" Name="Product" Position="2"/>
  <Column DSColName="Product Family" DSColType="1" Name="Product Family" Position="3"/>
  <Column DSColName="Unit Price" DSColType="0" Name="Unit Price" Position="4"/>
  <Column DSColName="Number of items" DSColType="0" Name="Number of items" Position="5"/>
  <Column DSColName="Sales" DSColType="0" Name="Sales" Position="6"/>
  <Column DSColName="Margin" DSColType="0" Name="Margin" Position="7"/>
  <Column DSColName="Trend" DSColType="0" Name="Trend" Position="8"/>
  <Column DSColName="Target Margin" DSColType="0" Name="Target Margin" Position="9"/>
  <Column DSColName="Customer satisfaction" DSColType="0" Name="Customer satisfaction" Position="10"/>
  <Column DSColName="Margin % [Y-1]" DSColType="0" Name="Margin % [Y-1]" Position="11"/>
 </Columns>
 <IgnoredColumns></IgnoredColumns>
 <Dimensions>
  <Dimension ColId="0" Continuous="true" Display="false" DisplayRootLevel="true" Format="" Name="Date" Navigation="true" OrderSort="0" OutputTimeZone="0" Sort="1" SourceTimeZone="0" Type="4">
   <SpeakableNames contextprefix="DM.DIM" global="false" id="Date" readonly="false">
    <SpeakableName DisplayName="" ImageName="" Lang="0" VocalName="">
     <Tag></Tag>
    </SpeakableName>
    <SpeakableName DisplayName="" ImageName="" Lang="1" VocalName="">
     <Tag></Tag>
    </SpeakableName>
    <SpeakableName DisplayName="Fecha" ImageName="" Lang="2" VocalName="">
     <Tag></Tag>
    </SpeakableName>
    <SpeakableName DisplayName="" ImageName="" Lang="3" VocalName="">
     <Tag></Tag>
    </SpeakableName>
   </SpeakableNames>
   <Category></Category>
   <Hierarchies>
    <Hierarchy Name="Date" addToContinuousDim="true" forceSimple="2" lastedit="0" nullGroups="12" shared="true">
     <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Date" readonly="false">
       ...
     </SpeakableNames>
     <OtherGroupsName>
      <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="$ui.Other" readonly="false">
       <SpeakableName DisplayName="Other" ImageName="" Lang="0" VocalName="Other"></SpeakableName>
       <SpeakableName DisplayName="Autre" ImageName="" Lang="1" VocalName="Autre"></SpeakableName>
      </SpeakableNames>
     </OtherGroupsName>
     <Levels>
      <Level Allowmulti="false" Format="" Formula="new Date(t*1000).getDate()" MaxFormula="if(mF==0){Number.NaN;}else{new Date(mF*1000);d.setDate(s+1);d.setHours(0, 0, 0, 0);d.getTime()/1000;}" MinFormula="if(mF==0){Number.NaN;}else{var d = new Date(mF*1000);d.setDate(s);d.getTime()/1000;}" Name="Day" OrderSort="-1" Sort="-1" type="2">
       <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Day" readonly="false">
         ...
       </SpeakableNames>
      </Level>
      <Level Allowmulti="false" Format="Mois" Formula="(new Date(t*1000).getMonth()+1)" MaxFormula="if(mF==0){Number.NaN;}else{var d = new Date(mF*1000);d.setHours(0, 0, 0, 0);d.setMonth(s, 1);d.getTime()/1000;}" MinFormula="if(mF==0){Number.NaN;}else{var d = new Date(mF*1000);d.setMonth(s-1);d.getTime()/1000;}" Name="Month" OrderSort="-1" Sort="-1" type="2">
       <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Month" readonly="false">
         ...
       </SpeakableNames>
      </Level>
      <Level Allowmulti="false" Format="" Formula="new Date(t*1000).getFullYear()" MaxFormula="(new Date(s+1, 0, 1)).getTime()/1000" MinFormula="(new Date(s, 0, 1)).getTime()/1000" Name="Year" OrderSort="-1" Sort="-1" type="2">
       <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Year" readonly="false">
         ...
       </SpeakableNames>
      </Level>
     </Levels>
    </Hierarchy>
    <Hierarchy Name="Month Year" addToContinuousDim="true" forceSimple="2" lastedit="0" nullGroups="12" shared="true">
     <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Month Year" readonly="false">
         ...
     </SpeakableNames>
     <OtherGroupsName>
      <SpeakableNames contextprefix="DM.HIERARCHY" global="true" id="$ui.Other" readonly="false"></SpeakableNames>
     </OtherGroupsName>
     <Levels>
      <Level Allowmulti="false" Format="Date" Formula="new Date(new Date(t*1000).getFullYear(), new Date(t*1000).getMonth(), new Date(t*1000).getDate()).getTime()/1000" MaxFormula="var d = new Date(s*1000); d.setHours(0, 0, 0, 0); d.setDate(d.getDate()+1); d.getTime()/1000" MinFormula="s" Name="Day" OrderSort="-1" Sort="-1" type="2">
       <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Day" readonly="false">
         ...
       </SpeakableNames>
      </Level>
      <Level Allowmulti="false" Format="Mois Annee" Formula="new Date(new Date(t*1000).getFullYear(), new Date(t*1000).getMonth(), 1).getTime()/1000" MaxFormula="var d = new Date(s*1000); d.setHours(0, 0, 0, 0); d.setMonth(d.getMonth()+1, 1); d.getTime()/1000" MinFormula="s" Name="Month" OrderSort="-1" Sort="-1" type="2">
       <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Month" readonly="false">
         ...
       </SpeakableNames>
      </Level>
      <Level Allowmulti="false" Format="Trimestre" Formula="new Date(new Date(t*1000).getFullYear(), Math.floor(new Date(t*1000).getMonth() / 3)*3, 1).getTime()/1000" MaxFormula="var d = new Date(s*1000); d.setHours(0, 0, 0, 0); d.setMonth(d.getMonth()+3, 1); d.getTime()/1000" MinFormula="s" Name="Quarter" OrderSort="-1" Sort="-1" type="2">
       <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Quarter" readonly="false">
         ...
       </SpeakableNames>
      </Level>
      <Level Allowmulti="false" Format="" Formula="new Date(t*1000).getFullYear()" MaxFormula="(new Date(s+1, 0, 1)).getTime()/1000" MinFormula="(new Date(s, 0, 1)).getTime()/1000" Name="Year" OrderSort="-1" Sort="-1" type="2">
       <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Year" readonly="false">
         ...
       </SpeakableNames>
      </Level>
     </Levels>
    </Hierarchy>
    <Hierarchy Name="Week year" addToContinuousDim="true" forceSimple="2" lastedit="0" nullGroups="12" shared="true">
     <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Week year" readonly="false">
       ...
     </SpeakableNames>
     <OtherGroupsName>
      <SpeakableNames contextprefix="DM.HIERARCHY" global="true" id="$ui.Other" readonly="false"></SpeakableNames>
     </OtherGroupsName>
     <Levels>
      <Level Allowmulti="false" Format="Semaine Annee" Formula="(new Date(new Date(t*1000).getFullYear(), new Date(t*1000).getMonth(), new Date(t*1000).getDate(), 0, 0).getTime() - ((new Date(t*1000).getDay()==0)?6:new Date(t*1000).getDay()-1)*24*60*60*1000)/1000" MaxFormula="s + 7*24*60*60" MinFormula="s" Name="Week" OrderSort="-1" Sort="-1" type="2">
       <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Week" readonly="false">
         ...
       </SpeakableNames>
      </Level>
      <Level Allowmulti="false" Format="" Formula="new Date(t*1000).getFullYear()" MaxFormula="(new Date(s+1, 0, 1)).getTime()/1000" MinFormula="(new Date(s, 0, 1)).getTime()/1000" Name="Year" OrderSort="-1" Sort="-1" type="2">
       <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Year" readonly="false">
         ...
       </SpeakableNames>
      </Level>
     </Levels>
    </Hierarchy>
   </Hierarchies>
  </Dimension>
  <Dimension ColId="1" Continuous="false" Display="false" DisplayRootLevel="false" Name="Geography" Navigation="true" OrderSort="0" Sort="0" Type="3">
   <SpeakableNames contextprefix="DM.DIM" global="false" id="Geography" readonly="false">
     ...
   </SpeakableNames>
   <Category></Category>
   <Hierarchies>
    <Hierarchy ExtProvider="com.digdash.utils.DimensionGeoMatcher" Name="Géographique" addToContinuousDim="false" forceSimple="2" lastedit="0" nullGroups="12" shared="false">
     <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Géographique" readonly="false">
       ...
     </SpeakableNames>
     <OtherGroupsName>
      <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Other" readonly="false">
        ...
      </SpeakableNames>
     </OtherGroupsName>
    </Hierarchy>
   </Hierarchies>
  </Dimension>
  <Dimension ColId="2" Continuous="false" Display="false" DisplayRootLevel="true" ExtDMId="af1e048ce036fb227bcf4c6a8f35a0ae" ExtDimId="Product" Name="Product" Navigation="true" OrderSort="0" Sort="0" Type="2">
   <SpeakableNames contextprefix="DM.DIM" global="false" id="Product" readonly="false">
     ...
   </SpeakableNames>
   <Category></Category>
   <Hierarchies>
    <Hierarchy Name="Product" addToContinuousDim="false" forceSimple="2" lastedit="0" nullGroups="12" shared="false">
     <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Product" readonly="false">
       ...
     </SpeakableNames>
     <OtherGroupsName>
      <SpeakableNames contextprefix="DM.HIERARCHY" global="false" id="Other" readonly="false">
        ...
      </SpeakableNames>
     </OtherGroupsName>
     <Levels>
      <Level Allowmulti="false" Name="Product Family" OrderSort="-1" Sort="-1" type="3">
       <SpeakableNames contextprefix="DM.DIM" global="false" id="Product Family" readonly="false">
         ...
       </SpeakableNames>
      </Level>
     </Levels>
    </Hierarchy>
   </Hierarchies>
  </Dimension>
  <Dimension ColId="3" Continuous="false" Display="false" DisplayRootLevel="true" ExtDMId="052ead0a4f621140b0f7784b651dc4c8" ExtDimId="Product Family" Name="Product Family" Navigation="true" OrderSort="0" Sort="0" Type="2">
   <SpeakableNames contextprefix="DM.DIM" global="false" id="Product Family" readonly="false">
     ...
   </SpeakableNames>
   <Category></Category>
  </Dimension>
 </Dimensions>
 <DDVars></DDVars>
 <Measures>
  <Measure Aggregation="AGG_SUM" ColId="4" Color="" Format="Euro" Formula="" Language="0" Name="Unit Price" Target="" Trend="0">
   <SpeakableNames contextprefix="DM.MEASURE" global="false" id="Unit Price" readonly="false">
     ...
   </SpeakableNames>
   <Category></Category>
   <AssocMeasures></AssocMeasures>
  </Measure>
  <Measure Aggregation="AGG_SUM" ColId="5" Color="" Format="" Formula="" Language="0" Name="Number of items" Target="" Trend="0">
   <SpeakableNames contextprefix="DM.MEASURE" global="false" id="Number of items" readonly="false">
     ...
   </SpeakableNames>
   <Category></Category>
   <AssocMeasures></AssocMeasures>
  </Measure>
  <Measure Aggregation="AGG_SUM" ColId="6" Color="" Format="Euro" Formula="" Language="0" Name="Sales" Target="" Trend="0">
   <SpeakableNames contextprefix="DM.MEASURE" global="false" id="Sales" readonly="false">
     ...
   </SpeakableNames>
   <Category></Category>
   <AssocMeasures></AssocMeasures>
  </Measure>
  <Measure Aggregation="AGG_AVG" ColId="7" Color="" Format="Pourcentage" Formula="" Language="0" Name="Margin %" Target="" Trend="0">
   <SpeakableNames contextprefix="DM.MEASURE" global="false" id="Margin %" readonly="false">
     ...
   </SpeakableNames>
   <Category></Category>
   <AssocMeasures></AssocMeasures>
  </Measure>
  <Measure Aggregation="AGG_SUM" ColId="8" Color="" Format="" Formula="" Language="0" Name="Trend" Target="" Trend="0">
   <SpeakableNames contextprefix="DM.MEASURE" global="false" id="Trend" readonly="false">
     ...
   </SpeakableNames>
   <Category></Category>
   <AssocMeasures></AssocMeasures>
  </Measure>
  <Measure Aggregation="AGG_SUM" ColId="9" Color="" Format="Pourcentage" Formula="" Language="0" Name="Target Margin %" Target="" Trend="0">
   <SpeakableNames contextprefix="DM.MEASURE" global="false" id="Target Margin %" readonly="false">
     ...
   </SpeakableNames>
   <Category></Category>
   <AssocMeasures></AssocMeasures>
  </Measure>
  <Measure Aggregation="AGG_AVG" ColId="10" Color="" Format="" Formula="" Language="0" Name="Customer satisfaction" Target="Target satisfaction" Trend="0">
   <SpeakableNames contextprefix="DM.MEASURE" global="false" id="Customer satisfaction" readonly="false">
     ...
   </SpeakableNames>
   <Category></Category>
   <targets>
    <Target EvolutionType="0" FinalVal="0" GlobalVal="6.0" GoodWhen="increasing" Measure="" Name="Target satisfaction" useTarget="true">
     <SpeakableNames global="true" id="Target satisfaction" readonly="false"></SpeakableNames>
     <Zones>
      <Zone addMax="false" addMin="false" color="D20000" fillcolor="" id="BAD" max="-10.0" measureIdMax="" measureIdMin="" min="-∞" name="AxisZone 0" percentMax="true" percentMin="false" type="2" typeComposite="2"></Zone>
      <Zone addMax="false" addMin="false" color="d2d200" fillcolor="" id="OK" max="0.0" measureIdMax="" measureIdMin="" min="-10.0" name="AxisZone 1" percentMax="true" percentMin="true" type="3" typeComposite="3"></Zone>
      <Zone addMax="false" addMin="false" color="00D200" fillcolor="" id="GOOD" max="+∞" measureIdMax="" measureIdMin="" min="0.0" name="AxisZone 2" percentMax="false" percentMin="true" type="0" typeComposite="0"></Zone>
     </Zones>
     <Allocations>
      <DimensionAllocation Name="Geography" Type="ignore"></DimensionAllocation>
      <DimensionAllocation Name="Product" Type="ignore"></DimensionAllocation>
      <DimensionAllocation Name="Product Family" Type="ignore"></DimensionAllocation>
      <DimensionAllocation Name="Date" Type="ignore"></DimensionAllocation>
     </Allocations>
     <TimeEvolution DateEnd="" DateStart=""></TimeEvolution>
    </Target>
   </targets>
   <AssocMeasures></AssocMeasures>
  </Measure>
  <Measure Aggregation="NO_AGG" ColId="11" Color="" Format="Pourcentage" Formula="'Margin %'" Language="0" Name="Margin % [Y-1]" Target="" Trend="0">
   <SpeakableNames contextprefix="DM.MEASURE" global="false" id="Margin % [Y-1]" readonly="false">
     ...
   </SpeakableNames>
   <Category></Category>
   <AssocMeasures>
    <AssocMeasure Agg="1" MeasureName="Margin %" contextid="" id="Margin %" pos="0">
     <DimensionMemberFilters></DimensionMemberFilters>
     <AssocExplorers>
      <AssocExplorer Deep="-1" Name="Date" Navigable="true" TransformFunctionId="TransPrevYear"></AssocExplorer>
     </AssocExplorers>
    </AssocMeasure>
   </AssocMeasures>
  </Measure>
 </Measures>
 <OneToManyDimensionRelations/>
 <PROPERTIES/>
</TableDataModel>
</TableDataModels>

TableDataModels Node

AttributeTypeDescription
versionVersion numberThe version of DigDash Enterprise that last wrote this file
Child NodesCountDescription
TableDataModelNDescriptor of a data model

TableDataModel Node

The flow is the description of a visual representation in DigDash Enterprise. It can be of several types, from a single indicator, table, chart to a more complex report containing other flows (PDF/PPT/HTML reports). Each type has its own set of specific inputs.

AttributeTypeDescription
RoleIdentifier Identifier of the role of the data model as it is defined in LDAP. This value is empty for a user wallet.
lasteditTimestampLast time this data model was modified
nameNameUser friendly name of the data model (can be modified)
idIdentifierIdentifier of the data model (generated)
TransformSelFunctionIdIdentifierId of the Live security function used (empty if no live security is defined)
Child NodesCountDescription
ScheduleList1List of Schedule options for this element
Description1Description of the data model (localized via SpeakableNames)
****DS1Data source properties for this data model. See below for a list of possible tags
Columns1Mapping of the columns (Column) in the data source and data model
IgnoredColumns1Mapping of the columns (Column) of the data source that are ignored in the data model
Dimensions1List of Dimension defined in the data model
Measures1List of Measure defined in the data model
DDVars1List of DDVar used in the data model (what-if analysis, simulation...)
OneToManyDimensionRelations1TODO
PROPERTIES1TODO

Data source ****DS Node

There is a specific tag associated to each data source type. This tag is used in the data model XML to define the data source properties (see ****DS child node above).

Data source type (tag)DescriptionDetails and attributes
ExcelDSExcel XLS or XLSX fileTODO
CSVDSCSV fileTODO
FTXTDSFixed columns width text fileTODO
XMLDSXML fileTODO
HTMLTABLEDS(part of) HTML fileTODO
MDBDSMDB file (Access)TODO
JDBCDSDatabase query (SQL...)TODO
OLAPDSOLAP queryTODO
NOSQLNoSql query (MongoDB)TODO
BOHTMLDSBusinessObjects HTML report fileTODO
BOXLSCMSDSBusinessObjects XLS extract (BusinessObject portal)TODO
BOCSVCMSDSBusinessObjects CSV extract (BusinessObject portal)TODO
COGNOSXMLDSCognos XML extract (file)TODO
COGNOSXMLCMSDSCognos XML extract (Cognos application)TODO
BIRTHTMLDS(obsolete) BIRT reportTODO
GACSVDSGoogle Analytics queryTODO
SFCSVDSSalesforces queryTODO
SPLUNKSplunk queryTODO
TRANSDMDSDigDash Cube Transformer data sourceTODO
COLTRANSDMDSDigDash Cube Column Transformer data sourceTODO
RCOLTRANSDMDSDigDash Cube "R" Column Transformer data sourceTODO
ESDSElasticSearch queryTODO
MERGEDMDSDigDash Cubes Union datasourceTODO
JOINDMDSDigDash Cubes Join datasourceTODO
JSONDSJSON fileTODO
DATACATALOGDSDigDash Metadata queryTODO
SAPBEXDSSAP BEx queryTODO
IODSIODS datasource (execute an external script to provide data)TODO
Child NodesCountDescription
Filters1List of row filters to apply to the datasource
ColProperties1List of columns properties and options
ColTransformers1List of columns transformation scripts, in their order of execution, and their options

 

ColProperties/Column Node

AttributeTypeDescription
FormatIdentifierIdentifier of the optional format used to parse the column. Formats are defined in formatrepository.xml
PositionIntegerPosition of the column in the data source

ColTransformers/ColTransformer Node

AttributeTypeDescription
JSTransformJavascript codeJavascript code of the column transformation script
JSTransformIdIdentifierID of the column transformation script if it is a shared script. Shared scripts are defined in jsfunctionrepository.xml
PositionIntegerPosition of the column in the data source

Columns/Column Node

AttributeTypeDescription
DSColNameNameName of the column in the data source
DSColTypeEnumType of the column in the data source
NameNameName of the column in the data model (can be renamed)
PositionIntegerPosition of the column in the data source

Dimension Node

AttributeTypeDescription
ColIdIntegerPosition of the corresponding column in the data source. See Position attribute in Column Node
ContinuousBooleantrue: the dimension is continuous (date...), false: it is discrete
DisplayBooleantrue: dimension should be displayed in editor, Self-Service BI and other tools, false: dimension is hidden
DisplayRootLevelBooleanIf dimension has hierarchy, should we drill to the root level (true) or not (false)
NameIdentifierIdentifier of the dimension. Note: Why "Name"? It is also the display name of the dimension if no localized name has been defined
NavigationBooleanFlag for navigating in the dimension (filter/drill). true: dimension should not be filtered/drilled, false: dimension can be filtered/drilled. This settings is just a default value : it can be overridden in a flow and in a dashboard page using this dimension.
OrderSortEnumSort order (0: ascending, 1: descending)
SortEnumType of sort (-1: none, 0: alpha, 1: numerical, 3: manual)
TypeEnumType of the dimension (2: discrete, 3: geographic, 4 continuous/time)
CaptionIdentifierName/Id of another dimension, in this data model, used to display caption values for this dimension (cardinality between the 2 dimensions must be 1-1). Allows for code/label dimension.
Child NodesCountDescription
SpeakableNames1Localized user friendly dimension name
Category1Localized category of the dimension via SpeakableNames
Hierarchies1List of hierarchies (Hierarchy) on this dimension

Hierarchy

AttributeTypeDescription
NameIdentifierIdentifier of the hierarchy. Note: Why "Name"? It is also the display name of the hierarchy if no localized name has been defined
addToContinuousDimBoolean-
lasteditTimestamplast modification of the hierarchy
nullGroupsInteger-
sharedBooleantrue: hierarchy is shared via the hierarchy repository, false: hierarchy is local to this data model
Child NodesCountDescription
SpeakableNames1Localized user friendly hierarchy name
OtherGroupsName1Localized name of the "Other" group (members of the dimension that fall outside of the hierarchy), using SpeakablesNames
Levels1List of Level on this hierarchy

Level (TODO)

AttributeTypeDescription
TODOTODOTODO
Child NodesCountDescription
TODOTODOTODO

Measure Node

AttributeTypeDescription
ColIdIntegerPosition of the corresponding column in the data source. See Position attribute in Column Node. -1 if the measure is derived.
AggregationEnumMethod of aggregating values on this measure (AGG_SUM: sum, AGG_AVG: average, AGG_MIN: minimum, AGG_MAX: maximum, NO_AGG: (derived measure) no aggregation = after aggregation, AGG_RSM: Running sum, AGG_ARSUM: running sum on first axis, AGG_LAST: last value, AGG_SEMI: semi-additive, AGG_OR: logical OR, AGG_MEDIAN: median)
ColorColorPrefered color of the measure in charts
FormatIdentifierId of the number format (formatrepository.xml)
FormulaCodeOnly for derived measures. Formula of the measure
LanguageEnumLanguage/mode in which the formula is written (0 (MODE_AFTER_AGG) (default): the measure is calculated after aggregation of the data, 1 (MODE_BUILD): the measure is calculated at cube build time (calculated column), 2 (MODE_BEFORE_AGG): The measure is calculated before aggregation
NameIdentifierIdentifier of the measure. Note: Why "Name"? It is also the display name of the measure if no localized name has been defined
TargetIdentifier??
TrendEnum??
Child NodesCountDescription
SpeakableNames1Localized user friendly measure name
Category1Localized category of the measure via SpeakableNames
targets1List of Target defined on this measure
AssocMeasures1List of AssocMeasure (populated only if the measure is derived) that are other measures this derived measure depends on

AssocMeasure Node

AttributeTypeDescription
idIdentifierIdentifier of the associated measure (operand). Not to be confused with the Id of the measure that this associated measure refers to. Eg. We could have the same measure used several times in a fomula, but with different context, aggregations...
aggEnumTODO
contextidIdentifierTODO
posIntegerPosition of this associated measure in the formula of its derived measure
Child NodesCountDescription
DimensionMemberFilters1Dimension filters used on the associated measure 
AssocExplorers1Dimension explorations

SpeakableNames Node

This is used in different part and defines the localization for the name of the node where it is included.

Note : if the localization global attribute is set to true, then the translated string are stored in a properties files. If it is false the localized string are defined in SpeakableName child nodes, one for each language.

We will not describe this node for each place where it can be used. Instead we will only mention it.