gooddata 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.markdown +4 -0
  3. data/README.md +1 -0
  4. data/lib/gooddata/cli/commands/project_cmd.rb +2 -7
  5. data/lib/gooddata/client.rb +0 -2
  6. data/lib/gooddata/commands/project.rb +10 -0
  7. data/lib/gooddata/core/rest.rb +12 -2
  8. data/lib/gooddata/exceptions/attr_element_not_found.rb +12 -0
  9. data/lib/gooddata/extensions/enumerable.rb +12 -0
  10. data/lib/gooddata/helpers/global_helpers.rb +20 -0
  11. data/lib/gooddata/mixins/author.rb +16 -0
  12. data/lib/gooddata/mixins/content_getter.rb +11 -0
  13. data/lib/gooddata/mixins/content_property_reader.rb +13 -0
  14. data/lib/gooddata/mixins/content_property_writer.rb +13 -0
  15. data/lib/gooddata/mixins/contributor.rb +16 -0
  16. data/lib/gooddata/mixins/data_getter.rb +11 -0
  17. data/lib/gooddata/mixins/data_property_reader.rb +13 -0
  18. data/lib/gooddata/mixins/data_property_writer.rb +13 -0
  19. data/lib/gooddata/mixins/is_attribute.rb +13 -0
  20. data/lib/gooddata/mixins/is_fact.rb +13 -0
  21. data/lib/gooddata/mixins/is_label.rb +15 -0
  22. data/lib/gooddata/mixins/links.rb +11 -0
  23. data/lib/gooddata/mixins/md_finders.rb +36 -0
  24. data/lib/gooddata/mixins/md_id_to_uri.rb +29 -0
  25. data/lib/gooddata/mixins/md_json.rb +11 -0
  26. data/lib/gooddata/mixins/md_object_id.rb +11 -0
  27. data/lib/gooddata/mixins/md_object_indexer.rb +36 -0
  28. data/lib/gooddata/mixins/md_object_query.rb +83 -0
  29. data/lib/gooddata/mixins/md_relations.rb +39 -0
  30. data/lib/gooddata/mixins/meta_getter.rb +11 -0
  31. data/lib/gooddata/mixins/meta_property_reader.rb +13 -0
  32. data/lib/gooddata/mixins/meta_property_writer.rb +13 -0
  33. data/lib/gooddata/mixins/mixins.rb +15 -0
  34. data/lib/gooddata/mixins/not_attribute.rb +13 -0
  35. data/lib/gooddata/mixins/not_exportable.rb +11 -0
  36. data/lib/gooddata/mixins/not_fact.rb +13 -0
  37. data/lib/gooddata/mixins/not_label.rb +15 -0
  38. data/lib/gooddata/mixins/not_metric.rb +13 -0
  39. data/lib/gooddata/mixins/obj_id.rb +11 -0
  40. data/lib/gooddata/mixins/rest_getters.rb +13 -0
  41. data/lib/gooddata/mixins/rest_resource.rb +19 -0
  42. data/lib/gooddata/mixins/root_key_getter.rb +11 -0
  43. data/lib/gooddata/mixins/root_key_setter.rb +11 -0
  44. data/lib/gooddata/mixins/timestamps.rb +15 -0
  45. data/lib/gooddata/models/from_wire.rb +153 -0
  46. data/lib/gooddata/models/metadata.rb +28 -230
  47. data/lib/gooddata/models/metadata/attribute.rb +4 -6
  48. data/lib/gooddata/models/metadata/fact.rb +4 -6
  49. data/lib/gooddata/models/metadata/{display_form.rb → label.rb} +17 -11
  50. data/lib/gooddata/models/metadata/metric.rb +1 -1
  51. data/lib/gooddata/models/metadata/report_definition.rb +2 -2
  52. data/lib/gooddata/models/model.rb +55 -23
  53. data/lib/gooddata/models/models.rb +0 -2
  54. data/lib/gooddata/models/module_constants.rb +0 -2
  55. data/lib/gooddata/models/process.rb +1 -1
  56. data/lib/gooddata/models/project.rb +117 -76
  57. data/lib/gooddata/models/project_blueprint.rb +322 -42
  58. data/lib/gooddata/models/project_creator.rb +5 -4
  59. data/lib/gooddata/models/project_role.rb +20 -55
  60. data/lib/gooddata/models/schema_blueprint.rb +287 -84
  61. data/lib/gooddata/models/schema_builder.rb +0 -4
  62. data/lib/gooddata/models/to_manifest.rb +160 -0
  63. data/lib/gooddata/models/to_wire.rb +150 -0
  64. data/lib/gooddata/version.rb +1 -1
  65. data/spec/data/blueprint_invalid.json +3 -1
  66. data/spec/data/gd_gse_data_blueprint.json +1370 -0
  67. data/spec/data/gd_gse_data_manifest.json +1424 -0
  68. data/spec/data/gd_gse_data_model.json +1772 -0
  69. data/spec/data/manifest_test_project.json +116 -0
  70. data/spec/data/model_view.json +1772 -0
  71. data/spec/data/superfluous_titles_view.json +81 -0
  72. data/spec/data/test_project_model_spec.json +7 -4
  73. data/spec/data/wire_test_project.json +143 -0
  74. data/spec/helpers/crypto_helper.rb +9 -0
  75. data/spec/helpers/project_helper.rb +2 -0
  76. data/spec/integration/command_projects_spec.rb +4 -2
  77. data/spec/integration/full_project_spec.rb +51 -18
  78. data/spec/integration/partial_md_export_import_spec.rb +1 -1
  79. data/spec/spec_helper.rb +2 -1
  80. data/spec/unit/models/attribute_column_spec.rb +7 -7
  81. data/spec/unit/models/domain_spec.rb +2 -2
  82. data/spec/unit/models/from_wire_spec.rb +119 -0
  83. data/spec/unit/models/metadata_spec.rb +4 -2
  84. data/spec/unit/models/project_blueprint_spec.rb +32 -16
  85. data/spec/unit/models/project_role_spec.rb +6 -4
  86. data/spec/unit/models/project_spec.rb +26 -3
  87. data/spec/unit/models/schema_builder_spec.rb +5 -6
  88. data/spec/unit/models/to_manifest_spec.rb +24 -0
  89. data/spec/unit/models/to_wire_spec.rb +63 -0
  90. metadata +53 -29
  91. data/lib/gooddata/models/attributes/anchor.rb +0 -37
  92. data/lib/gooddata/models/attributes/attributes.rb +0 -8
  93. data/lib/gooddata/models/attributes/date_attribute.rb +0 -25
  94. data/lib/gooddata/models/attributes/time_attribute.rb +0 -24
  95. data/lib/gooddata/models/columns/attribute.rb +0 -71
  96. data/lib/gooddata/models/columns/columns.rb +0 -8
  97. data/lib/gooddata/models/columns/date_column.rb +0 -63
  98. data/lib/gooddata/models/columns/fact_model.rb +0 -54
  99. data/lib/gooddata/models/columns/label.rb +0 -55
  100. data/lib/gooddata/models/columns/reference.rb +0 -57
  101. data/lib/gooddata/models/facts/facts.rb +0 -8
  102. data/lib/gooddata/models/facts/time_fact.rb +0 -20
  103. data/lib/gooddata/models/folders/attribute_folder.rb +0 -20
  104. data/lib/gooddata/models/folders/fact_folder.rb +0 -20
  105. data/lib/gooddata/models/folders/folders.rb +0 -8
  106. data/lib/gooddata/models/metadata/column.rb +0 -61
  107. data/lib/gooddata/models/metadata/data_set.rb +0 -32
  108. data/lib/gooddata/models/metadata/date_dimension.rb +0 -26
  109. data/lib/gooddata/models/metadata/schema.rb +0 -227
  110. data/lib/gooddata/models/references/date_reference.rb +0 -44
  111. data/lib/gooddata/models/references/references.rb +0 -8
  112. data/lib/gooddata/models/references/time_reference.rb +0 -13
  113. data/spec/helpers/schema_helper.rb +0 -16
  114. data/spec/unit/models/anchor_spec.rb +0 -32
  115. data/spec/unit/models/tools_spec.rb +0 -95
  116. data/test/test_upload.rb +0 -79
@@ -72,10 +72,6 @@ module GoodData
72
72
  def to_blueprint
73
73
  GoodData::Model::DatasetBlueprint.new(to_hash)
74
74
  end
75
-
76
- def to_schema
77
- Schema.new(to_hash)
78
- end
79
75
  end
80
76
  end
81
77
  end
