QlikSense:在过滤器窗格中使用 OR

问题描述 投票:0回答:1

QlikSense 中有没有办法使用单个过滤器值来搜索多个对象?

因此,在上面的示例中,我希望能够选择一个值,但让它查看每个对象。这些行也都是相关的。以下是 SQL 数据的示例:

最直接的路径是为药物设置 3 个单独的过滤器(药物 1、药物 2 和药物 3),但我更喜欢对所有 3 个药物进行一个过滤器搜索。希望这对我正在尝试做的事情有一个足够清晰的解释。

我尝试在过滤器窗格中使用表达式:

= drug1 OR drug2 OR drug3
但这不起作用。

qliksense
1个回答
0
投票

您可以通过使用变量、变量输入对象(文本框)和一些集合分析来实现这一点。

  1. 在工作表编辑器中创建一个名为
    vSearchString
    的新空变量。
  2. 向工作表添加一个新的变量输入对象,使其成为文本框,然后选择
    vSearchString
    变量。
  3. 在您的表格对象中,使用它作为您的
    drug1
    维度:

->

=Aggr(Only({
    <[drug1] = P({< [drug1]={"*$(vSearchString)*"} >})>
  + <[drug1] = P({< [drug2]={"*$(vSearchString)*"} >})>
  + <[drug1] = P({< [drug3]={"*$(vSearchString)*"} >})>
  } [drug1]), [drug1])

...然后,使用它作为您的

drug2
尺寸:

=Aggr(Only({
    <[drug2] = P({< [drug1]={"*$(vSearchString)*"} >})>
  + <[drug2] = P({< [drug2]={"*$(vSearchString)*"} >})>
  + <[drug2] = P({< [drug3]={"*$(vSearchString)*"} >})>
  } [drug2]), [drug2])

...最后,使用它作为您的

drug3
维度:

=Aggr(Only({
    <[drug3] = P({< [drug1]={"*$(vSearchString)*"} >})>
  + <[drug3] = P({< [drug2]={"*$(vSearchString)*"} >})>
  + <[drug3] = P({< [drug3]={"*$(vSearchString)*"} >})>
  } [drug3]), [drug3])

这应该足以让它工作:

上面显示的 Qlik 表达式利用了一些不同的概念:

  • Aggr()
    功能
    • 这个函数有点像一个
      GROUP BY
      子句。
    • 您给它一个聚合,然后给它任意数量的维度字段,它将返回按这些维度分组的聚合值。
    • 看起来像这样 -->
      =Aggr(Sum([Profit]), [RegionDim], [SalespersonDim])
    • 我们使用它是因为我们想要使用
      Only()
      聚合(请参阅下一个要点)来使用集合分析(请参阅下一个要点)。
  • Only()
    功能
    • 这是一个聚合函数,如果有一个值要返回,则返回一个值。
    • 我们想使用它是因为我们只能在聚合函数内部使用集合分析。我们将使用集合分析(如下)来搜索字段值内的文本,然后使用 `Aggr()
  • 设置分析
    • 这是一种将选择构建到聚合中的语法方法。
    • 查看集合分析的一种过于简化的方式是,它就像 Qlik 中图表表达式的 SQL
      WHERE
      子句。
    • 语法如下 -->
      {<[SomeField] = {'Some value or expression'}>}
© www.soinside.com 2019 - 2024. All rights reserved.