将tableau工作簿克隆到其他项目中

时间:2018-03-15 22:01:33

标签: tableau tableau-server

在我们目前的设置中,我们为每位客户提供了一个单独的项目。客户都拥有相同的仪表板,但数据源不同。每当我们更改一个客户的仪表板时,我们都必须将更改复制到所有其他客户。目前,这是一个手动过程,我们为每个客户重新上传更改的工作簿并替换连接的数据源。 我现在想要将tableaus rest APIdocument api结合使用,从而实现该流程的自动化。对于数据源,我们不使用超文件而是与数据库建立实时连接。

这是我目前的实施:

tableau_auth = TSC.TableauAuth('admin', 'tableau-admin')
server = TSC.Server('http://localhost:8080')

with server.auth.sign_in(tableau_auth):

  # download original workbook
  server.workbooks.download(workbook_id=source_work_book_id, filepath="tmp", include_extract=False)

  source_wb = Workbook('tmp/source.twbx')

  # get datasources which have connections
  wb_datasources = [s for s in source_wb.datasources if len(s.connections) != 0]

  # mappings to map datasource from source to target datasources
  # (all the datasources have the same name but are in different projects)
  dbname_to_datasource = {d.content_url: d.name for d in datasources if d.project_id == source_project_id}

  source_to_target = {d.name: d.content_url for d in datasources if d.project_id == target_project_id}

  # overwrite source datasources
  for datasource in wb_datasources:
    datasource.connections[0].dbname = source_to_target[dbname_to_datasource[datasource.connections[0].dbname]]

  source_wb.save_as("tmp/target.twbx")

  # write back to tableau server 
  new_workbook = TSC.WorkbookItem(target_project_id)

  server.workbooks.publish(new_workbook, file_path="tmp/target.twb", mode=TSC.Server.PublishMode.CreateNew)

上传时出现以下错误:

400011: Bad Request
        There was a problem publishing the file 'target.twbx'.

如果我重新上传未经修改的工作簿,它甚至不起作用。如果我更改下载以包含提取文件,我可以成功上传未修改的工作簿:

server.workbooks.download(workbook_id=source_work_book_id, filepath=tmp_dir, include_extract=True)

唯一的问题是我现在正在添加不必要的数据,但它也没有解决我如何替换数据源的问题。

有没有人知道我做错了什么,或者有其他方法可以做到这一点吗?

0 个答案:

没有答案