Spotfire

时间:2015-04-29 10:27:13

标签: filtering hierarchy spotfire

我正在学习使用spotfire创建报告。你能帮我理解一下可行性吗?

是否可以根据之前的选择更改过滤器(过滤器必须根据前一部分进行更改)

例如:

我有一张下表,有三列。

Filter1   Filter2    Data
Name      Name1      test1
Age       Age1       test2
Location  Location1  test3

我计划根据Filter1和Filter2列提供过滤器选项。

是否可以使用值" Filter1"创建下拉列表?和"过滤器2"? 是否可以根据第一个下拉选项修改过滤器选项列表。

例如。如果&#34; Filter1 &#34;在下拉列表中选择。过滤器选项列表应为&#34; 名称&#34;,&#34; 年龄&#34;,&#34; 位置< /强>&#34 ;.

如果&#34; 过滤器2 &#34;在下拉列表中选择。过滤器选项列表应为&#34; 名称1 &#34;,&#34; 年龄1 &#34;,&#34; 位置1 < /强>&#34 ;.

谢谢

2 个答案:

答案 0 :(得分:1)

我们还可以通过以下步骤创建级联下拉列表。

  1. 创建“属性控件 - 下拉列表”myDropDownList
  2. 选择“唯一列值”以填充下拉列表(值)。
  3. 转到“插入 - &gt;计算栏“
  4. 使用简单的条件语句,如If([Value1] ='$ {myDropDownList}',[Value 2],NULL)
  5. 在文本区域过滤器中使用新创建的列。这将根据上一节进行更新。
  6. 感谢。

答案 1 :(得分:0)

我有一个利用JavaScript的解决方案,可以在隐藏的DIV之间有效切换。我不知道一种方法来操纵过滤器对象以及它通过API在文本区域中指向哪一列。如果有人确实知道我喜欢听的方式!

以下是我使用JS的解决方案:

  1. 使用下拉菜单设置文本区域作为列选择器(通过“选择列...”对话框选择感兴趣的列),显示该选择的标签(我们将隐藏此内容,我意识到它似乎是多余的),并为您的2列提供2个过滤器。
  2. 右键单击文本区域,然后单击“编辑HMTL”。利用下面的HTML,修改您的HTML以匹配。您将希望将第一个DIV作为下拉列表,将SPAN作为标签显示下拉列表的属性,然后将最后两个DIVS(在我的情况下为LETTER和NUMBER)作为您的两个过滤器。确保DIV ID名称与您的列名完全匹配。

    <DIV><SpotfireControl id="8dc9d8974bde445cab4c97d38e7908d6" /></DIV>
    <SPAN id=docProp style="DISPLAY: none"><SpotfireControl id="1311015997cd476384527d91cb10eb52" /></SPAN>
    <DIV id=LETTER style="DISPLAY: none"><SpotfireControl id="760ae9ffd71a4f079b792fb5f70ac8b4" /></DIV>
    <DIV id=NUMBER style="DISPLAY: none"><SpotfireControl id="488ef4b1289440d5be24b0dd8cfc3896" /></DIV>
    
  3. 接下来我们将实现JS。为此,请单击编辑HTML中的+ JS按钮。 JS本身就在下面。您需要在前2个getElementById引用中更改LETTER和NUMBER的输入,我们将它们设置为display:none。

    filter = function(){
        input = $("#docProp").text().trim() //Take the text from our hidden label and trim it from any white space.
        document.getElementById("LETTER").style.display = 'none'; //Reset DIV
        document.getElementById("NUMBER").style.display = 'none'; //Reset DIV
        document.getElementById(input).style.display = 'block'; //Set new display
    }
    
    //Run this function every 333ms or other length of time desired to update your filters. 
    setInterval(filter,333)
    //Larger numbers mean slower response and better performance vs. faster response and worse performance. Tune as necessary.
    

    或者不是每隔X毫秒扫描一次(可能会导致一些性能下降),您可以使用JS按钮手动运行它。例如$("#divIdForButtonPlacement").button().bind('click',filter)

  4. 我的测试设置的一些图像如下所示。如果您对此有任何疑问,请与我们联系。
  5. text_area

    letter

    number