@@ -0,0 +1,160 @@
1
+ # encoding: UTF-8
2
+
3
+ module GoodData
4
+ module Model
5
+ module ToManifest
6
+ # Converts attribute or anchor to manifest
7
+ #
8
+ # @param project [GoodData::Model::ProjectBlueprint] Project blueprint
9
+ # @param dataset [GoodData::Model::SchemaBlueprint] Dataset blueprint
10
+ # @param attribute [Hash] Attribute or Anchor
11
+ # @param mode [String] Mode of the load. Either FULL or INCREMENTAL
12
+ # @return [Hash] Manifest for a particular reference
13
+ def self.attribute_to_manifest(project, dataset, a, mode)
14
+ [{
15
+ 'referenceKey' => 1,
16
+ 'populates' => [GoodData::Model.identifier_for(dataset, a.merge(type: :primary_label))],
17
+ 'mode' => mode,
18
+ 'columnName' => a[:name]
19
+ }]
20
+ end
21
+
22
+ # Sets the active project
23
+ #
24
+ # @param project A project identifier
25
+ #
26
+ # ### Examples
27
+ #
28
+ # The following calls are equivalent
29
+ #
30
+ def self.column_to_manifest(project, dataset, c, mode)
31
+ case c[:type].to_sym
32
+ when :attribute
33
+ attribute_to_manifest(project, dataset, c, mode)
34
+ when :label
35
+ label_to_manifest(project, dataset, c, mode)
36
+ when :anchor
37
+ attribute_to_manifest(project, dataset, c, mode)
38
+ when :fact
39
+ fact_to_manifest(project, dataset, c, mode)
40
+ when :reference
41
+ reference_to_manifest(project, dataset, c, mode)
42
+ when :date
43
+ date_ref_to_manifest(project, dataset, c, mode)
44
+ else
45
+ []
46
+ end
47
+ end
48
+
49
+ # Converts dataset into manifest. Since for manifest of a dataset you need to
50
+ # have access to the whole project blueprint it requires both project and
51
+ # dataset blueprints. It generates the manifest for blueprint and then selects
52
+ # only the one for particular dataset
53
+ #
54
+ # @param project [GoodData::Model::ProjectBlueprint] Project blueprint
55
+ # @param dataset [GoodData::Model::SchemaBlueprint] Dataset blueprint
56
+ # @param mode [String] Mode of the load. Either FULL or INCREMENTAL
57
+ # @return [Hash] Manifest for a particular dataset
58
+ def self.dataset_to_manifest(project, dataset, mode = 'FULL')
59
+ dataset = dataset.is_a?(String) ? Model::ProjectBlueprint.find_dataset(project, dataset) : dataset
60
+ dataset = dataset.to_hash
61
+ res = Model::ProjectBlueprint.datasets(project).zip(to_manifest(project, mode)).find do |ds|
62
+ ds.first == dataset
63
+ end
64
+ res[1]
65
+ end
66
+
67
+ # Converts data reference to manifest
68
+ #
69
+ # @param project [GoodData::Model::ProjectBlueprint] Project blueprint
70
+ # @param dataset [GoodData::Model::SchemaBlueprint] Dataset blueprint
71
+ # @param reference [Hash] Reference
72
+ # @param mode [String] Mode of the load. Either FULL or INCREMENTAL
73
+ # @return [Hash] Manifest for a particular date reference
74
+ def self.date_ref_to_manifest(project, dataset, reference, mode)
75
+ referenced_dataset = ProjectBlueprint.find_date_dimension(project, reference[:dataset])
76
+ [{
77
+ 'populates' => [GoodData::Model.identifier_for(referenced_dataset, type: :date_ref)],
78
+ 'mode' => mode,
79
+ 'constraints' => { 'date' => 'dd/MM/yyyy' },
80
+ 'columnName' => reference[:name],
81
+ 'referenceKey' => 1
82
+ }]
83
+ end
84
+
85
+ # Converts fact to manifest
86
+ #
87
+ # @param project [GoodData::Model::ProjectBlueprint] Project blueprint
88
+ # @param dataset [GoodData::Model::SchemaBlueprint] Dataset blueprint
89
+ # @param fact [Hash] Fact
90
+ # @param mode [String] Mode of the load. Either FULL or INCREMENTAL
91
+ # @return [Hash] Manifest for a particular fact
92
+ def self.fact_to_manifest(project, dataset, fact, mode)
93
+ [{
94
+ 'populates' => [GoodData::Model.identifier_for(dataset, fact)],
95
+ 'mode' => mode,
96
+ 'columnName' => fact[:name]
97
+ }]
98
+ end
99
+
100
+ # Converts label to manifest
101
+ #
102
+ # @param project [GoodData::Model::ProjectBlueprint] Project blueprint
103
+ # @param dataset [GoodData::Model::SchemaBlueprint] Dataset blueprint
104
+ # @param label [Hash] Label
105
+ # @param mode [String] Mode of the load. Either FULL or INCREMENTAL
106
+ # @return [Hash] Manifest for a particular label
107
+ def self.label_to_manifest(project, dataset, label, mode)
108
+ a = DatasetBlueprint.attribute_for_label(dataset, label)
109
+ [{
110
+ 'populates' => [GoodData::Model.identifier_for(dataset, label, a)],
111
+ 'mode' => mode,
112
+ 'columnName' => label[:name]
113
+ }]
114
+ end
115
+
116
+ # The entry function of the module. Converts the ProjectBlueprint to manifest
117
+ # to be used with SLI (GD loading interface).
118
+ #
119
+ # @param project [GoodData::Model::ProjectBlueprint] Project blueprint
120
+ # @param mode [String] Mode of the load. Either FULL or INCREMENTAL
121
+ # @return [Hash] Manifest for a particular project
122
+ def self.to_manifest(project, mode = 'FULL')
123
+ ProjectBlueprint.datasets(project.to_hash).map do |dataset|
124
+ columns = GoodData::Model::DatasetBlueprint.columns(dataset)
125
+ {
126
+ 'dataSetSLIManifest' => {
127
+ 'parts' => columns.mapcat { |c| column_to_manifest(project, dataset, c, mode) },
128
+ 'dataSet' => GoodData::Model.identifier_for(dataset),
129
+ 'file' => 'data.csv', # should be configurable
130
+ 'csvParams' => {
131
+ 'quoteChar' => '"',
132
+ 'escapeChar' => '"',
133
+ 'separatorChar' => ',',
134
+ 'endOfLine' => "\n"
135
+ }
136
+ }
137
+ }
138
+ end
139
+ end
140
+
141
+ # Converts reference to manifest
142
+ #
143
+ # @param project [GoodData::Model::ProjectBlueprint] Project blueprint
144
+ # @param dataset [GoodData::Model::SchemaBlueprint] Dataset blueprint
145
+ # @param reference [Hash] Reference
146
+ # @param mode [String] Mode of the load. Either FULL or INCREMENTAL
147
+ # @return [Hash] Manifest for a particular reference
148
+ def self.reference_to_manifest(project, dataset, reference, mode)
149
+ referenced_dataset = ProjectBlueprint.find_dataset(project, reference[:dataset])
150
+ anchor = DatasetBlueprint.anchor(referenced_dataset)
151
+ [{
152
+ 'populates' => [GoodData::Model.identifier_for(referenced_dataset, anchor.merge(type: :primary_label))],
153
+ 'mode' => mode,
154
+ 'columnName' => reference[:name],
155
+ 'referenceKey' => 1
156
+ }]
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,150 @@
1
+ # encoding: UTF-8
2
+
3
+ module GoodData
4
+ module Model
5
+ module ToWire
6
+ # Converts anchor to wire format. There is difference between datsets that
7
+ # do not have anchor and those that do. Even if there is no acnhor you
8
+ # stil have to generate. If there is anchor it behaves exactly like am
9
+ # attribute
10
+ #
11
+ # @param project [Hash] Project blueprint hash represenation
12
+ # @param dataset [Hash] Dataset blueprint hash represenation
13
+ # @return [Hash] Manifest for a particular reference
14
+ def self.anchor_to_wire(project, dataset)
15
+ if DatasetBlueprint.anchor(dataset)
16
+ attribute_to_wire(dataset, DatasetBlueprint.anchor(dataset))
17
+ else
18
+ {
19
+ attribute: {
20
+ identifier: GoodData::Model.identifier_for(dataset, type: :anchor_no_label),
21
+ title: "Records of #{ GoodData::Model.title(dataset) }"
22
+ }
23
+ }
24
+ end
25
+ end
26
+
27
+ # Converts atttribute to wire format.
28
+ #
29
+ # @param project [Hash] Project blueprint hash represenation
30
+ # @param dataset [Hash] Dataset blueprint hash represenation
31
+ # @return [Hash] Manifest for a particular reference
32
+ def self.attributes_to_wire(project, dataset)
33
+ DatasetBlueprint.attributes(dataset).map do |a|
34
+ attribute_to_wire(dataset, a)
35
+ end
36
+ end
37
+
38
+ # Converts atttribute to wire format.
39
+ #
40
+ # @param dataset [Hash] Dataset blueprint hash represenation
41
+ # @param attribute [Hash] Attribute
42
+ # @return [Hash] Manifest for a particular reference
43
+ def self.attribute_to_wire(dataset, attribute)
44
+ default_label = DatasetBlueprint.default_label_for_attribute(dataset, attribute)
45
+ label = default_label[:type].to_sym == :label ? default_label : default_label.merge(type: :primary_label)
46
+ {
47
+ attribute: {
48
+ identifier: GoodData::Model.identifier_for(dataset, attribute),
49
+ title: GoodData::Model.title(attribute),
50
+ labels: ([attribute.merge(type: :primary_label)] + DatasetBlueprint.labels_for_attribute(dataset, attribute)).map do |l|
51
+ {
52
+ label: {
53
+ identifier: GoodData::Model.identifier_for(dataset, l, attribute),
54
+ title: GoodData::Model.title(l),
55
+ type: l[:gd_type],
56
+ dataType: l[:gd_data_type]
57
+ }
58
+ }
59
+ end,
60
+ defaultLabel: GoodData::Model.identifier_for(dataset, label, attribute)
61
+ }
62
+ }
63
+ end
64
+
65
+ # Converts dataset to wire format.
66
+ #
67
+ # @param project [Hash] Project blueprint hash represenation
68
+ # @param dataset [Hash] Dataset blueprint hash represenation
69
+ # @return [Hash] Manifest for a particular reference
70
+ def self.dataset_to_wire(project, dataset)
71
+ {
72
+ dataset: {
73
+ identifier: GoodData::Model.identifier_for(dataset),
74
+ title: GoodData::Model.title(dataset),
75
+ anchor: anchor_to_wire(project, dataset),
76
+ attributes: attributes_to_wire(project, dataset),
77
+ facts: DatasetBlueprint.facts(dataset).map { |f| fact_to_wire(dataset, f) },
78
+ references: references_to_wire(project, dataset)
79
+ }
80
+ }
81
+ end
82
+
83
+ # Converts date dimension to wire format.
84
+ #
85
+ # @param project [Hash] Project blueprint hash represenation
86
+ # @param dataset [Hash] Dataset blueprint hash represenation
87
+ # @return [Hash] Manifest for a particular reference
88
+ def self.date_dimensions_to_wire(project, dataset)
89
+ {
90
+ dateDimension: {
91
+ name: dataset[:name],
92
+ title: GoodData::Model.title(dataset)
93
+ }
94
+ }
95
+ end
96
+
97
+ # Converts fact to wire format.
98
+ #
99
+ # @param dataset [Hash] Dataset blueprint hash represenation
100
+ # @param fact [Hash] Fact blueprint
101
+ # @return [Hash] Manifest for a particular reference
102
+ def self.fact_to_wire(dataset, fact)
103
+ {
104
+ fact: {
105
+ identifier: GoodData::Model.identifier_for(dataset, fact),
106
+ title: GoodData::Model.title(fact),
107
+ dataType: fact[:gd_data_type] || DEFAULT_FACT_DATATYPE
108
+ }
109
+ }
110
+ end
111
+
112
+ # Converts references to wire format.
113
+ #
114
+ # @param fact [Hash] Project blueprint hash represenation
115
+ # @param dataset [Hash] Dataset blueprint hash represenation
116
+ # @return [Hash] Manifest for a particular reference
117
+ def self.references_to_wire(project, dataset)
118
+ DatasetBlueprint.references(dataset).map do |r|
119
+ if ProjectBlueprint.date_dimension?(project, r[:dataset])
120
+ ProjectBlueprint.find_date_dimension(project, r[:dataset])[:name]
121
+ elsif ProjectBlueprint.dataset?(project, r[:dataset])
122
+ ds = ProjectBlueprint.find_dataset(project, r[:dataset])
123
+ 'dataset.' + ds[:name]
124
+ else
125
+ fail 'This dataset does not exist'
126
+ end
127
+ end
128
+ end
129
+
130
+ # Entry method. Converts ProjectBlueprint representation into wire format
131
+ # which is understood by the API
132
+ #
133
+ # @param fact [Hash] Project blueprint represenation
134
+ # @param dataset [Hash] Dataset blueprint hash represenation
135
+ # @return [Hash] Manifest for a particular reference
136
+ def self.to_wire(what)
137
+ {
138
+ diffRequest: {
139
+ targetModel: {
140
+ projectModel: {
141
+ datasets: what[:datasets].map { |d| dataset_to_wire(what, d) },
142
+ dateDimensions: what[:date_dimensions].map { |d| date_dimensions_to_wire(what, d) }
143
+ }
144
+ }
145
+ }
146
+ }
147
+ end
148
+ end
149
+ end
150
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  # GoodData Module
4
4
  module GoodData
