class Object
Public Instance Methods
checkFile(fileName)
click to toggle source
# File lib/t.rb, line 1 def checkFile fileName qfn = "./#{fileName}" exists = File.exists? qnf require_relative 'twb/tabclass' require_relative 'twb/tabtool' require_relative 'twb/dashboard' require_relative 'twb/datasource' require_relative 'twb/connection' require_relative 'twb/docdashboard' require_relative 'twb/dbfield' require_relative 'twb/localfield' require_relative 'twb/metadatafield' require_relative 'twb/storyboard' require_relative 'twb/window' require_relative 'twb/workbook' require_relative 'twb/worksheet' require_relative 'twb/parameter' require_relative 'twb/action' require_relative 'twb/columnfield.rb' require_relative 'twb/calculatedfield' require_relative 'twb/codedfield' require_relative 'twb/groupfield' require_relative 'twb/fieldcalculation' require_relative 'twb/quickfilter' require_relative 'twb/docdashboardimagevert' require_relative 'twb/docdashboardwebvert' require_relative 'twb/util/twbDashSheetDataDotBuilder' require_relative 'twb/util/dotFileRenderer' require_relative 'twb/util/htmllistcollapsible' require_relative 'twb/util/xraydashboards' require_relative 'twb/util/graph' require_relative 'twb/util/graphnode' require_relative 'twb/util/graphedge' require_relative 'twb/util/graphedges' require_relative 'twb/util/gml' require_relative 'twb/util/cypher' require_relative 'twb/util/cypherpython' require_relative 'twb/util/fielddomainloader' require_relative 'twb/util/docprep' require_relative 'twb/analysis/documentedfieldsmarkdownemitter' require_relative 'twb/analysis/annotatedfieldscsvemitter' require_relative 'twb/analysis/WorkbookSummaryAnalyzer' require_relative 'twb/analysis/calculatedfields/calculatedfieldsanalyzer' require_relative 'twb/analysis/calculatedfields/groupfieldsanalyzer' require_relative 'twb/analysis/calculatedfields/markdownemitter' require_relative 'twb/analysis/calculatedfields/csvemitter' require_relative 'twb/analysis/datasources/DataSourceFieldsCSVEmitter' require_relative 'twb/analysis/datasources/DataSourceTableFieldsCSVEmitter' require_relative 'twb/analysis/datasources/categoricalColorCodingAnalyzer' require_relative 'twb/analysis/datasources/googlesheetdatasourcesanalyzer' require_relative 'twb/analysis/datasources/parametersanalyzer' require_relative 'twb/analysis/datasources/DataSourceOriginsAnalyzer' require_relative 'twb/analysis/Sheets/WorksheetDataStructureCSVEmitter' require_relative 'twb/analysis/Sheets/sheetfiltersanalyzer' require_relative 'twb/analysis/Sheets/sheetfieldsanalyzer' require_relative 'twb/analysis/Sheets/dashsheetsanalyzer' # Represents Tableau Workbooks, their contents, and classes that analyze and manipulate them. # module Twb VERSION = '4.5.1'
emit(stuff)
click to toggle source
# File lib/twb/countNodes.rb, line 36 def emit stuff $pFile.puts stuff puts stuff if $localEmit end
init()
click to toggle source
# File lib/twb/countNodes.rb, line 5 def init system 'cls' $pFile = File.open('sqlFromTwbDc.txt','w') sqiCSV = 'TWBFieldsByType.csv' $fieldsCSV = CSV.open(sqiCSV, 'w') $fieldsCSV << [ 'TWB', 'Data Connection - UI', 'Field Name', 'Field Type', ] $path = if ARGV.empty? then '**/*.twb' else ARGV[0] end emit " " emit " Generating SQL Create Table code for Tableau Workbook Data Connections (TWDCs)." emit " Each TWDC will have it's own *.sql file containing the SQL code.\n " emit " Looking for Workbooks matching: '#{$path}' - from: #{ARGV[0]}\n\n " end
localColumns(dataSource)
click to toggle source
# File lib/twb/findDSFields.rb, line 80 def localColumns dataSource emit "\t localColumns " #connClass: '%s'" % [connClass] colNodes = dataSource.xpath('./column') emit " colNodes.size: #{colNodes.size}" fields = {} colNodes.each do |node| calcField = !node.at_xpath('./calculation').nil? caption = node.attribute('caption') name = node.attribute('name').text.gsub(/^\[/,'').gsub(/\]$/,'') type = node.attribute('datatype') emit " \t name: %s\n \t type: %s\n \t caption: %s" % [name, type, caption] caption = name if caption.nil? emit " \t caption: %s \n " % [caption] fields[caption] = {'type' => type, 'calcField' => calcField} end return fields end
metaDataRecords(dataSource)
click to toggle source
# File lib/twb/findDSFields.rb, line 67 def metaDataRecords dataSource emit "\t metaDataRecords " #connClass: '%s'" % [connClass] mdNodes = dataSource.xpath('./connection/metadata-records/metadata-record[@class="column"]') emit " mdNodes.size: #{mdNodes.size}" fields = {} mdNodes.each do |node| name = node.xpath('./local-name').text.gsub(/^\[/,'').gsub(/\]$/,'') type = node.xpath('./local-type').text fields[name] = {'type' => type} end return fields end
method_name()
click to toggle source
# File lib/twb/countNodes.rb, line 24 def method_name datasources = {} dataSourcesNode = doc.at_xpath('//workbook/datasources') dataSourcesNodes = doc.xpath('//workbook/datasources/datasource').to_a puts " dsn: #{dataSourcesNodes}" datasourceNodes.each do |node| datasource = Twb::DataSource.new(node) datasources[datasource.name] = datasource end end
proc(file)
click to toggle source
# File lib/twb/countNodes.rb, line 47 def proc file emit "\n == #{file}" end
process(file)
click to toggle source
# File lib/twb/countNodes.rb, line 51 def process file emit "\n == #{file}" doc = Nokogiri::XML(open(file)) dataSourcesNodes = doc.xpath('//workbook/datasources/datasource') dataSourcesNodes.each do |ds| emit "\n dc: #{ds.attribute('caption')}" emit " dn: #{ds.attribute('name')}\n ---" typeCounts = {} $paths.each do |type, path| nodes = ds.xpath(path).to_a # emit " : %3i %-17s %-s" % [nodes.size, type, path] typeCnt = nodes.size nodes.each do |n| $fieldsCSV << [file,ds.attribute('name'),n.attribute('name'),type] end if type == 'Columns' then calcCnt = 0 nodes.each do |n| calc = n.xpath('./calculation') # emit " c: #{calc.size} " calcCnt += calc.size end # emit ' ---' # emit " c#: %3i " % [calcCnt] # emit " !c#: %3i " % [nodes.size - calcCnt] typeCounts['Columns'] = nodes.size typeCounts['Columns - calc'] = calcCnt typeCounts['Columns - not calc'] = nodes.size - calcCnt else typeCounts[type] = typeCnt end end # emit ' ---' typeCounts.each do |t,c| emit " tc: %3i %-s" % [c, t] end end end
processTwb(twbName)
click to toggle source
# File lib/twb/analysis/Sheets/analyzedashboardsheets.rb, line 24 def processTwb twbName twb = Twb::Workbook.new twbName puts "\t - #{twb.name}" # -- $analyzer.processTWB twb # -- $twbCount += 1 end
relationFields(dataSource, connClass)
click to toggle source
# File lib/twb/findDSFields.rb, line 57 def relationFields dataSource, connClass emit "\t relationFields connClass: '%s'" % [connClass] xPaths = $relClassPaths[connClass] emit "\t xPaths: #{xPaths}" fnodesPath = xPaths['fieldXPath'] fnamePath = xPaths['nameXPath'] fieldNodes = dataSource.xpath(fnodesPath) end
showPaths()
click to toggle source
# File lib/twb/findDSFields.rb, line 139 def showPaths $paths.each do |type, paths| emit " #{type}" paths.each do |key, value| emit " : %10s => %-s" % [key, value] end puts " " end end