恢复的Tableau图表的当前视图状态的问题:保存并通过JavaScript API
我怎么能存储 - 然后在以后检索 - 一个的Tableau视图的自定义状态,通过JavaScript的API?
说明:
我的网站上,我们目前允许任何用户进行协作的一组的Tableau意见纳入供以后使用一个PowerPoint类的在线演示文稿。在我们当前的实现中,Tableau图的状态不会被存储,因此用户必须每次都在应用演示时使用他或她想要的过滤器,选择工作表等。这是我们现在想要避免的。
为最简单的解决方案将是存储和检索的“分享” -links通过底杆接口访问的一个;这些链接包含当前视图的状态,但到目前为止,我们还没有做到这一点:首先,由于域问题,我们不能简单地从嵌入代码iframe中获取共享链接;其次,API方法workbook.getUrl()似乎不包括当前视图的状态。
我currenty展望workbook.rememberCustomViewAsync(名称)和workbook.showCustomViewAsync(名称)方法,这似乎是一个可行的解决方案。但是,我似乎无法从这两种方法中得到任何明智的结果,因为它们在运行时最终会给出模糊的,无信息的500错误。
示例文件,并且错误:
为了更好地说明此问题,我已经创建了一个最小demo(下面片断),试图使用上述第二方法。在谷歌浏览器中打开时,两种按钮('保存状态'和'检索状态')都不适用于我,并且可以在开发者工具中看到以下错误(分别为http响应消息和开发者控制台输出):
HTTP响应:
<br>
2015-11-11 16:14:17.916
(VkNpWQrCQaIAACQo2YYAAAPi,0,0)
控制台错误:
POST http://public.tableau.com/vizql/w/Book6_426/v/YRKE/save_customized_view/sessions/208A699D34E14708A2268AA10A827C99-0:0 500 (Internal Server Error)
有谁知道我怎么能解决这个问题,无论是由希提供的代码示例工作(描述的第二种方法)还是通过其他方式?任何帮助,将不胜感激!
PS:这里的片段模拟器会导致访问控制允许来源的错误。该文件也已发布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>
嘿,我有一个问题。我知道,自定义视图是在一个工作簿中的所有仪表板之间共享的。有没有办法将具有相同过滤器的工作簿1的仪表板1的自定义视图应用于工作簿2的仪表板2? –
@DeepanshuKalra,恐怕我帮不了你。我建议你发布一个问题官方支持论坛。他们最终帮助我! –