0
我們有一個工作簿,其中包含兩個儀表板,第一個包含一個工作表,第二個包含四個工作表。跨多個儀表板/工作表通過JS設置畫面過濾器
我們正在嘗試通過url傳遞過濾器(該部分沒問題),但是我們無法獲取第二個儀表板上的所有工作表以進行更新。
代碼循環顯示儀表板,依次激活每個儀表板,然後分別調用filterActiveSheet()方法。
該方法依次遍歷每個工作表,搜索匹配的具有與提供的FieldName相同的類別過濾器,並在找到時使用applyFilterAsync()方法將其替換爲提供的過濾器。
var options = {
<snip>
onFirstInteractive: function() {
workbook = viz.getWorkbook();
sheets = workbook.getPublishedSheetsInfo();
for(s = 0; s < sheets.length; s++)
{
viz.getWorkbook().activateSheetAsync(s)
.then(filterActiveSheet);
}
}
};
function filterActiveSheet(sheet) {
for (ws = 0; ws < sheet.getWorksheets().length; ws++) {
var worksheet = sheet.getWorksheets()[ws];
worksheet.getFiltersAsync()
.then(function(p) {
var f = filters.split(';');
for(y=0;y<f.length;y++){
var filter = f[y].split(':');
var filterType = $.grep(p, function(e){ return e.getFieldName() == filter[0]; });
if (filterType.length > 0) {
switch(filterType[0].getFilterType()) {
case tableau.FilterType.CATEGORICAL:
return worksheet.applyFilterAsync(filter[0], filter[1], tableau.FilterUpdateType.REPLACE);
break;
<snip>
}
}
}
});
}
}
var viz = new tableauSoftware.Viz(placeholderDiv, url, options);
我們看到的問題是每個儀表板上只有一個工作表正在更新。在Chrome瀏覽器中瀏覽JS我可以看到applyFilterAsync()調用的預期次數似乎不會導致錯誤,但它似乎並不想更新所有過濾器/工作表,每個儀表板上只有一個。
想法?建議?語法錯誤?
我的第一個想法是更改工作簿並將篩選器設置爲「應用於所有數據源」?那麼你不需要用javascript來迭代。請參閱http://onlinehelp.tableau.com/current/pro/desktop/en-us/filtering_global.html。 –
感謝您的建議。不幸的是,這正是他們目前正在做的事情,但是,由於各種表單中存在多個不同的數據源,這是一件非常痛苦的事情,而且過於複雜。我應該補充說,這只是處理這些多工作表dashdboard的一個更大的機制的一小部分。 – Mike
可以使用版本10中較新的過濾器功能來覆蓋所有數據源?我認爲這是一個名爲「應用於所有使用相關數據源」的過濾器功能。 –