5
- VERSION = '0.6.4'
5
+ VERSION = '0.6.5'
6
6
 
7
7
  class << self
8
8
  # Version
@@ -6,7 +6,9 @@
6
6
  "columns": [
7
7
  {
8
8
  "type": "attribute",
9
- "name": "id"
9
+ "name": "id",
10
+ "gd_data_type" : "INT",
11
+ "gd_type" : "GDC.text"
10
12
  },
11
13
  {
12
14
  "type": "fact",
@@ -0,0 +1,1370 @@
1
+ {
2
+ "datasets": [{
3
+ "type": "dataset",
4
+ "title": "stage_history",
5
+ "name": "stage_history",
6
+ "columns": [{
7
+ "type": "attribute",
8
+ "name": "currentstatus",
9
+ "title": "Current Stage",
10
+ "gd_data_type": "VARCHAR(128)",
11
+ "gd_type": "GDC.text"
12
+ }, {
13
+ "type": "fact",
14
+ "name": "stage_velocity",
15
+ "gd_data_type": "DECIMAL(12,2)"
16
+ }, {
17
+ "type": "fact",
18
+ "name": "stage_duration",
19
+ "gd_data_type": "DECIMAL(12,2)"
20
+ }, {
21
+ "type": "date_fact",
22
+ "name": "opp_created_date",
23
+ "title": "Opp. Created (Date) for Stage History",
24
+ "gd_data_type": "INT"
25
+ }, {
26
+ "type": "date_fact",
27
+ "name": "opp_close_date",
28
+ "title": "Opp. Close (Date) for Stage History",
29
+ "gd_data_type": "INT"
30
+ }, {
31
+ "type": "reference",
32
+ "name": "account",
33
+ "dataset": "account"
34
+ }, {
35
+ "type": "reference",
36
+ "name": "product",
37
+ "dataset": "product"
38
+ }, {
39
+ "type": "reference",
40
+ "name": "stage",
41
+ "dataset": "stage"
42
+ }, {
43
+ "type": "reference",
44
+ "name": "opp_owner",
45
+ "dataset": "opp_owner"
46
+ }, {
47
+ "type": "reference",
48
+ "name": "opportunity",
49
+ "dataset": "opportunity"
50
+ }, {
51
+ "type": "reference",
52
+ "name": "bookingtype",
53
+ "dataset": "bookingtype"
54
+ }, {
55
+ "type": "date",
56
+ "name": "oppclose",
57
+ "dataset": "oppclose"
58
+ }, {
59
+ "type": "date",
60
+ "name": "oppcreated",
61
+ "dataset": "oppcreated"
62
+ }]
63
+ }, {
64
+ "type": "dataset",
65
+ "title": "opp_snapshot",
66
+ "name": "opp_snapshot",
67
+ "columns": [{
68
+ "type": "attribute",
69
+ "name": "accountstagesnapshot",
70
+ "title": "Account Stage (Snapshot)",
71
+ "gd_data_type": "VARCHAR(128)",
72
+ "gd_type": "GDC.text"
73
+ }, {
74
+ "type": "fact",
75
+ "name": "amount",
76
+ "title": "Amount Snapshot",
77
+ "gd_data_type": "DECIMAL(12,2)"
78
+ }, {
79
+ "type": "fact",
80
+ "name": "probability",
81
+ "title": "Probability Snapshot",
82
+ "gd_data_type": "DECIMAL(12,2)"
83
+ }, {
84
+ "type": "date_fact",
85
+ "name": "created_date",
86
+ "title": "Opp. Created (Date) Snapshot",
87
+ "gd_data_type": "INT"
88
+ }, {
89
+ "type": "date_fact",
90
+ "name": "close_date",
91
+ "title": "Opp. Close (Date) Snapshot",
92
+ "gd_data_type": "INT"
93
+ }, {
94
+ "type": "date_fact",
95
+ "name": "snapshot_date",
96
+ "title": "Opp. Snapshot (Date)",
97
+ "gd_data_type": "INT"
98
+ }, {
99
+ "type": "fact",
100
+ "name": "mrr",
101
+ "title": "Straight Line MRR (Snapshot)",
102
+ "gd_data_type": "DECIMAL(12,2)"
103
+ }, {
104
+ "type": "fact",
105
+ "name": "distributedmrr",
106
+ "title": "Ending MRR (Snapshot)",
107
+ "gd_data_type": "DECIMAL(12,2)"
108
+ }, {
109
+ "type": "date_fact",
110
+ "name": "effectivecontractstart",
111
+ "title": "Opp. Contract Start (Date) Snapshot",
112
+ "gd_data_type": "INT"
113
+ }, {
114
+ "type": "date_fact",
115
+ "name": "effectivecontractend",
116
+ "title": "Opp. Contract End (Date) Snapshot",
117
+ "gd_data_type": "INT"
118
+ }, {
119
+ "type": "reference",
120
+ "name": "sdrowner",
121
+ "dataset": "sdrowner"
122
+ }, {
123
+ "type": "reference",
124
+ "name": "leadsourceoriginal",
125
+ "dataset": "leadsourceoriginal"
126
+ }, {
127
+ "type": "reference",
128
+ "name": "account",
129
+ "dataset": "account"
130
+ }, {
131
+ "type": "reference",
132
+ "name": "amounttype",
133
+ "dataset": "amounttype"
134
+ }, {
135
+ "type": "reference",
136
+ "name": "product",
137
+ "dataset": "product"
138
+ }, {
139
+ "type": "reference",
140
+ "name": "sourcingorigin",
141
+ "dataset": "sourcingorigin"
142
+ }, {
143
+ "type": "reference",
144
+ "name": "leadsource",
145
+ "dataset": "leadsource"
146
+ }, {
147
+ "type": "reference",
148
+ "name": "productline",
149
+ "dataset": "productline"
150
+ }, {
151
+ "type": "reference",
152
+ "name": "stage",
153
+ "dataset": "stage"
154
+ }, {
155
+ "type": "reference",
156
+ "name": "opp_owner",
157
+ "dataset": "opp_owner"
158
+ }, {
159
+ "type": "reference",
160
+ "name": "opportunity",
161
+ "dataset": "opportunity"
162
+ }, {
163
+ "type": "reference",
164
+ "name": "bookingtype",
165
+ "dataset": "bookingtype"
166
+ }, {
167
+ "type": "reference",
168
+ "name": "forecast",
169
+ "dataset": "forecast"
170
+ }, {
171
+ "type": "date",
172
+ "name": "leadcreate",
173
+ "dataset": "leadcreate"
174
+ }, {
175
+ "type": "date",
176
+ "name": "snapshot",
177
+ "dataset": "snapshot"
178
+ }, {
179
+ "type": "date",
180
+ "name": "oppclose",
181
+ "dataset": "oppclose"
182
+ }, {
183
+ "type": "date",
184
+ "name": "oppcreated",
185
+ "dataset": "oppcreated"
186
+ }, {
187
+ "type": "date",
188
+ "name": "stage1plus",
189
+ "dataset": "stage1plus"
190
+ }, {
191
+ "type": "date",
192
+ "name": "mqldate",
193
+ "dataset": "mqldate"
194
+ }, {
195
+ "type": "date",
196
+ "name": "effectivecontractstart",
197
+ "dataset": "effectivecontractstart"
198
+ }, {
199
+ "type": "date",
200
+ "name": "effectivecontractend",
201
+ "dataset": "effectivecontractend"
202
+ }]
203
+ }, {
204
+ "type": "dataset",
205
+ "title": "Opp_changes",
206
+ "name": "opp_changes",
207
+ "columns": [{
208
+ "type": "attribute",
209
+ "name": "interval_changes",
210
+ "title": "Interval_Changes",
211
+ "gd_data_type": "VARCHAR(128)",
212
+ "gd_type": "GDC.text"
213
+ }, {
214
+ "type": "attribute",
215
+ "name": "previous_stage",
216
+ "title": "Previous_Stage",
217
+ "gd_data_type": "VARCHAR(128)",
218
+ "gd_type": "GDC.text"
219
+ }, {
220
+ "type": "fact",
221
+ "name": "amount_changed",
222
+ "title": "amount_changed_expected",
223
+ "gd_data_type": "DECIMAL(12,2)"
224
+ }, {
225
+ "type": "fact",
226
+ "name": "amount_changed_current_q",
227
+ "title": "amount_changed_current_q_expected",
228
+ "gd_data_type": "DECIMAL(12,2)"
229
+ }, {
230
+ "type": "fact",
231
+ "name": "previous_amount",
232
+ "title": "previous_amount",
233
+ "gd_data_type": "DECIMAL(12,2)"
234
+ }, {
235
+ "type": "fact",
236
+ "name": "new_amount",
237
+ "title": "new_amount",
238
+ "gd_data_type": "DECIMAL(12,2)"
239
+ }, {
240
+ "type": "fact",
241
+ "name": "amount_changed_potential",
242
+ "title": "amount_changed_potential",
243
+ "gd_data_type": "DECIMAL(12,2)"
244
+ }, {
245
+ "type": "fact",
246
+ "name": "amount_changed_current_q_potential",
247
+ "title": "amount_changed_current_q_potential",
248
+ "gd_data_type": "DECIMAL(12,2)"
249
+ }, {
250
+ "type": "reference",
251
+ "name": "account",
252
+ "dataset": "account"
253
+ }, {
254
+ "type": "reference",
255
+ "name": "amounttype",
256
+ "dataset": "amounttype"
257
+ }, {
258
+ "type": "reference",
259
+ "name": "product",
260
+ "dataset": "product"
261
+ }, {
262
+ "type": "reference",
263
+ "name": "productline",
264
+ "dataset": "productline"
265
+ }, {
266
+ "type": "reference",
267
+ "name": "stage",
268
+ "dataset": "stage"
269
+ }, {
270
+ "type": "reference",
271
+ "name": "opp_owner",
272
+ "dataset": "opp_owner"
273
+ }, {
274
+ "type": "reference",
275
+ "name": "opportunity",
276
+ "dataset": "opportunity"
277
+ }, {
278
+ "type": "reference",
279
+ "name": "bookingtype",
280
+ "dataset": "bookingtype"
281
+ }, {
282
+ "type": "date",
283
+ "name": "oppclose",
284
+ "dataset": "oppclose"
285
+ }, {
286
+ "type": "date",
287
+ "name": "previous_close_date",
288
+ "dataset": "previous_close_date"
289
+ }]
290
+ }, {
291
+ "type": "dataset",
292
+ "title": "Opportunity Benchmark",
293
+ "name": "opportunityanalysis",
294
+ "columns": [{
295
+ "type": "anchor",
296
+ "name": "techoppanalysis",
297
+ "title": "Tech Opp. Analysis",
298
+ "gd_data_type": "VARCHAR(128)",
299
+ "gd_type": "GDC.text"
300
+ }, {
301
+ "type": "attribute",
302
+ "name": "month",
303
+ "gd_data_type": "VARCHAR(128)",
304
+ "gd_type": "GDC.text"
305
+ }, {
306
+ "type": "label",
307
+ "reference": "month",
308
+ "name": "monthsortingnew",
309
+ "title": "MonthSortingNew",
310
+ "gd_data_type": "INT",
311
+ "gd_type": "GDC.text"
312
+ }, {
313
+ "type": "attribute",
314
+ "name": "cohorttype",
315
+ "title": "Cohort Type",
316
+ "gd_data_type": "VARCHAR(128)",
317
+ "gd_type": "GDC.text"
318
+ }, {
319
+ "type": "fact",
320
+ "name": "buckets_to_display",
321
+ "title": "buckets_to_display",
322
+ "gd_data_type": "DECIMAL(12,2)"
323
+ }, {
324
+ "type": "fact",
325
+ "name": "month_fact",
326
+ "title": "month_fact",
327
+ "gd_data_type": "DECIMAL(12,2)"
328
+ }, {
329
+ "type": "reference",
330
+ "name": "opp_records",
331
+ "dataset": "opp_records"
332
+ }, {
333
+ "type": "reference",
334
+ "name": "consolidatedmarketingstatus",
335
+ "dataset": "consolidatedmarketingstatus"
336
+ }]
337
+ }, {
338
+ "type": "dataset",
339
+ "title": "quota",
340
+ "name": "goals",
341
+ "columns": [{
342
+ "type": "attribute",
343
+ "name": "quotatype",
344
+ "title": "Quota Type",
345
+ "gd_data_type": "VARCHAR(128)",
346
+ "gd_type": "GDC.text"
347
+ }, {
348
+ "type": "fact",
349
+ "name": "amount",
350
+ "title": "quota amount",
351
+ "gd_data_type": "DECIMAL(12,2)"
352
+ }, {
353
+ "type": "date_fact",
354
+ "name": "mqldate",
355
+ "title": "MQL Date (Quota)",
356
+ "gd_data_type": "INT"
357
+ }, {
358
+ "type": "date_fact",
359
+ "name": "stage1plus",
360
+ "title": "SAO Date (Quota)",
361
+ "gd_data_type": "INT"
362
+ }, {
363
+ "type": "date_fact",
364
+ "name": "oppcreated",
365
+ "title": "Opp. Create (Quota)",
366
+ "gd_data_type": "INT"
367
+ }, {
368
+ "type": "date_fact",
369
+ "name": "oppclose",
370
+ "title": "Opp. Close (Quota)",
371
+ "gd_data_type": "INT"
372
+ }, {
373
+ "type": "reference",
374
+ "name": "sdrowner",
375
+ "dataset": "sdrowner"
376
+ }, {
377
+ "type": "reference",
378
+ "name": "amounttype",
379
+ "dataset": "amounttype"
380
+ }, {
381
+ "type": "reference",
382
+ "name": "product",
383
+ "dataset": "product"
384
+ }, {
385
+ "type": "reference",
386
+ "name": "sourcingorigin",
387
+ "dataset": "sourcingorigin"
388
+ }, {
389
+ "type": "reference",
390
+ "name": "activity_owner",
391
+ "dataset": "activity_owner"
392
+ }, {
393
+ "type": "reference",
394
+ "name": "opp_owner",
395
+ "dataset": "opp_owner"
396
+ }, {
397
+ "type": "reference",
398
+ "name": "bookingtype",
399
+ "dataset": "bookingtype"
400
+ }, {
401
+ "type": "date",
402
+ "name": "activity",
403
+ "dataset": "activity"
404
+ }, {
405
+ "type": "date",
406
+ "name": "oppclose",
407
+ "dataset": "oppclose"
408
+ }, {
409
+ "type": "date",
410
+ "name": "oppcreated",
411
+ "dataset": "oppcreated"
412
+ }, {
413
+ "type": "date",
414
+ "name": "stage1plus",
415
+ "dataset": "stage1plus"
416
+ }, {
417
+ "type": "date",
418
+ "name": "mqldate",
419
+ "dataset": "mqldate"
420
+ }, {
421
+ "type": "date",
422
+ "name": "s2o",
423
+ "dataset": "s2o"
424
+ }]
425
+ }, {
426
+ "type": "dataset",
427
+ "title": "timeline",
428
+ "name": "timeline",
429
+ "columns": [{
430
+ "type": "date_fact",
431
+ "name": "timeline",
432
+ "title": "Timeline (Date)",
433
+ "gd_data_type": "INT"
434
+ }, {
435
+ "type": "date",
436
+ "name": "timeline",
437
+ "dataset": "timeline"
438
+ }]
439
+ }, {
440
+ "type": "dataset",
441
+ "title": "activity_monitoring",
442
+ "name": "activity_monitoring",
443
+ "columns": [{
444
+ "type": "date_fact",
445
+ "name": "opp_created_date",
446
+ "title": "Opp. Created (Date) for Activity",
447
+ "gd_data_type": "INT"
448
+ }, {
449
+ "type": "date_fact",
450
+ "name": "opp_close_date",
451
+ "title": "Opp. Close (Date) for Activity",
452
+ "gd_data_type": "INT"
453
+ }, {
454
+ "type": "date_fact",
455
+ "name": "activity_date",
456
+ "title": "Activity (Date)",
457
+ "gd_data_type": "INT"
458
+ }, {
459
+ "type": "reference",
460
+ "name": "account",
461
+ "dataset": "account"
462
+ }, {
463
+ "type": "reference",
464
+ "name": "product",
465
+ "dataset": "product"
466
+ }, {
467
+ "type": "reference",
468
+ "name": "activity_owner",
469
+ "dataset": "activity_owner"
470
+ }, {
471
+ "type": "reference",
472
+ "name": "stage",
473
+ "dataset": "stage"
474
+ }, {
475
+ "type": "reference",
476
+ "name": "opp_owner",
477
+ "dataset": "opp_owner"
478
+ }, {
479
+ "type": "reference",
480
+ "name": "activity",
481
+ "dataset": "activity"
482
+ }, {
483
+ "type": "reference",
484
+ "name": "opportunity",
485
+ "dataset": "opportunity"
486
+ }, {
487
+ "type": "reference",
488
+ "name": "bookingtype",
489
+ "dataset": "bookingtype"
490
+ }, {
491
+ "type": "date",
492
+ "name": "activity",
493
+ "dataset": "activity"
494
+ }, {
495
+ "type": "date",
496
+ "name": "oppclose",
497
+ "dataset": "oppclose"
498
+ }, {
499
+ "type": "date",
500
+ "name": "oppcreated",
501
+ "dataset": "oppcreated"
502
+ }]
503
+ }, {
504
+ "type": "dataset",
505
+ "title": "opp_records",
506
+ "name": "opp_records",
507
+ "columns": [{
508
+ "type": "anchor",
509
+ "name": "factsof",
510
+ "title": "Records of opp_records",
511
+ "gd_data_type": "VARCHAR(128)",
512
+ "gd_type": "GDC.text"
513
+ }, {
514
+ "type": "label",
515
+ "reference": "factsof",
516
+ "name": "opp_records_conctn_point",
517
+ "title": "opp_records_conctn_point",
518
+ "gd_data_type": "VARCHAR(128)",
519
+ "gd_type": "GDC.text"
520
+ }, {
521
+ "type": "fact",
522
+ "name": "amount",
523
+ "gd_data_type": "DECIMAL(12,2)"
524
+ }, {
525
+ "type": "fact",
526
+ "name": "probability",
527
+ "gd_data_type": "DECIMAL(12,2)"
528
+ }, {
529
+ "type": "date_fact",
530
+ "name": "created_date",
531
+ "title": "Opp. Created (Date)",
532
+ "gd_data_type": "INT"
533
+ }, {
534
+ "type": "date_fact",
535
+ "name": "close_date",
536
+ "title": "Opp. Close (Date)",
537
+ "gd_data_type": "INT"
538
+ }, {
539
+ "type": "date_fact",
540
+ "name": "stage1plus",
541
+ "title": "SAO (date)",
542
+ "gd_data_type": "INT"
543
+ }, {
544
+ "type": "date_fact",
545
+ "name": "leadcreate",
546
+ "title": "Lead Created (Date)",
547
+ "gd_data_type": "INT"
548
+ }, {
549
+ "type": "date_fact",
550
+ "name": "mqldate",
551
+ "title": "MQL (Date)",
552
+ "gd_data_type": "INT"
553
+ }, {
554
+ "type": "date_fact",
555
+ "name": "firstcontactdate",
556
+ "title": "Contact (Date)",
557
+ "gd_data_type": "INT"
558
+ }, {
559
+ "type": "date_fact",
560
+ "name": "laststage0plus",
561
+ "title": "Last Stage 0 Plus",
562
+ "gd_data_type": "INT"
563
+ }, {
564
+ "type": "fact",
565
+ "name": "mrr",
566
+ "title": "Straight Line MRR",
567
+ "gd_data_type": "DECIMAL(12,2)"
568
+ }, {
569
+ "type": "fact",
570
+ "name": "distributed_mrr",
571
+ "title": "Ending MRR",
572
+ "gd_data_type": "DECIMAL(12,2)"
573
+ }, {
574
+ "type": "fact",
575
+ "name": "freemonths",
576
+ "title": "Free Months",
577
+ "gd_data_type": "DECIMAL(12,2)"
578
+ }, {
579
+ "type": "date_fact",
580
+ "name": "effectivecontractstart",
581
+ "title": "Contract Start (Date)",
582
+ "gd_data_type": "INT"
583
+ }, {
584
+ "type": "date_fact",
585
+ "name": "effectivecontractend",
586
+ "title": "Contract End (Date)",
587
+ "gd_data_type": "INT"
588
+ }, {
589
+ "type": "fact",
590
+ "name": "upsellcmrr",
591
+ "title": "Upsell CMRR",
592
+ "gd_data_type": "DECIMAL(12,2)"
593
+ }, {
594
+ "type": "fact",
595
+ "name": "downsellcmrr",
596
+ "title": "Downsell CMRR",
597
+ "gd_data_type": "DECIMAL(12,2)"
598
+ }, {
599
+ "type": "fact",
600
+ "name": "upliftcmrr",
601
+ "title": "Uplift CMRR",
602
+ "gd_data_type": "DECIMAL(12,2)"
603
+ }, {
604
+ "type": "fact",
605
+ "name": "churncmrr",
606
+ "title": "Churn CMRR",
607
+ "gd_data_type": "DECIMAL(12,2)"
608
+ }, {
609
+ "type": "date_fact",
610
+ "name": "firstmeeting",
611
+ "title": "First Meeting (Date)",
612
+ "gd_data_type": "INT"
613
+ }, {
614
+ "type": "date_fact",
615
+ "name": "s2o",
616
+ "title": "S2O (Date)",
617
+ "gd_data_type": "INT"
618
+ }, {
619
+ "type": "reference",
620
+ "name": "sdrowner",
621
+ "dataset": "sdrowner"
622
+ }, {
623
+ "type": "reference",
624
+ "name": "leadsourceoriginal",
625
+ "dataset": "leadsourceoriginal"
626
+ }, {
627
+ "type": "reference",
628
+ "name": "account",
629
+ "dataset": "account"
630
+ }, {
631
+ "type": "reference",
632
+ "name": "amounttype",
633
+ "dataset": "amounttype"
634
+ }, {
635
+ "type": "reference",
636
+ "name": "product",
637
+ "dataset": "product"
638
+ }, {
639
+ "type": "reference",
640
+ "name": "renewalstatus",
641
+ "dataset": "renewalstatus"
642
+ }, {
643
+ "type": "reference",
644
+ "name": "sourcingorigin",
645
+ "dataset": "sourcingorigin"
646
+ }, {
647
+ "type": "reference",
648
+ "name": "sdrperformancestatus",
649
+ "dataset": "sdrperformancestatus"
650
+ }, {
651
+ "type": "reference",
652
+ "name": "leadsource",
653
+ "dataset": "leadsource"
654
+ }, {
655
+ "type": "reference",
656
+ "name": "winlossreason",
657
+ "dataset": "winlossreason"
658
+ }, {
659
+ "type": "reference",
660
+ "name": "productline",
661
+ "dataset": "productline"
662
+ }, {
663
+ "type": "reference",
664
+ "name": "leadchannel",
665
+ "dataset": "leadchannel"
666
+ }, {
667
+ "type": "reference",
668
+ "name": "stage",
669
+ "dataset": "stage"
670
+ }, {
671
+ "type": "reference",
672
+ "name": "opp_owner",
673
+ "dataset": "opp_owner"
674
+ }, {
675
+ "type": "reference",
676
+ "name": "opportunity",
677
+ "dataset": "opportunity"
678
+ }, {
679
+ "type": "reference",
680
+ "name": "bookingtype",
681
+ "dataset": "bookingtype"
682
+ }, {
683
+ "type": "reference",
684
+ "name": "forecast",
685
+ "dataset": "forecast"
686
+ }, {
687
+ "type": "date",
688
+ "name": "leadcreate",
689
+ "dataset": "leadcreate"
690
+ }, {
691
+ "type": "date",
692
+ "name": "oppclose",
693
+ "dataset": "oppclose"
694
+ }, {
695
+ "type": "date",
696
+ "name": "oppcreated",
697
+ "dataset": "oppcreated"
698
+ }, {
699
+ "type": "date",
700
+ "name": "stage1plus",
701
+ "dataset": "stage1plus"
702
+ }, {
703
+ "type": "date",
704
+ "name": "firstcontactdate",
705
+ "dataset": "firstcontactdate"
706
+ }, {
707
+ "type": "date",
708
+ "name": "mqldate",
709
+ "dataset": "mqldate"
710
+ }, {
711
+ "type": "date",
712
+ "name": "s2o",
713
+ "dataset": "s2o"
714
+ }, {
715
+ "type": "date",
716
+ "name": "firstmeeting",
717
+ "dataset": "firstmeeting"
718
+ }, {
719
+ "type": "date",
720
+ "name": "effectivecontractstart",
721
+ "dataset": "effectivecontractstart"
722
+ }, {
723
+ "type": "date",
724
+ "name": "laststage0plus",
725
+ "dataset": "laststage0plus"
726
+ }, {
727
+ "type": "date",
728
+ "name": "effectivecontractend",
729
+ "dataset": "effectivecontractend"
730
+ }]
731
+ }, {
732
+ "type": "dataset",
733
+ "title": "SDR Owner",
734
+ "name": "sdrowner",
735
+ "columns": [{
736
+ "type": "anchor",
737
+ "name": "sdrowner",
738
+ "title": "SDR Owner",
739
+ "gd_data_type": "VARCHAR(128)",
740
+ "gd_type": "GDC.text"
741
+ }, {
742
+ "type": "label",
743
+ "reference": "sdrowner",
744
+ "name": "sdrownername",
745
+ "title": "SDR Owner Name",
746
+ "gd_data_type": "VARCHAR(128)",
747
+ "gd_type": "GDC.text"
748
+ }, {
749
+ "type": "attribute",
750
+ "name": "sdrteam",
751
+ "title": "SDR Team",
752
+ "gd_data_type": "VARCHAR(128)",
753
+ "gd_type": "GDC.text"
754
+ }]
755
+ }, {
756
+ "type": "dataset",
757
+ "title": "Lead Source Original",
758
+ "name": "leadsourceoriginal",
759
+ "columns": [{
760
+ "type": "anchor",
761
+ "name": "leadsourceoriginal",
762
+ "title": "Lead Source Original",
763
+ "gd_data_type": "VARCHAR(128)",
764
+ "gd_type": "GDC.text"
765
+ }, {
766
+ "type": "attribute",
767
+ "name": "leadcategory",
768
+ "title": "Lead Source Original Category",
769
+ "gd_data_type": "VARCHAR(128)",
770
+ "gd_type": "GDC.text"
771
+ }]
772
+ }, {
773
+ "type": "dataset",
774
+ "title": "account",
775
+ "name": "account",
776
+ "columns": [{
777
+ "type": "anchor",
778
+ "name": "id",
779
+ "title": "Account",
780
+ "gd_data_type": "VARCHAR(128)",
781
+ "gd_type": "GDC.text"
782
+ }, {
783
+ "type": "label",
784
+ "reference": "id",
785
+ "name": "name",
786
+ "title": "Account Name",
787
+ "gd_data_type": "VARCHAR(128)",
788
+ "gd_type": "GDC.text"
789
+ }, {
790
+ "type": "label",
791
+ "reference": "id",
792
+ "name": "url",
793
+ "title": "Account Url",
794
+ "gd_data_type": "VARCHAR(128)",
795
+ "gd_type": "GDC.link"
796
+ }, {
797
+ "type": "attribute",
798
+ "name": "region",
799
+ "title": "Account Region",
800
+ "gd_data_type": "VARCHAR(128)",
801
+ "gd_type": "GDC.text"
802
+ }, {
803
+ "type": "attribute",
804
+ "name": "accountstage",
805
+ "title": "Account Stage",
806
+ "gd_data_type": "VARCHAR(128)",
807
+ "gd_type": "GDC.text"
808
+ }, {
809
+ "type": "attribute",
810
+ "name": "accountownername",
811
+ "title": "Account Owner Name",
812
+ "gd_data_type": "VARCHAR(128)",
813
+ "gd_type": "GDC.text"
814
+ }, {
815
+ "type": "attribute",
816
+ "name": "accountindustry",
817
+ "title": "Account Industry",
818
+ "gd_data_type": "VARCHAR(128)",
819
+ "gd_type": "GDC.text"
820
+ }, {
821
+ "type": "attribute",
822
+ "name": "accountemployeecount",
823
+ "title": "Account Employee Count",
824
+ "gd_data_type": "VARCHAR(128)",
825
+ "gd_type": "GDC.text"
826
+ }, {
827
+ "type": "label",
828
+ "reference": "accountemployeecount",
829
+ "name": "employeecountsort",
830
+ "title": "Employee Count Sort",
831
+ "gd_data_type": "INT",
832
+ "gd_type": "GDC.text"
833
+ }, {
834
+ "type": "attribute",
835
+ "name": "accountannualrevenue",
836
+ "title": "Account Annual Revenue",
837
+ "gd_data_type": "VARCHAR(128)",
838
+ "gd_type": "GDC.text"
839
+ }]
840
+ }, {
841
+ "type": "dataset",
842
+ "title": "Revenue Type",
843
+ "name": "amounttype",
844
+ "columns": [{
845
+ "type": "anchor",
846
+ "name": "amounttype",
847
+ "title": "Revenue Type",
848
+ "gd_data_type": "VARCHAR(128)",
849
+ "gd_type": "GDC.text"
850
+ }]
851
+ }, {
852
+ "type": "dataset",
853
+ "title": "product",
854
+ "name": "product",
855
+ "columns": [{
856
+ "type": "anchor",
857
+ "name": "id",
858
+ "title": "Product",
859
+ "gd_data_type": "VARCHAR(128)",
860
+ "gd_type": "GDC.text"
861
+ }, {
862
+ "type": "label",
863
+ "reference": "id",
864
+ "name": "name",
865
+ "title": "Product Name",
866
+ "gd_data_type": "VARCHAR(128)",
867
+ "gd_type": "GDC.text"
868
+ }, {
869
+ "type": "attribute",
870
+ "name": "product_type",
871
+ "gd_data_type": "VARCHAR(128)",
872
+ "gd_type": "GDC.text"
873
+ }]
874
+ }, {
875
+ "type": "dataset",
876
+ "title": "Renewal Status",
877
+ "name": "renewalstatus",
878
+ "columns": [{
879
+ "type": "anchor",
880
+ "name": "renewalstatus",
881
+ "title": "Renewal Status",
882
+ "gd_data_type": "VARCHAR(128)",
883
+ "gd_type": "GDC.text"
884
+ }]
885
+ }, {
886
+ "type": "dataset",
887
+ "title": "Sourcing Type",
888
+ "name": "sourcingorigin",
889
+ "columns": [{
890
+ "type": "anchor",
891
+ "name": "techsourcingtype",
892
+ "title": "_Tech Sourcing Type",
893
+ "gd_data_type": "VARCHAR(128)",
894
+ "gd_type": "GDC.text"
895
+ }, {
896
+ "type": "attribute",
897
+ "name": "sourcingtype",
898
+ "title": "Sourcing Type",
899
+ "gd_data_type": "VARCHAR(128)",
900
+ "gd_type": "GDC.text"
901
+ }, {
902
+ "type": "attribute",
903
+ "name": "sourcingtypechannel",
904
+ "title": "Sourcing Type Channel",
905
+ "gd_data_type": "VARCHAR(128)",
906
+ "gd_type": "GDC.text"
907
+ }, {
908
+ "type": "attribute",
909
+ "name": "sourcingtypeteam",
910
+ "title": "Sourcing Type Team",
911
+ "gd_data_type": "VARCHAR(128)",
912
+ "gd_type": "GDC.text"
913
+ }, {
914
+ "type": "label",
915
+ "reference": "sourcingtypeteam",
916
+ "name": "sourcingtypeteamname",
917
+ "title": "Sourcing Type Team Name",
918
+ "gd_data_type": "VARCHAR(128)",
919
+ "gd_type": "GDC.text"
920
+ }]
921
+ }, {
922
+ "type": "dataset",
923
+ "title": "SDR Performance Status",
924
+ "name": "sdrperformancestatus",
925
+ "columns": [{
926
+ "type": "anchor",
927
+ "name": "sdrperformancestatus",
928
+ "title": "SDR Performance Status",
929
+ "gd_data_type": "VARCHAR(128)",
930
+ "gd_type": "GDC.text"
931
+ }]
932
+ }, {
933
+ "type": "dataset",
934
+ "title": "Consolidated Marketing Status",
935
+ "name": "consolidatedmarketingstatus",
936
+ "columns": [{
937
+ "type": "anchor",
938
+ "name": "consolidatedmarketingstatus",
939
+ "title": "_TECH Consolidated Marketing Status (Conctn_Point)",
940
+ "gd_data_type": "VARCHAR(128)",
941
+ "gd_type": "GDC.text"
942
+ }, {
943
+ "type": "label",
944
+ "reference": "consolidatedmarketingstatus",
945
+ "name": "mktgstatussorting",
946
+ "title": "_Mktg Status Sorting",
947
+ "gd_data_type": "INT",
948
+ "gd_type": "GDC.text"
949
+ }, {
950
+ "type": "attribute",
951
+ "name": "detailedmarketingstatuslvl1",
952
+ "title": "Detailed Marketing Status (Lvl1)",
953
+ "gd_data_type": "VARCHAR(128)",
954
+ "gd_type": "GDC.text"
955
+ }, {
956
+ "type": "label",
957
+ "reference": "detailedmarketingstatuslvl1",
958
+ "name": "ordersort1",
959
+ "title": "_Order Sort",
960
+ "gd_data_type": "INT",
961
+ "gd_type": "GDC.text"
962
+ }, {
963
+ "type": "attribute",
964
+ "name": "consolidatedmarketingstatus1",
965
+ "title": "Consolidated Marketing Status",
966
+ "gd_data_type": "VARCHAR(128)",
967
+ "gd_type": "GDC.text"
968
+ }, {
969
+ "type": "label",
970
+ "reference": "consolidatedmarketingstatus1",
971
+ "name": "ordersort2",
972
+ "title": "Order Sort 2",
973
+ "gd_data_type": "INT",
974
+ "gd_type": "GDC.text"
975
+ }, {
976
+ "type": "attribute",
977
+ "name": "consolidatedsqltos2o",
978
+ "title": "Consolidated Status SQL to S2O",
979
+ "gd_data_type": "VARCHAR(128)",
980
+ "gd_type": "GDC.text"
981
+ }, {
982
+ "type": "label",
983
+ "reference": "consolidatedsqltos2o",
984
+ "name": "ordersortsqltos2o",
985
+ "title": "Order Sort SQL to S2O",
986
+ "gd_data_type": "VARCHAR(128)",
987
+ "gd_type": "GDC.text"
988
+ }]
989
+ }, {
990
+ "type": "dataset",
991
+ "title": "activity_owner",
992
+ "name": "activity_owner",
993
+ "columns": [{
994
+ "type": "anchor",
995
+ "name": "id",
996
+ "title": "Act. Owner",
997
+ "gd_data_type": "VARCHAR(128)",
998
+ "gd_type": "GDC.text"
999
+ }, {
1000
+ "type": "label",
1001
+ "reference": "id",
1002
+ "name": "name",
1003
+ "title": "Act. Owner Name",
1004
+ "gd_data_type": "VARCHAR(128)",
1005
+ "gd_type": "GDC.text"
1006
+ }, {
1007
+ "type": "label",
1008
+ "reference": "id",
1009
+ "name": "url",
1010
+ "title": "Act. Owner Url",
1011
+ "gd_data_type": "VARCHAR(128)",
1012
+ "gd_type": "GDC.link"
1013
+ }, {
1014
+ "type": "attribute",
1015
+ "name": "region",
1016
+ "title": "Act. Owner Region",
1017
+ "gd_data_type": "VARCHAR(128)",
1018
+ "gd_type": "GDC.text"
1019
+ }, {
1020
+ "type": "attribute",
1021
+ "name": "department",
1022
+ "title": "Act. Owner Department",
1023
+ "gd_data_type": "VARCHAR(128)",
1024
+ "gd_type": "GDC.text"
1025
+ }, {
1026
+ "type": "attribute",
1027
+ "name": "is_sdr",
1028
+ "title": "is_sdr",
1029
+ "gd_data_type": "VARCHAR(128)",
1030
+ "gd_type": "GDC.text"
1031
+ }]
1032
+ }, {
1033
+ "type": "dataset",
1034
+ "title": "Lead Source",
1035
+ "name": "leadsource",
1036
+ "columns": [{
1037
+ "type": "anchor",
1038
+ "name": "leadsource",
1039
+ "title": "Lead Source",
1040
+ "gd_data_type": "VARCHAR(128)",
1041
+ "gd_type": "GDC.text"
1042
+ }]
1043
+ }, {
1044
+ "type": "dataset",
1045
+ "title": "Win/Loss Reason",
1046
+ "name": "winlossreason",
1047
+ "columns": [{
1048
+ "type": "anchor",
1049
+ "name": "winlossreason",
1050
+ "title": "_Tech Win/Loss Reason",
1051
+ "gd_data_type": "VARCHAR(128)",
1052
+ "gd_type": "GDC.text"
1053
+ }, {
1054
+ "type": "attribute",
1055
+ "name": "winlossreason1",
1056
+ "title": "Win/Loss Reason",
1057
+ "gd_data_type": "VARCHAR(128)",
1058
+ "gd_type": "GDC.text"
1059
+ }, {
1060
+ "type": "attribute",
1061
+ "name": "secondarywinlossreason",
1062
+ "title": "Secondary Win/Loss Reason",
1063
+ "gd_data_type": "VARCHAR(128)",
1064
+ "gd_type": "GDC.text"
1065
+ }]
1066
+ }, {
1067
+ "type": "dataset",
1068
+ "title": "Product Line",
1069
+ "name": "productline",
1070
+ "columns": [{
1071
+ "type": "anchor",
1072
+ "name": "productline",
1073
+ "title": "_Product Line (ID)",
1074
+ "gd_data_type": "VARCHAR(128)",
1075
+ "gd_type": "GDC.text"
1076
+ }, {
1077
+ "type": "attribute",
1078
+ "name": "productline1",
1079
+ "title": "Product Line",
1080
+ "gd_data_type": "VARCHAR(128)",
1081
+ "gd_type": "GDC.text"
1082
+ }, {
1083
+ "type": "attribute",
1084
+ "name": "prod",
1085
+ "title": "Primary PL Solution",
1086
+ "gd_data_type": "VARCHAR(128)",
1087
+ "gd_type": "GDC.text"
1088
+ }, {
1089
+ "type": "attribute",
1090
+ "name": "productorspecificsolution",
1091
+ "title": "Product or Specific Solution",
1092
+ "gd_data_type": "VARCHAR(128)",
1093
+ "gd_type": "GDC.text"
1094
+ }]
1095
+ }, {
1096
+ "type": "dataset",
1097
+ "title": "Lead Channel",
1098
+ "name": "leadchannel",
1099
+ "columns": [{
1100
+ "type": "anchor",
1101
+ "name": "leadchannel",
1102
+ "title": "Lead Channel",
1103
+ "gd_data_type": "VARCHAR(128)",
1104
+ "gd_type": "GDC.text"
1105
+ }]
1106
+ }, {
1107
+ "type": "dataset",
1108
+ "title": "stage",
1109
+ "name": "stage",
1110
+ "columns": [{
1111
+ "type": "anchor",
1112
+ "name": "id",
1113
+ "title": "Stage",
1114
+ "gd_data_type": "VARCHAR(128)",
1115
+ "gd_type": "GDC.text"
1116
+ }, {
1117
+ "type": "label",
1118
+ "reference": "id",
1119
+ "name": "name",
1120
+ "title": "Stage Name",
1121
+ "gd_data_type": "VARCHAR(128)",
1122
+ "gd_type": "GDC.text"
1123
+ }, {
1124
+ "type": "label",
1125
+ "reference": "id",
1126
+ "name": "order",
1127
+ "gd_data_type": "INT",
1128
+ "gd_type": "GDC.text"
1129
+ }, {
1130
+ "type": "attribute",
1131
+ "name": "is_won",
1132
+ "title": "Is Won?",
1133
+ "gd_data_type": "VARCHAR(128)",
1134
+ "gd_type": "GDC.text"
1135
+ }, {
1136
+ "type": "attribute",
1137
+ "name": "status",
1138
+ "gd_data_type": "VARCHAR(128)",
1139
+ "gd_type": "GDC.text"
1140
+ }, {
1141
+ "type": "attribute",
1142
+ "name": "is_active",
1143
+ "title": "Is Active?",
1144
+ "gd_data_type": "VARCHAR(128)",
1145
+ "gd_type": "GDC.text"
1146
+ }, {
1147
+ "type": "attribute",
1148
+ "name": "is_closed",
1149
+ "title": "Is Closed?",
1150
+ "gd_data_type": "VARCHAR(128)",
1151
+ "gd_type": "GDC.text"
1152
+ }, {
1153
+ "type": "attribute",
1154
+ "name": "issao",
1155
+ "title": "Is SAO?",
1156
+ "gd_data_type": "VARCHAR(128)",
1157
+ "gd_type": "GDC.text"
1158
+ }, {
1159
+ "type": "attribute",
1160
+ "name": "amconsolidatedstage",
1161
+ "title": "AM Consolidated Stage",
1162
+ "gd_data_type": "VARCHAR(128)",
1163
+ "gd_type": "GDC.text"
1164
+ }, {
1165
+ "type": "label",
1166
+ "reference": "amconsolidatedstage",
1167
+ "name": "amstageorder",
1168
+ "title": "_AM Stage Order",
1169
+ "gd_data_type": "VARCHAR(128)",
1170
+ "gd_type": "GDC.text"
1171
+ }]
1172
+ }, {
1173
+ "type": "dataset",
1174
+ "title": "opp_owner",
1175
+ "name": "opp_owner",
1176
+ "columns": [{
1177
+ "type": "anchor",
1178
+ "name": "id",
1179
+ "title": "Opp. Owner",
1180
+ "gd_data_type": "VARCHAR(128)",
1181
+ "gd_type": "GDC.text"
1182
+ }, {
1183
+ "type": "label",
1184
+ "reference": "id",
1185
+ "name": "name",
1186
+ "title": "Opp. Owner Name",
1187
+ "gd_data_type": "VARCHAR(128)",
1188
+ "gd_type": "GDC.text"
1189
+ }, {
1190
+ "type": "label",
1191
+ "reference": "id",
1192
+ "name": "oppownerpicture",
1193
+ "title": "Opp. Owner Picture",
1194
+ "gd_data_type": "VARCHAR(128)",
1195
+ "gd_type": "GDC.text"
1196
+ }, {
1197
+ "type": "label",
1198
+ "reference": "id",
1199
+ "name": "url",
1200
+ "title": "Opp. Owner Url",
1201
+ "gd_data_type": "VARCHAR(128)",
1202
+ "gd_type": "GDC.link"
1203
+ }, {
1204
+ "type": "attribute",
1205
+ "name": "region",
1206
+ "title": "Opp. Owner Region",
1207
+ "gd_data_type": "VARCHAR(128)",
1208
+ "gd_type": "GDC.text"
1209
+ }, {
1210
+ "type": "attribute",
1211
+ "name": "department",
1212
+ "title": "Opp. Owner Department",
1213
+ "gd_data_type": "VARCHAR(128)",
1214
+ "gd_type": "GDC.text"
1215
+ }, {
1216
+ "type": "date",
1217
+ "name": "oppownerstart",
1218
+ "dataset": "oppownerstart"
1219
+ }]
1220
+ }, {
1221
+ "type": "dataset",
1222
+ "title": "activity",
1223
+ "name": "activity",
1224
+ "columns": [{
1225
+ "type": "anchor",
1226
+ "name": "id",
1227
+ "title": "Activity",
1228
+ "gd_data_type": "VARCHAR(128)",
1229
+ "gd_type": "GDC.text"
1230
+ }, {
1231
+ "type": "label",
1232
+ "reference": "id",
1233
+ "name": "subject",
1234
+ "title": "Activity Subject",
1235
+ "gd_data_type": "VARCHAR(128)",
1236
+ "gd_type": "GDC.text"
1237
+ }, {
1238
+ "type": "label",
1239
+ "reference": "id",
1240
+ "name": "url",
1241
+ "title": "url",
1242
+ "gd_data_type": "VARCHAR(128)",
1243
+ "gd_type": "GDC.link"
1244
+ }, {
1245
+ "type": "attribute",
1246
+ "name": "status",
1247
+ "title": "Activity Status",
1248
+ "gd_data_type": "VARCHAR(128)",
1249
+ "gd_type": "GDC.text"
1250
+ }, {
1251
+ "type": "attribute",
1252
+ "name": "type",
1253
+ "title": "Activity Type",
1254
+ "gd_data_type": "VARCHAR(128)",
1255
+ "gd_type": "GDC.text"
1256
+ }]
1257
+ }, {
1258
+ "type": "dataset",
1259
+ "title": "opportunity",
1260
+ "name": "opportunity",
1261
+ "columns": [{
1262
+ "type": "anchor",
1263
+ "name": "id",
1264
+ "title": "Opportunity",
1265
+ "gd_data_type": "VARCHAR(128)",
1266
+ "gd_type": "GDC.text"
1267
+ }, {
1268
+ "type": "label",
1269
+ "reference": "id",
1270
+ "name": "name",
1271
+ "title": "Opp. Name",
1272
+ "gd_data_type": "VARCHAR(128)",
1273
+ "gd_type": "GDC.text"
1274
+ }, {
1275
+ "type": "label",
1276
+ "reference": "id",
1277
+ "name": "url",
1278
+ "title": "Opp. Url",
1279
+ "gd_data_type": "VARCHAR(128)",
1280
+ "gd_type": "GDC.link"
1281
+ }]
1282
+ }, {
1283
+ "type": "dataset",
1284
+ "title": "Booking Type",
1285
+ "name": "bookingtype",
1286
+ "columns": [{
1287
+ "type": "anchor",
1288
+ "name": "booking_type_id",
1289
+ "gd_data_type": "VARCHAR(128)",
1290
+ "gd_type": "GDC.text"
1291
+ }, {
1292
+ "type": "label",
1293
+ "reference": "booking_type_id",
1294
+ "name": "booking_type_nm",
1295
+ "gd_data_type": "VARCHAR(128)",
1296
+ "gd_type": "GDC.text"
1297
+ }]
1298
+ }, {
1299
+ "type": "dataset",
1300
+ "title": "forecast",
1301
+ "name": "forecast",
1302
+ "columns": [{
1303
+ "type": "anchor",
1304
+ "name": "id",
1305
+ "title": "Forecast Category",
1306
+ "gd_data_type": "VARCHAR(128)",
1307
+ "gd_type": "GDC.text"
1308
+ }, {
1309
+ "type": "label",
1310
+ "reference": "id",
1311
+ "name": "forecastcategoryordered",
1312
+ "title": "Forecast Category Ordered",
1313
+ "gd_data_type": "VARCHAR(128)",
1314
+ "gd_type": "GDC.text"
1315
+ }]
1316
+ }],
1317
+ "date_dimensions": [{
1318
+ "type": "date_dimension",
1319
+ "name": "activity"
1320
+ }, {
1321
+ "type": "date_dimension",
1322
+ "name": "leadcreate"
1323
+ }, {
1324
+ "type": "date_dimension",
1325
+ "name": "snapshot"
1326
+ }, {
1327
+ "type": "date_dimension",
1328
+ "name": "oppownerstart"
1329
+ }, {
1330
+ "type": "date_dimension",
1331
+ "name": "oppclose"
1332
+ }, {
1333
+ "type": "date_dimension",
1334
+ "name": "oppcreated"
1335
+ }, {
1336
+ "type": "date_dimension",
1337
+ "name": "stage1plus",
1338
+ "title": "SAO"
1339
+ }, {
1340
+ "type": "date_dimension",
1341
+ "name": "firstcontactdate"
1342
+ }, {
1343
+ "type": "date_dimension",
1344
+ "name": "previous_close_date"
1345
+ }, {
1346
+ "type": "date_dimension",
1347
+ "name": "mqldate",
1348
+ "title": "MQL"
1349
+ }, {
1350
+ "type": "date_dimension",
1351
+ "name": "s2o",
1352
+ "title": "S2O"
1353
+ }, {
1354
+ "type": "date_dimension",
1355
+ "name": "firstmeeting"
1356
+ }, {
1357
+ "type": "date_dimension",
1358
+ "name": "effectivecontractstart"
1359
+ }, {
1360
+ "type": "date_dimension",
1361
+ "name": "laststage0plus",
1362
+ "title": "Last Stage0Plus"
1363
+ }, {
1364
+ "type": "date_dimension",
1365
+ "name": "effectivecontractend"
1366
+ }, {
1367
+ "type": "date_dimension",
1368
+ "name": "timeline"
1369
+ }]
1370
+ }