class Olap::Xmla::Client

Attributes

catalog[R]
client[R]
data_source[R]

Public Class Methods

new(server, data_source, catalog, options) click to toggle source
# 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

Public Instance Methods

batch(mdx_requests, parameters = {}) click to toggle source

Executes multiple MDX queries as a batch

Arguments:

* +mdx_requests+ - Collection of MDX requests
* +parameters+ - Map of parameters to substitute in MDX request, optional
# 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 = {}) click to toggle source

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]}
# 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