gooddata 0.6.4 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }