twb 0.0.33 → 0.0.34

Sign up to get free protection for your applications and to get access to all the features.
data/lib/twb/workbook.rb CHANGED
@@ -31,7 +31,6 @@ module Twb
31
31
  # The Workbook's file name
32
32
  #
33
33
  def initialize twbWithDir
34
- file = File.new(twbWithDir)
35
34
  @name = File.basename(twbWithDir)
36
35
  @dir = File.dirname(File.expand_path(twbWithDir))
37
36
  @modtime = File.new(twbWithDir).mtime
@@ -156,13 +155,21 @@ module Twb
156
155
  end
157
156
  end
158
157
 
158
+ def ensureWindowsNodeExists
159
+ if @windowsnode.nil?
160
+ @windowsnode = Nokogiri::XML::Node.new "windows", @ndoc
161
+ @dataSources.add_next_sibling(@windowsnode)
162
+ end
163
+ end
164
+
159
165
  # Add a new Documentation Dashboard to the TWB.
160
166
  # Ensure that the TWB has a <dashboards> node (it may not).
161
167
  # Make sure that the new Doc Dashboard's name doesn't conflict with an existing Dashboard - increment the incoming name if necessary.
162
168
  # Add Doc Dashboard's <dashboard> and <window> nodes to the TWB; there's always a <windows> node in the TWB.
163
169
  def addDocDashboard docDashboard
164
170
  ensureDashboardsNodeExists
165
- title = getNewDashboardTitle(docDashboard.title)
171
+ ensureWindowsNodeExists
172
+ title = getNewDashboardTitle(docDashboard.title)
166
173
  docDashboard.title=(title) unless title == docDashboard.title
167
174
  @dashesNode.add_child(docDashboard.dashnode)
168
175
  @windowsnode.add_child(docDashboard.winnode)
@@ -0,0 +1,49 @@
1
+ # testTwbGem.rb - this Ruby script Copyright 2013, 2014 Christopher Gerrard
2
+
3
+ require 'nokogiri'
4
+
5
+ #require 'twb'
6
+ require 'C:\tech\Tableau\tools\Ruby\gems\twb\lib\twb.rb'
7
+ require "test/unit"
8
+
9
+ system "cls"
10
+
11
+ class TestDashboardXRays < Test::Unit::TestCase
12
+
13
+ def test_create
14
+ print "\n\n\n == #{'Web Page Dashboards.twb'}"
15
+ twb = Twb::Workbook.new('Web Page Dashboards.twb')
16
+ puts " name :: #{twb.name}"
17
+ puts " class :: #{twb.class}"
18
+ puts " workbook?:: #{twb.instance_of?(Twb::Workbook)}"
19
+ xrayer = Twb::DashboardXRayer.new(twb)
20
+ assert(!xrayer.nil?)
21
+ puts "xrayer.methods\n=============\n#{xrayer.methods}"
22
+ xrays = xrayer.xray
23
+ assert(!xrays.nil?)
24
+ puts "\n\nDashboards:: #{xrays.keys}"
25
+ xrays.each do |dash, html|
26
+ htmlfilename = twb.name + '.' + dash.to_s
27
+ saveHTML(htmlfilename, html)
28
+ end
29
+ end
30
+
31
+ def saveHTML(htmlfilename, html)
32
+ begin
33
+ puts "\n\n htmlfilename :: #{htmlfilename}"
34
+ htmlfile = File.open(htmlfilename + '.html', 'w')
35
+ htmlfile.puts html
36
+ htmlfile.close
37
+ rescue
38
+ cleanfilename = sanitize(htmlfilename) + '.html'
39
+ puts " :: #{cleanfilename} \n\n"
40
+ saveHTML(cleanfilename, html)
41
+ end
42
+ end
43
+
44
+ def sanitize(str)
45
+ puts " Sanitize :: #{str}"
46
+ cleanStr = str.gsub(/[^a-z0-9\-]+/i, ' ')
47
+ end
48
+
49
+ end
@@ -43,7 +43,6 @@ class TestDocDash < Test::Unit::TestCase
43
43
  end
44
44
 
45
45
  def do_injection(dash, twbName)
46
- print "\ninjecting into: #{twbName}"
47
46
  twb = Twb::Workbook.new(twbName)
48
47
  assert(!twb.nil?)
49
48
  twb.addDocDashboard dash
data/test/testHTMLList.rb CHANGED
@@ -8,6 +8,8 @@ class TestHTMLList < Test::Unit::TestCase
8
8
  def test_create
9
9
  struct = {'a' => {'eh?'=>nil},
10
10
  'b' => ['bee', 'be'],
11
+ 'empty array' => [],
12
+ 'nil value' => [],
11
13
  'c' => {'sea'=>['ocean','mer'],
12
14
  'see'=>['vision','sight','lookers']
13
15
  },
@@ -17,7 +19,7 @@ class TestHTMLList < Test::Unit::TestCase
17
19
  }
18
20
  doc = Twb::HTMLListCollapsible.new(struct)
19
21
  doc.title="Important Stuff to See"
20
- doc.write('Special Documentation.html')
22
+ doc.write('test.html')
21
23
  end
22
24
 
23
25
  end
@@ -6,9 +6,11 @@ require 'nokogiri'
6
6
  require 'C:\tech\Tableau\tools\Ruby\gems\twb\lib\twb.rb'
7
7
 
8
8
  def processTWB twbWithDir
9
- print "\n\n\n== #{twbWithDir}"
9
+ print "\n\n\n == #{twbWithDir}"
10
10
  twb = Twb::Workbook.new twbWithDir
11
- puts " :: #{twb.name}"
11
+ puts " name :: #{twb.name}"
12
+ puts " class :: #{twb.class}"
13
+ puts " workbook?:: #{twb.instance_of?(Twb::Workbook)}"
12
14
  twb.writeAppend '.Documented'
13
15
  twb.writeAppend '....MultiLeadingPeriods'
14
16
  end
data/twb-0.0.33.gem ADDED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.33
4
+ version: 0.0.34
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -34,28 +34,23 @@ files:
34
34
  - lib/twb/util/hashtohtml.rb
35
35
  - lib/twb/util/htmllistcollapsible.rb
36
36
  - lib/twb/util/UpLeftArrowsNav.png
37
+ - lib/twb/util/xraydashboards.rb
37
38
  - lib/twb/window.rb
38
39
  - lib/twb/workbook.rb
39
40
  - lib/twb/worksheet.rb
40
41
  - lib/twb.rb
41
42
  - LICENSE.txt
42
43
  - README.txt
43
- - test/collapsibleList.html
44
- - test/No Content.injected.twb
45
44
  - test/No Content.twb
46
- - test/No Dashboards.injected.twb
47
45
  - test/No Dashboards.twb
48
- - test/Special Documentation.html
49
- - test/TableauDocInlineCSS.html
46
+ - test/testDashboardXRay.rb
50
47
  - test/testDocDashboard.rb
51
48
  - test/testDocDashboardCreate.rb
52
49
  - test/testHTMLList.rb
53
50
  - test/testTwbGem.rb
51
+ - test/testTwbWrite.rb
54
52
  - test/UpLeftArrowsNav.png
55
- - test/Web Page Dashboards.injected.twb
56
53
  - test/Web Page Dashboards.twb
57
- - testTwbGem.rb
58
- - testTwbWrite.rb
59
54
  - twb-0.0.32.gem
60
55
  - twb-0.0.33.gem
61
56
  - twb.gemspec
