javascript - 通过 javascript API 保存和恢复 Tableau 图形的当前 View 状态

标签 javascript api tableau-api

问题:

如何通过 javascript-API 存储并稍后检索 Tableau View 的自定义状态?

描述:

我在一个网站上工作,我们目前允许任何用户将一组 Tableau View 协作到类似 PowerPoint 的在线演示中供以后使用。在我们当前的实现中,Tableau 图表的状态未被存储,因此用户每次都必须在按住演示文稿的同时应用他或她所需的过滤器、选择工作表等。这是我们现在想要避免的。

最简单的解决方案是存储和检索通过底部栏界面访问的“共享”链接之一;这些链接包含当前 View 的状态,但到目前为止,我们无法做到这一点:首先,由于域问题,我们不能简单地从嵌入代码 iframe 中获取共享链接;其次,API 方法 workbook.getUrl() 似乎不包括当前 View 的状态。

我目前正在研究 workbook.rememberCustomViewAsync(name)workbook.showCustomViewAsync(name) 方法,这似乎是一个可能的解决方案。但是,我似乎无法从这两种方法中的任何一种中获得任何合理的结果,因为它们在运行时最终都会给出模糊的、无信息的 500 错误。

示例文件和错误:

为了更好地说明这个问题,我创建了一个最小的 demo (下面的片段)尝试使用上述第二种方法。在 Google Chrome 中打开时,这两个按钮(“保存状态”和“检索状态”)都不适合我,在开发人员工具中可以看到以下错误(分别是 http 响应消息和开发人员控制台输出):

HTTP 响应:

<br>
2015-11-11 16&#x3a;14&#x3a;17.916
&#x28;VkNpWQrCQaIAACQo2YYAAAPi,0,0&#x29;

控制台错误:

POST http://public.tableau.com/vizql/w/Book6_426/v/YRKE/save_customized_view/sessions/208A699D34E14708A2268AA10A827C99-0:0 500 (Internal Server Error)

有谁知道我该如何解决这个问题,是通过使提供的代码示例起作用(描述的第二种方法),还是通过任何其他方式?任何帮助将不胜感激!

PS:此处的代码段模拟器会导致 Access-Control-Allow-Origin 错误。该文件也已发布here .

<html>

<head>
  <title>A simple Tableau API demo</title>
  <!--script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script-->
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
  <!--script type="text/javascript" src="https://online.tableau.com/javascripts/api/tableau_v8.js"></script-->
  <script type="text/javascript" src="https://online.tableau.com/javascripts/api/tableau-2.min.js "></script>
</head>

<body>


  <H2>Custom view storage demo</H2>

  <button id="remember-button">
    Remember state 'test'
  </button>
  <button id="retrieve-button">
    Retrieve state 'test'
  </button>

  <div id="viz-placeholder" style="width: 1000px; height: 1000px; display: block;"></div>


  <script>
    
    // Render tableau graph
    function initializeViz() {
      var placeholderDiv = document.getElementById("viz-placeholder");
      var url = "https://public.tableau.com/views/Book6_426/YRKE";
      var options = {
        width: placeholderDiv.offsetWidth,
        height: placeholderDiv.offsetHeight,
        hideTabs: true,
        hideToolbar: true,
        onFirstInteractive: function() {
          workbook = viz.getWorkbook();
          activeSheet = workbook.getActiveSheet();
        }
      };
      viz = new tableau.Viz(placeholderDiv, url, options);
    }

    $(initializeViz)

    
     // Assign and set up button actions for storing and retrieving the custom view
    var customViewName = "test";

    $('#remember-button').click(function() {
      console.log("Remembering: ", customViewName);
      
      // Try to save state, or print error
      viz.getWorkbook().rememberCustomViewAsync(customViewName).otherwise(function(err) {
        console.log("An error occured:");
        console.log(err);
      });
      
    });

    $('#retrieve-button').click(function() {
      console.log("Retrieving: ", customViewName);
      
      // Try to retrieve state, or print error
      viz.getWorkbook().showCustomViewAsync(customViewName).otherwise(function(err) {
        console.log("An error occured:");
        console.log(err);
      });
      
    });
  </script>


</body>

</html>

最佳答案

好的,所以我已经联系了 Tableau 客户支持,他们似乎已经发现了问题。

显然,javascript-API 的某些元素仅适用于 Tableau Online 和 Tableau Server - Tableau Public。

换句话说,Tableau Public 托管的图表不支持函数 workbook.rememberCustomViewAsync('customViewName') - 例如上例中使用的图表 (https://public.tableau.com/views/...).

关于javascript - 通过 javascript API 保存和恢复 Tableau 图形的当前 View 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33695684/

相关文章:

javascript - 有没有一种简单的方法可以阻止光标在 div contenteditable 中移动,即使使用 JavaScript 添加文本?

javascript - 显示正在加载处理器的异常行为

selenium - Tableau 自动化测试

tableau-api - 如何在 Tableau 中自定义子弹图

matplotlib - python中的词云具有三个单独的值

Javascript:如何从 UTC 字符串和偏移量解析日期?

javascript - Sketch JS,如何在音频标签上使用 AWS 预签名 URL?

Javascript 地理编码 API (Google) 区域过滤器

API检索有关名人的信息

javascript - Instagram API 不满足计数参数