Class: Olap::Xmla::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/olap/xmla/client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(server, data_source, catalog, options) ⇒ Client

Returns a new instance of Client.



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/olap/xmla/client.rb', line 8

def initialize server, data_source, catalog, options

  @catalog = catalog
  @data_source = data_source
  @verbose = options[:verbose]
  @client = Savon.client do
    endpoint server
    namespace "urn:schemas-microsoft-com:xml-analysis"
    open_timeout (options[:open_timeout] || 60)
    read_timeout (options[:read_timeout] || 300)
  end
end

Instance Attribute Details

#catalogObject (readonly)

Returns the value of attribute catalog.



6
7
8
# File 'lib/olap/xmla/client.rb', line 6

def catalog
  @catalog
end

#clientObject (readonly)

Returns the value of attribute client.



6
7
8
# File 'lib/olap/xmla/client.rb', line 6

def client
  @client
end

#data_sourceObject (readonly)

Returns the value of attribute data_source.



6
7
8
# File 'lib/olap/xmla/client.rb', line 6

def data_source
  @data_source
end

Instance Method Details

#batch(mdx_requests, parameters = {}) ⇒ Object

Executes multiple MDX queries as a batch

Arguments:

* +mdx_requests+ - Collection of MDX requests
* +parameters+ - Map of parameters to substitute in MDX request, optional


27
28
29
30
31
# File 'lib/olap/xmla/client.rb', line 27

def batch mdx_requests, parameters = {}
  mdx_requests.collect{|mdx|
    request mdx, parameters
  }
end

#request(mdx_request, parameters = {}) ⇒ Object

Execute MDX queries, substituting parameters in the query

Arguments:

* +mdx_request+ - MDX request as a string, required
* +parameters+ - Map of parameters to substitute in MDX request, optional

Example:

client.request 'SET [~ROWS_Date] AS {[DateTime].[Date].[Date].[%DATE%]}', {'%DATE%' => '20150530'}
  will execute actual MDX: SET [~ROWS_Date] AS {[DateTime].[Date].[Date].[20150530]}


45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/olap/xmla/client.rb', line 45

def request mdx_request, parameters = {}

  mdx = mdx_request.clone

  parameters.each{|k,v|
    mdx.gsub!(k,v)
  }

  puts mdx if @verbose

  ops = client.operation('Execute')
  p = { 'wsdl:PropertyList' => {'wsdl:DataSourceInfo' => data_source,
                               'wsdl:Catalog' => catalog,
                               'wsdl:Format' => 'Multidimensional',
                               'wsdl:AxisFormat'=> 'TupleFormat'} }


  r = ops.call(  message: {'wsdl:Command' =>  { 'wsdl:Statement' => mdx}, 'wsdl:Properties' => p })

  unless r.success?
    raise "Error executing #{mdx} in #{catalog} #{data_source}: #{r.http_error} #{r.soap_fault}"
  end

  Olap::Xmla::Response.new r.body[:execute_response][:return][:root], mdx

end