class Twb::Analysis::CalculatedFields::DotAnalyzer
Attributes
docFileName[R]
Public Class Methods
new(**args)
click to toggle source
# File lib/twb/analysis/CalculatedFields/dotanalyzer.rb, line 29 def initialize(**args) @args = args init @funcdoc = {:class=>self.class, :blurb=>'Create Dot files documenting Calculated Fields', :description=>'Analyze Calculated Fields - create Dot files' } @metrics = {} @imageFiles = Array.new end
Public Instance Methods
encode(str)
click to toggle source
# File lib/twb/analysis/CalculatedFields/dotanalyzer.rb, line 37 def encode str str.gsub('"', '\"') end
processTWB(twb)
click to toggle source
# File lib/twb/analysis/CalculatedFields/dotanalyzer.rb, line 41 def processTWB twb # twb = File.basename(twb) @twb = twb #Twb::Workbook.new twb addDocFile @dotFile, @dotFileName, "Dot file of Calculated fields for Workbook '#{@twb.name}'" @twb.datasources.each do |ds| unless ds.calculatedFields.empty? initDotFile ds.uiname # @dotFile.puts "\n ## #{ds.uiname} \n " # @dotFile.puts "__has #{ds.calculatedFields.length} calculated fields__\n " @cfCnt = 0 calcFields = Set.new refFields = Set.new edges = Set.new ds.calculatedFields.each do |cf| @cfCnt += 1 calcFields << cf.uiname edges << " \"#{encode(ds.uiname)}\" -> \"#{encode(cf.uiname)}\" [tailport=e, headport=w] " puts " \"#{encode(ds.uiname)}\" -> \"#{encode(cf.uiname)}\" [tailport=e, headport=w] " cf.referencedFields.each do |rf| refFields << rf.uiname edges << " \"#{encode(cf.uiname)}\" -> \"#{encode(rf.uiname)}\" [tailport=e, headport=w] " end end # ds.calculatedFields.each # "federated.17h7owt0rsacke17cql8o0w2ittk" -> "New AO Actuals Query in PP+ (AO Variance Data)::vs Prior Year [YTD]" # "federated.01s5lca037ted31gxs9sg0t9mnnt" [label="Controls" ] edges.each do |edge| @dotFile.puts "\t #{edge.strip}" end @dotFile.puts " " allFields = calcFields + refFields allFields.each do |f| @dotFile.puts "\t \"#{encode(f)}\" [label=\"#{encode(f)}\"]" end endPointFields = allFields - calcFields rankSame(endPointFields) unless endPointFields.nil? || endPointFields.empty? closeDotFile @@imageTypes.each do |type| renderDot type end end end # twb.datasources.each finis end
Private Instance Methods
closeDotFile()
click to toggle source
# File lib/twb/analysis/CalculatedFields/dotanalyzer.rb, line 98 def closeDotFile # @dotFile.puts "\n # counted #{@cfCnt} calculated fields\n " # @dotFile.puts "\n }" @dotFile.puts ' }' @dotFile.puts ' ' @dotFile.puts '// -------------------------------------------------------------' @dotFile.puts ' ' @dotFile.puts ' subgraph cluster_1 {' #@dotFile.puts ' color=white;' @dotFile.puts ' style=invis;' #@dotFile.puts ' border=0;' @dotFile.puts ' node [border=blue];' @dotFile.puts ' ' @dotFile.puts ' "" [style=invis]' @dotFile.puts " \"Tableau Tools\\nCalculated Fields Map\\nWorkbook '#{@twb.name}'\\n#{Time.new.ctime}\" [penwidth=0]" #@dotFile.puts " \"Tableau Tools Workbook Calculated Fields Map\\n#{Time.new.ctime}\" -> \"\" [style=invis]" @dotFile.puts ' ' @dotFile.puts ' }' @dotFile.puts ' ' @dotFile.puts '}' @dotFile.close end
initDotFile(dsName)
click to toggle source
# File lib/twb/analysis/CalculatedFields/dotanalyzer.rb, line 87 def initDotFile dsName @dotFileName = './ttdoc/' + @twb.name + '.' + dsName + '.CalculatedFields.dot' @dotFile = File.open(@dotFileName,'w') # @dotFile.puts @@dotHeader @dotFile.puts ' digraph g {' @dotFile.puts ' graph [rankdir="LR" splines=line];' @dotFile.puts ' node [shape="box" width="2"];' @dotFile.puts ' ' @dotFile.puts ' subgraph cluster_0 {' end
rankSame(fields)
click to toggle source
# File lib/twb/analysis/CalculatedFields/dotanalyzer.rb, line 121 def rankSame fields @dotFile.puts "\n {rank=same " fields.each do |f| @dotFile.puts "\t \"#{f}\" " end @dotFile.puts " } " end
renderDot(format)
click to toggle source
# File lib/twb/analysis/CalculatedFields/dotanalyzer.rb, line 129 def renderDot format imageType = '-T' + format imageFile = @dotFileName + '.Graph.' + format imageParam = '-o"' + imageFile + '"' emit "system #{@@gvDotLocation} #{imageType} #{imageParam} \"#{@dotFileName}\"" system "#{@@gvDotLocation} #{imageType} #{imageParam} \"#{@dotFileName}\"" # emit " - #{imageFile}" @imageFiles << imageFile return imageFile end