class PowerBI::Report

Attributes

dataset_id[R]
embed_url[R]
id[R]
is_from_pbix[R]
is_owned_by_me[R]
name[R]
pages[R]
report_type[R]
web_url[R]
workspace[R]

Public Class Methods

new(tenant, data) click to toggle source
# File lib/power-bi/report.rb, line 7
def initialize(tenant, data)
  @id = data[:id]
  @report_type = data[:reportType]
  @name = data[:name]
  @web_url = data[:webUrl]
  @embed_url = data[:embedUrl]
  @is_from_pbix = data[:isFromPbix]
  @is_owned_by_me = data[:isOwnedByMe]
  @dataset_id = data[:datasetId]
  @workspace = data[:workspace]
  @tenant = tenant
  @pages = PageArray.new(@tenant, self)
end

Public Instance Methods

clone(target_workspace, new_report_name) click to toggle source
# File lib/power-bi/report.rb, line 21
def clone(target_workspace, new_report_name)
  data = @tenant.post("/reports/#{@id}/Clone") do |req|
    req.body = {
      name: new_report_name,
      targetWorkspaceId: target_workspace.id
    }.to_json
  end
  target_workspace.reports.reload
  data[:workspace] = target_workspace
  Report.new(@tenant, data)
end
export_to_file(filename, format: 'PDF', timeout: 300) click to toggle source
# File lib/power-bi/report.rb, line 42
def export_to_file(filename, format: 'PDF', timeout: 300)
  # post
  data = @tenant.post("/groups/#{workspace.id}/reports/#{id}/ExportTo") do |req|
    req.body = {
      format: format
    }.to_json
  end
  export_id = data[:id]

  # poll
  success = false
  iterations = 0
  status_history = ''
  old_status = ''
  while !success
    sleep 0.1
    iterations += 1
    raise ExportToFileError.new("Report export to file did not succeed after #{timeout} seconds. Status history:#{status_history}") if iterations > (10 * timeout)
    new_status = @tenant.get("/groups/#{workspace.id}/reports/#{id}/exports/#{export_id}")[:status].to_s
    success = (new_status == "Succeeded")
    if new_status != old_status
      status_history += "\nStatus change after #{iterations/10.0}s: '#{old_status}' --> '#{new_status}'"
      old_status = new_status
    end
  end

  # get and write file
  data = @tenant.get_raw("/groups/#{workspace.id}/reports/#{id}/exports/#{export_id}/file")
  File.open(filename, "wb") { |f| f.write(data) }
end
rebind(target_dataset) click to toggle source
# File lib/power-bi/report.rb, line 33
def rebind(target_dataset)
  @tenant.post("/groups/#{workspace.id}/reports/#{id}/Rebind") do |req|
    req.body = {
      datasetId: target_dataset.id
    }.to_json
  end
  true
end