@@ -1,82 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <workbook xmlns:user="http://www.tableausoftware.com/xml/user" source-platform="win" version="8.3">
3
- <!-- build 8300.15.0219.2230 -->
4
- <preferences>
5
- </preferences>
6
- <datasources>
7
- </datasources><dashboards><dashboard name="Injected Documentation Dashboard">
8
- <style/>
9
- <zones>
10
- <zone h="100000" id="3" param="vert" type="layout-flow" w="100000" x="0" y="0">
11
- <zone h="6221" id="1" type="title" w="100000" x="0" y="0"/>
12
- <zone h="93157" id="4" param="horz" type="layout-flow" w="100000" x="0" y="6221">
13
- <zone forceUpdate="" h="93157" id="6" param="http://localhost:8808/doc_root/nokogiri-1.5.5-x86-mingw32/rdoc/Nokogiri/XML/Node.html#method-i-add_next_sibling" type="web" w="99655" x="0" y="6221"/>
14
- </zone>
15
- </zone>
16
- </zones>
17
- </dashboard></dashboards>
18
- <worksheets>
19
- <worksheet name="Sheet 1">
20
- <table>
21
- <view>
22
- <datasources>
23
- </datasources>
24
- <aggregation value="true"/>
25
- </view>
26
- <style>
27
- </style>
28
- <panes>
29
- <pane>
30
- <view>
31
- <breakdown value="auto"/>
32
- </view>
33
- <mark class="Automatic"/>
34
- </pane>
35
- </panes>
36
- <rows/>
37
- <cols/>
38
- </table>
39
- </worksheet>
40
- </worksheets>
41
- <windows>
42
- <window class="schema" source-height="-1"/>
43
- <window auto-hidden="0" class="worksheet" maximized="1" name="Sheet 1">
44
- <cards>
45
- <edge name="left">
46
- <strip size="160">
47
- <card type="pages"/>
48
- <card type="filters"/>
49
- <card type="marks"/>
50
- </strip>
51
- </edge>
52
- <edge name="top">
53
- <strip size="31">
54
- <card type="columns"/>
55
- </strip>
56
- <strip size="31">
57
- <card type="rows"/>
58
- </strip>
59
- </edge>
60
- </cards>
61
- </window>
62
- <window auto-hidden="0" class="dashboard" maximized="1" name="Injected Documentation Dashboard">
63
- <zones>
64
- <zone h="6221" id="1" name="" type="title" w="100000" x="0" y="0"/>
65
- <zone forceUpdate="" h="93157" id="5" name="" param="http://localhost:8808/doc_root/nokogiri-1.5.5-x86-mingw32/rdoc/Nokogiri/XML/Node.html#method-i-add_next_sibling" type="web" w="50000" x="50000" y="6221"/>
66
- </zones>
67
- </window></windows>
68
- <thumbnails>
69
- <thumbnail height="144" name="Sheet 1" width="174">
70
- iVBORw0KGgoAAAANSUhEUgAAAK4AAACQCAYAAACRfFAzAAAACXBIWXMAAA7DAAAOwwHHb6hk
71
- AAABmUlEQVR4nO3SQQ0AIBDAMMC/58MDH7KkVbDH9szMgpjzOwBeGJck45JkXJKMS5JxSTIu
72
- ScYlybgkGZck45JkXJKMS5JxSTIuScYlybgkGZck45JkXJKMS5JxSTIuScYlybgkGZck45Jk
73
- XJKMS5JxSTIuScYlybgkGZck45JkXJKMS5JxSTIuScYlybgkGZck45JkXJKMS5JxSTIuScYl
74
- ybgkGZck45JkXJKMS5JxSTIuScYlybgkGZck45JkXJKMS5JxSTIuScYlybgkGZck45JkXJKM
75
- S5JxSTIuScYlybgkGZck45JkXJKMS5JxSTIuScYlybgkGZck45JkXJKMS5JxSTIuScYlybgk
76
- GZck45JkXJKMS5JxSTIuScYlybgkGZck45JkXJKMS5JxSTIuScYlybgkGZck45JkXJKMS5Jx
77
- STIuScYlybgkGZck45JkXJKMS5JxSTIuScYlybgkGZck45JkXJKMS5JxSTIuScYlybgkGZck
78
- 45JkXJKMS5JxSTIuScYlybgkGZck45JkXJKMS5JxSTIuSRePYgUc7kJNEQAAAABJRU5ErkJg
79
- gg==
80
- </thumbnail>
81
- </thumbnails>
82
- </workbook>
@@ -1,618 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <workbook xmlns:user="http://www.tableausoftware.com/xml/user" source-platform="win" version="8.3">
3
- <!-- build 8300.15.0219.2230 -->
4
- <preferences>
5
- </preferences>
6
- <datasources>
7
- <datasource inline="true" name="Sample - Coffee Chain (Access)" version="8.3">
8
- <connection authentication="no" class="msaccess" driver="" filename="C:\Users\CTG\Documents\My Tableau Repository\Datasources\Sample - Coffee Chain.mdb" mdwpath="" tablename="factTable">
9
- <relation join="inner" type="join">
10
- <clause type="join">
11
- <expression op="=">
12
- <expression op="[factTable].[ProductId]">
13
- </expression>
14
- <expression op="[Product].[ProductId]">
15
- </expression>
16
- </expression>
17
- </clause>
18
- <relation join="inner" type="join">
19
- <clause type="join">
20
- <expression op="=">
21
- <expression op="[factTable].[Area Code]">
22
- </expression>
23
- <expression op="[Location].[Area Code]">
24
- </expression>
25
- </expression>
26
- </clause>
27
- <relation name="factTable" table="[factTable]" type="table"/>
28
- <relation name="Location" table="[Location]" type="table"/>
29
- </relation>
30
- <relation name="Product" table="[Product]" type="table"/>
31
- </relation>
32
- <cols>
33
- <map key="[Area Code]" value="[factTable].[Area Code]"/>
34
- <map key="[Budget COGS]" value="[factTable].[Budget COGS]"/>
35
- <map key="[Budget Margin]" value="[factTable].[Budget Margin]"/>
36
- <map key="[Budget Profit]" value="[factTable].[Budget Profit]"/>
37
- <map key="[Budget Sales]" value="[factTable].[Budget Sales]"/>
38
- <map key="[COGS]" value="[factTable].[COGS]"/>
39
- <map key="[Date]" value="[factTable].[Date]"/>
40
- <map key="[Inventory]" value="[factTable].[Inventory]"/>
41
- <map key="[Location_Area Code]" value="[Location].[Area Code]"/>
42
- <map key="[Margin]" value="[factTable].[Margin]"/>
43
- <map key="[Market Size]" value="[Location].[Market Size]"/>
44
- <map key="[Market]" value="[Location].[Market]"/>
45
- <map key="[Marketing]" value="[factTable].[Marketing]"/>
46
- <map key="[Product Line]" value="[Product].[Product Line]"/>
47
- <map key="[Product Type]" value="[Product].[Product Type]"/>
48
- <map key="[ProductId]" value="[factTable].[ProductId]"/>
49
- <map key="[Product]" value="[Product].[Product]"/>
50
- <map key="[Product_ProductId]" value="[Product].[ProductId]"/>
51
- <map key="[Profit]" value="[factTable].[Profit]"/>
52
- <map key="[Sales]" value="[factTable].[Sales]"/>
53
- <map key="[State]" value="[Location].[State]"/>
54
- <map key="[Total Expenses]" value="[factTable].[Total Expenses]"/>
55
- <map key="[Type]" value="[Product].[Type]"/>
56
- </cols>
57
- <metadata-records>
58
- <metadata-record class="column">
59
- <remote-name>Area Code</remote-name>
60
- <remote-type>2</remote-type>
61
- <local-name>[Area Code]</local-name>
62
- <parent-name>[factTable]</parent-name>
63
- <remote-alias>Area Code</remote-alias>
64
- <ordinal>12</ordinal>
65
- <local-type>integer</local-type>
66
- <aggregation>Sum</aggregation>
67
- <precision>5</precision>
68
- <contains-null>true</contains-null>
69
- <attributes>
70
- <attribute datatype="string" name="DebugRemoteType">"I2"</attribute>
71
- </attributes>
72
- </metadata-record>
73
- <metadata-record class="column">
74
- <remote-name>Budget COGS</remote-name>
75
- <remote-type>5</remote-type>
76
- <local-name>[Budget COGS]</local-name>
77
- <parent-name>[factTable]</parent-name>
78
- <remote-alias>Budget COGS</remote-alias>
79
- <ordinal>9</ordinal>
80
- <local-type>real</local-type>
81
- <aggregation>Sum</aggregation>
82
- <precision>15</precision>
83
- <contains-null>true</contains-null>
84
- <attributes>
85
- <attribute datatype="string" name="DebugRemoteType">"R8"</attribute>
86
- </attributes>
87
- </metadata-record>
88
- <metadata-record class="column">
89
- <remote-name>Budget Margin</remote-name>
90
- <remote-type>5</remote-type>
91
- <local-name>[Budget Margin]</local-name>
92
- <parent-name>[factTable]</parent-name>
93
- <remote-alias>Budget Margin</remote-alias>
94
- <ordinal>10</ordinal>
95
- <local-type>real</local-type>
96
- <aggregation>Sum</aggregation>
97
- <precision>15</precision>
98
- <contains-null>true</contains-null>
99
- <attributes>
100
- <attribute datatype="string" name="DebugRemoteType">"R8"</attribute>
101
- </attributes>
102
- </metadata-record>
103
- <metadata-record class="column">
104
- <remote-name>Budget Profit</remote-name>
105
- <remote-type>5</remote-type>
106
- <local-name>[Budget Profit]</local-name>
107
- <parent-name>[factTable]</parent-name>
108
- <remote-alias>Budget Profit</remote-alias>
109
- <ordinal>8</ordinal>
110
- <local-type>real</local-type>
111
- <aggregation>Sum</aggregation>
112
- <precision>15</precision>
113
- <contains-null>true</contains-null>
114
- <attributes>
115
- <attribute datatype="string" name="DebugRemoteType">"R8"</attribute>
116
- </attributes>
117
- </metadata-record>
118
- <metadata-record class="column">
119
- <remote-name>Budget Sales</remote-name>
120
- <remote-type>5</remote-type>
121
- <local-name>[Budget Sales]</local-name>
122
- <parent-name>[factTable]</parent-name>
123
- <remote-alias>Budget Sales</remote-alias>
124
- <ordinal>11</ordinal>
125
- <local-type>real</local-type>
126
- <aggregation>Sum</aggregation>
127
- <precision>15</precision>
128
- <contains-null>true</contains-null>
129
- <attributes>
130
- <attribute datatype="string" name="DebugRemoteType">"R8"</attribute>
131
- </attributes>
132
- </metadata-record>
133
- <metadata-record class="column">
134
- <remote-name>COGS</remote-name>
135
- <remote-type>5</remote-type>
136
- <local-name>[COGS]</local-name>
137
- <parent-name>[factTable]</parent-name>
138
- <remote-alias>COGS</remote-alias>
139
- <ordinal>4</ordinal>
140
- <local-type>real</local-type>
141
- <aggregation>Sum</aggregation>
142
- <precision>15</precision>
143
- <contains-null>true</contains-null>
144
- <attributes>
145
- <attribute datatype="string" name="DebugRemoteType">"R8"</attribute>
146
- </attributes>
147
- </metadata-record>
148
- <metadata-record class="column">
149
- <remote-name>Date</remote-name>
150
- <remote-type>7</remote-type>
151
- <local-name>[Date]</local-name>
152
- <parent-name>[factTable]</parent-name>
153
- <remote-alias>Date</remote-alias>
154
- <ordinal>14</ordinal>
155
- <local-type>datetime</local-type>
156
- <aggregation>Year</aggregation>
157
- <contains-null>true</contains-null>
158
- <attributes>
159
- <attribute datatype="string" name="DebugRemoteType">"DATE"</attribute>
160
- </attributes>
161
- </metadata-record>
162
- <metadata-record class="column">
163
- <remote-name>Inventory</remote-name>
164
- <remote-type>3</remote-type>
165
- <local-name>[Inventory]</local-name>
166
- <parent-name>[factTable]</parent-name>
167
- <remote-alias>Inventory</remote-alias>
168
- <ordinal>7</ordinal>
169
- <local-type>integer</local-type>
170
- <aggregation>Sum</aggregation>
171
- <precision>10</precision>
172
- <contains-null>true</contains-null>
173
- <attributes>
174
- <attribute datatype="string" name="DebugRemoteType">"I4"</attribute>
175
- </attributes>
176
- </metadata-record>
177
- <metadata-record class="column">
178
- <remote-name>Margin</remote-name>
179
- <remote-type>5</remote-type>
180
- <local-name>[Margin]</local-name>
181
- <parent-name>[factTable]</parent-name>
182
- <remote-alias>Margin</remote-alias>
183
- <ordinal>2</ordinal>
184
- <local-type>real</local-type>
185
- <aggregation>Sum</aggregation>
186
- <precision>15</precision>
187
- <contains-null>true</contains-null>
188
- <attributes>
189
- <attribute datatype="string" name="DebugRemoteType">"R8"</attribute>
190
- </attributes>
191
- </metadata-record>
192
- <metadata-record class="column">
193
- <remote-name>Marketing</remote-name>
194
- <remote-type>5</remote-type>
195
- <local-name>[Marketing]</local-name>
196
- <parent-name>[factTable]</parent-name>
197
- <remote-alias>Marketing</remote-alias>
198
- <ordinal>6</ordinal>
199
- <local-type>real</local-type>
200
- <aggregation>Sum</aggregation>
201
- <precision>15</precision>
202
- <contains-null>true</contains-null>
203
- <attributes>
204
- <attribute datatype="string" name="DebugRemoteType">"R8"</attribute>
205
- </attributes>
206
- </metadata-record>
207
- <metadata-record class="column">
208
- <remote-name>ProductId</remote-name>
209
- <remote-type>2</remote-type>
210
- <local-name>[ProductId]</local-name>
211
- <parent-name>[factTable]</parent-name>
212
- <remote-alias>ProductId</remote-alias>
213
- <ordinal>13</ordinal>
214
- <local-type>integer</local-type>
215
- <aggregation>Sum</aggregation>
216
- <precision>5</precision>
217
- <contains-null>true</contains-null>
218
- <attributes>
219
- <attribute datatype="string" name="DebugRemoteType">"I2"</attribute>
220
- </attributes>
221
- </metadata-record>
222
- <metadata-record class="column">
223
- <remote-name>Profit</remote-name>
224
- <remote-type>5</remote-type>
225
- <local-name>[Profit]</local-name>
226
- <parent-name>[factTable]</parent-name>
227
- <remote-alias>Profit</remote-alias>
228
- <ordinal>1</ordinal>
229
- <local-type>real</local-type>
230
- <aggregation>Sum</aggregation>
231
- <precision>15</precision>
232
- <contains-null>true</contains-null>
233
- <attributes>
234
- <attribute datatype="string" name="DebugRemoteType">"R8"</attribute>
235
- </attributes>
236
- </metadata-record>
237
- <metadata-record class="column">
238
- <remote-name>Sales</remote-name>
239
- <remote-type>5</remote-type>
240
- <local-name>[Sales]</local-name>
241
- <parent-name>[factTable]</parent-name>
242
- <remote-alias>Sales</remote-alias>
243
- <ordinal>3</ordinal>
244
- <local-type>real</local-type>
245
- <aggregation>Sum</aggregation>
246
- <precision>15</precision>
247
- <contains-null>true</contains-null>
248
- <attributes>
249
- <attribute datatype="string" name="DebugRemoteType">"R8"</attribute>
250
- </attributes>
251
- </metadata-record>
252
- <metadata-record class="column">
253
- <remote-name>Total Expenses</remote-name>
254
- <remote-type>5</remote-type>
255
- <local-name>[Total Expenses]</local-name>
256
- <parent-name>[factTable]</parent-name>
257
- <remote-alias>Total Expenses</remote-alias>
258
- <ordinal>5</ordinal>
259
- <local-type>real</local-type>
260
- <aggregation>Sum</aggregation>
261
- <precision>15</precision>
262
- <contains-null>true</contains-null>
263
- <attributes>
264
- <attribute datatype="string" name="DebugRemoteType">"R8"</attribute>
265
- </attributes>
266
- </metadata-record>
267
- <metadata-record class="column">
268
- <remote-name>Area Code</remote-name>
269
- <remote-type>2</remote-type>
270
- <local-name>[Location_Area Code]</local-name>
271
- <parent-name>[Location]</parent-name>
272
- <remote-alias>Area Code</remote-alias>
273
- <ordinal>17</ordinal>
274
- <local-type>integer</local-type>
275
- <aggregation>Sum</aggregation>
276
- <precision>5</precision>
277
- <contains-null>true</contains-null>
278
- <attributes>
279
- <attribute datatype="string" name="DebugRemoteType">"I2"</attribute>
280
- </attributes>
281
- </metadata-record>
282
- <metadata-record class="column">
283
- <remote-name>Market</remote-name>
284
- <remote-type>130</remote-type>
285
- <local-name>[Market]</local-name>
286
- <parent-name>[Location]</parent-name>
287
- <remote-alias>Market</remote-alias>
288
- <ordinal>19</ordinal>
289
- <local-type>string</local-type>
290
- <aggregation>Count</aggregation>
291
- <width>255</width>
292
- <contains-null>true</contains-null>
293
- <attributes>
294
- <attribute datatype="string" name="DebugRemoteType">"WSTR"</attribute>
295
- </attributes>
296
- </metadata-record>
297
- <metadata-record class="column">
298
- <remote-name>Market Size</remote-name>
299
- <remote-type>130</remote-type>
300
- <local-name>[Market Size]</local-name>
301
- <parent-name>[Location]</parent-name>
302
- <remote-alias>Market Size</remote-alias>
303
- <ordinal>20</ordinal>
304
- <local-type>string</local-type>
305
- <aggregation>Count</aggregation>
306
- <width>255</width>
307
- <contains-null>true</contains-null>
308
- <attributes>
309
- <attribute datatype="string" name="DebugRemoteType">"WSTR"</attribute>
310
- </attributes>
311
- </metadata-record>
312
- <metadata-record class="column">
313
- <remote-name>State</remote-name>
314
- <remote-type>130</remote-type>
315
- <local-name>[State]</local-name>
316
- <parent-name>[Location]</parent-name>
317
- <remote-alias>State</remote-alias>
318
- <ordinal>18</ordinal>
319
- <local-type>string</local-type>
320
- <aggregation>Count</aggregation>
321
- <width>255</width>
322
- <contains-null>true</contains-null>
323
- <attributes>
324
- <attribute datatype="string" name="DebugRemoteType">"WSTR"</attribute>
325
- </attributes>
326
- </metadata-record>
327
- <metadata-record class="column">
328
- <remote-name>Product</remote-name>
329
- <remote-type>130</remote-type>
330
- <local-name>[Product]</local-name>
331
- <parent-name>[Product]</parent-name>
332
- <remote-alias>Product</remote-alias>
333
- <ordinal>23</ordinal>
334
- <local-type>string</local-type>
335
- <aggregation>Count</aggregation>
336
- <width>255</width>
337
- <contains-null>true</contains-null>
338
- <attributes>
339
- <attribute datatype="string" name="DebugRemoteType">"WSTR"</attribute>
340
- </attributes>
341
- </metadata-record>
342
- <metadata-record class="column">
343
- <remote-name>Product Line</remote-name>
344
- <remote-type>130</remote-type>
345
- <local-name>[Product Line]</local-name>
346
- <parent-name>[Product]</parent-name>
347
- <remote-alias>Product Line</remote-alias>
348
- <ordinal>21</ordinal>
349
- <local-type>string</local-type>
350
- <aggregation>Count</aggregation>
351
- <width>255</width>
352
- <contains-null>true</contains-null>
353
- <attributes>
354
- <attribute datatype="string" name="DebugRemoteType">"WSTR"</attribute>
355
- </attributes>
356
- </metadata-record>
357
- <metadata-record class="column">
358
- <remote-name>Product Type</remote-name>
359
- <remote-type>130</remote-type>
360
- <local-name>[Product Type]</local-name>
361
- <parent-name>[Product]</parent-name>
362
- <remote-alias>Product Type</remote-alias>
363
- <ordinal>22</ordinal>
364
- <local-type>string</local-type>
365
- <aggregation>Count</aggregation>
366
- <width>255</width>
367
- <contains-null>true</contains-null>
368
- <attributes>
369
- <attribute datatype="string" name="DebugRemoteType">"WSTR"</attribute>
370
- </attributes>
371
- </metadata-record>
372
- <metadata-record class="column">
373
- <remote-name>ProductId</remote-name>
374
- <remote-type>2</remote-type>
375
- <local-name>[Product_ProductId]</local-name>
376
- <parent-name>[Product]</parent-name>
377
- <remote-alias>ProductId</remote-alias>
378
- <ordinal>24</ordinal>
379
- <local-type>integer</local-type>
380
- <aggregation>Sum</aggregation>
381
- <precision>5</precision>
382
- <contains-null>true</contains-null>
383
- <attributes>
384
- <attribute datatype="string" name="DebugRemoteType">"I2"</attribute>
385
- </attributes>
386
- </metadata-record>
387
- <metadata-record class="column">
388
- <remote-name>Type</remote-name>
389
- <remote-type>130</remote-type>
390
- <local-name>[Type]</local-name>
391
- <parent-name>[Product]</parent-name>
392
- <remote-alias>Type</remote-alias>
393
- <ordinal>25</ordinal>
394
- <local-type>string</local-type>
395
- <aggregation>Count</aggregation>
396
- <width>255</width>
397
- <contains-null>true</contains-null>
398
- <attributes>
399
- <attribute datatype="string" name="DebugRemoteType">"WSTR"</attribute>
400
- </attributes>
401
- </metadata-record>
402
- </metadata-records>
403
- </connection>
404
- <column aggregation="Sum" datatype="integer" name="[Area Code]" role="dimension" semantic-role="[AreaCode].[Name]" type="ordinal">
405
- </column>
406
- <column datatype="real" default-format="c&quot;$&quot;#,##0;(&quot;$&quot;#,##0)" name="[Budget COGS]" role="measure" type="quantitative">
407
- </column>
408
- <column datatype="real" default-format="c&quot;$&quot;#,##0;(&quot;$&quot;#,##0)" name="[Budget Margin]" role="measure" type="quantitative">
409
- </column>
410
- <column datatype="real" default-format="c&quot;$&quot;#,##0;(&quot;$&quot;#,##0)" name="[Budget Profit]" role="measure" type="quantitative">
411
- </column>
412
- <column datatype="real" default-format="c&quot;$&quot;#,##0;(&quot;$&quot;#,##0)" name="[Budget Sales]" role="measure" type="quantitative">
413
- </column>
414
- <column datatype="real" default-format="c&quot;$&quot;#,##0;(&quot;$&quot;#,##0)" name="[COGS]" role="measure" type="quantitative">
415
- </column>
416
- <column datatype="date" datatype-customized="true" name="[Date]" role="dimension" type="ordinal">
417
- </column>
418
- <column aggregation="Avg" datatype="integer" default-format="n#,##0;-#,##0" name="[Inventory]" role="measure" type="quantitative">
419
- </column>
420
- <column aggregation="Sum" datatype="integer" default-format="*000" hidden="true" name="[Location_Area Code]" role="dimension" semantic-role="[AreaCode].[Name]" type="ordinal">
421
- </column>
422
- <column datatype="real" default-format="c&quot;$&quot;#,##0;(&quot;$&quot;#,##0)" name="[Margin]" role="measure" type="quantitative">
423
- </column>
424
- <column datatype="real" default-format="c&quot;$&quot;#,##0;(&quot;$&quot;#,##0)" name="[Marketing]" role="measure" type="quantitative">
425
- </column>
426
- <column datatype="integer" name="[Number of Records]" role="measure" type="quantitative" user:auto-column="numrec">
427
- <calculation class="tableau" formula="1"/>
428
- </column>
429
- <column datatype="integer" hidden="true" name="[ProductId]" role="measure" type="quantitative">
430
- </column>
431
- <column datatype="integer" hidden="true" name="[Product_ProductId]" role="measure" type="quantitative">
432
- </column>
433
- <column datatype="real" default-format="c&quot;$&quot;#,##0;(&quot;$&quot;#,##0)" name="[Profit]" role="measure" type="quantitative">
434
- </column>
435
- <column datatype="real" default-format="c&quot;$&quot;#,##0;(&quot;$&quot;#,##0)" name="[Sales]" role="measure" type="quantitative">
436
- </column>
437
- <column datatype="string" name="[State]" role="dimension" semantic-role="[State].[Name]" type="nominal">
438
- </column>
439
- <column datatype="real" default-format="c&quot;$&quot;#,##0;(&quot;$&quot;#,##0)" name="[Total Expenses]" role="measure" type="quantitative">
440
- </column>
441
- <folder name="Actuals" role="measures">
442
- <folder-item name="[COGS]" type="field"/>
443
- <folder-item name="[Inventory]" type="field"/>
444
- <folder-item name="[Margin]" type="field"/>
445
- <folder-item name="[Marketing]" type="field"/>
446
- <folder-item name="[Profit]" type="field"/>
447
- <folder-item name="[Sales]" type="field"/>
448
- <folder-item name="[Total Expenses]" type="field"/>
449
- </folder>
450
- <folder name="Budget" role="measures">
451
- <folder-item name="[Budget COGS]" type="field"/>
452
- <folder-item name="[Budget Margin]" type="field"/>
453
- <folder-item name="[Budget Profit]" type="field"/>
454
- <folder-item name="[Budget Sales]" type="field"/>
455
- </folder>
456
- <layout dim-ordering="alphabetic" dim-percentage="0.5" measure-ordering="alphabetic" measure-percentage="0.4" show-structure="false"/>
457
- <semantic-values>
458
- <semantic-value key="[Country].[Name]" value="&quot;UNITED STATES&quot;"/>
459
- </semantic-values>
460
- </datasource>
461
- </datasources><dashboards><dashboard name="Collapsible List of Workook Contents">
462
- <style/>
463
- <zones>
464
- <zone h="100000" id="3" param="vert" type="layout-flow" w="100000" x="0" y="0">
465
- <zone h="6221" id="1" type="title" w="100000" x="0" y="0"/>
466
- <zone h="93157" id="4" param="horz" type="layout-flow" w="100000" x="0" y="6221">
467
- <zone forceUpdate="" h="93157" id="6" param="file:///C:/tech/misc/expandable_tree_view/TableauDocInlineCSS.html" type="web" w="99655" x="0" y="6221"/>
468
- </zone>
469
- </zone>
470
- </zones>
471
- </dashboard></dashboards>
472
- <worksheets>
473
- <worksheet name="Sheet 1">
474
- <table>
475
- <view>
476
- <datasources>
477
- <datasource name="Sample - Coffee Chain (Access)"/>
478
- </datasources>
479
- <datasource-dependencies datasource="Sample - Coffee Chain (Access)">
480
- <column datatype="real" default-format="c&quot;$&quot;#,##0;(&quot;$&quot;#,##0)" name="[Profit]" role="measure" type="quantitative">
481
- </column>
482
- <column datatype="real" default-format="c&quot;$&quot;#,##0;(&quot;$&quot;#,##0)" name="[Sales]" role="measure" type="quantitative">
483
- </column>
484
- <column-instance column="[Profit]" derivation="Sum" name="[sum:Profit:qk]" pivot="key" type="quantitative"/>
485
- <column-instance column="[Sales]" derivation="Sum" name="[sum:Sales:qk]" pivot="key" type="quantitative"/>
486
- </datasource-dependencies>
487
- <aggregation value="true"/>
488
- </view>
489
- <style>
490
- </style>
491
- <panes>
492
- <pane>
493
- <view>
494
- <breakdown value="auto"/>
495
- </view>
496
- <mark class="Automatic"/>
497
- </pane>
498
- </panes>
499
- <rows>[Sample - Coffee Chain (Access)].[sum:Sales:qk]</rows>
500
- <cols>[Sample - Coffee Chain (Access)].[sum:Profit:qk]</cols>
501
- </table>
502
- </worksheet>
503
- </worksheets>
504
- <windows>
505
- <window class="schema" source-height="-1"/>
506
- <window auto-hidden="0" class="worksheet" maximized="1" name="Sheet 1">
507
- <cards>
508
- <edge name="left">
509
- <strip size="160">
510
- <card type="pages"/>
511
- <card type="filters"/>
512
- <card type="marks"/>
513
- </strip>
514
- </edge>
515
- <edge name="top">
516
- <strip size="31">
517
- <card type="columns"/>
518
- </strip>
519
- <strip size="31">
520
- <card type="rows"/>
521
- </strip>
522
- </edge>
523
- </cards>
524
- </window>
525
- <window auto-hidden="0" class="dashboard" maximized="1" name="Collapsible List of Workook Contents">
526
- <zones>
527
- <zone h="6221" id="1" name="" type="title" w="100000" x="0" y="0"/>
528
- <zone forceUpdate="" h="93157" id="5" name="" param="file:///C:/tech/misc/expandable_tree_view/TableauDocInlineCSS.html" type="web" w="50000" x="50000" y="6221"/>
529
- </zones>
530
- </window></windows>
531
- <thumbnails>
532
- <thumbnail height="192" name="Sheet 1" width="192">
533
- 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
- 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
- /kfS6Uyftk7cxPY4TpOJa1uSRVuSJd4kSBAEQBL3tTh3tw9iuU2lOAFpEop/39cTznA08/nt
536
- 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
- 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
- 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
- +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
- qsHeGhdnIrz21vv88FsXeeed9/jq16+wthon8vw5HMdB0zR6PYog+ermP87usgAOcxcu89H9
541
- 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
- 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
- /izrK2vMXbpKqM9No9FA0zS8Xu9xHd+f1Gq1evo4tuT3Nr/T6aDrevcF+CJIASS/1/mPCyB3
544
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- RYZPBUil8kRnRolvJbjxze+hZ2MsLG8wMTFDMrnNdPQMuzsxpudf4Nxk5DiOQ4hD6boAjmWB
553
- Aasr64QiI+wVGtw4M8AvHmX5yc0p7idLaLksr9y8yE9fu8s//91LvPbmAn/9g5fZXE4zFvZ8
554
- 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
- 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
- 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
- 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
- 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
- q9txbO8ptEYOT3CERi3LUPQ6Ny9PHcdxCHEoXRfg/PlzfLAYIzByATO+xR4BvnEtyusPa/zj
560
- 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
- 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
- 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
- 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
- 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
- YXho1cuk03t0untMSIi/OE+cAdLbO4zOzlLRswS9vdvCRoiT8EQBdlMp2jiMDQQ5KNeJDgV6
566
- sS4hTsQTBTh/bpa9KoQ8NpFQfy/WJMSJeaIAoeEJQsO9WIoQJ6/reYB333qdghbke6+8yM/+
567
- 89dcnI6QSuUIjI5SzySZ/+aP0FIPWNmK4/hOQSOLNzhKo5phaOY6L12SmWDx7Oh6Iiy1vsjt
568
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- h/nLV7lzbwF7NopreJZTToqg30tzr004GCDbsdBsh4GBAM1mm4FggHarjX8gQL5gUq1WP9so
581
- +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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- bBRDO9IKWLp/l71Sk3wyxl6piZlNsJEs4JgZVrb2GRsfIbu7yf3FLXzuDvfuL+HxaNy7/4ih
598
- 0Qk8R1qAQ2JzicXYAY6ZYTWewWVVeLC6Q7/e5N6jDYZHR3v3h7BqIUPyoEA2FWNwNMrOdvwL
599
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
616
- </thumbnail>
617
- </thumbnails>
618
- </workbook>