问题描述
我可以在 InList 子句中使用另一列吗?
例如, 我创建了一个变量,下面是公式。
IF [query1.column1] inList ([query2.column2]) then SUM([query1.amountColumn])
Else 0
OR 是否可以在公式中的 inList 之后放置变量?
如果不可能 - 还有其他替代方法吗?
解决方法
我看到了两种可能的方法。我将在两种解决方案中使用 eFashion Universe。
解决方案#1
这是我要开始的 2 个查询...
运行您的查询。单击要比较的列,在您的情况下为 [query1].[column1] 和 [query2].[column2]; [查询 1].[月] 和 [查询 2].[月] 对我来说。右键单击并合并它们。它们必须是维度且具有相同的数据类型。
现在创建一个基于 [查询 2].[月份名称] 的变量,您可以过滤该变量以消除 查询 1 中与查询 2 中的任何内容都不匹配的结果。
[UV 月份名称]=[查询 2].[月份名称]
这里的关键是您需要将资格更改为“详细信息”并将关联维度设置为我们刚刚通过单击右侧三个点合并的内容。不是从任一查询中选择 [Month Name],而是从合并维度中选择。
现在使用查询 1 中您想要的任何对象构建您的表,并添加我们刚刚创建的变量。
现在在该变量上添加一个过滤器以仅显示它不为空的行。
大功告成。
优点
- 在限制查询 (query2) 具有相对大量值时有效(与解决方案 #2 的缺点相比)。
缺点
- 设置更复杂
- 可能会遇到与过滤查询 (query1) 相关的 Universe 或性能问题。
解决方案#2
以解决方案 #1 为基础,我复制了查询 1 并将其重命名为 查询 3。现在您可以选择“来自另一个查询的结果”来获取您想要的 [query1].[colunmn1] InList ([query2].[column2]) 逻辑。
如果采用这种方法,则不需要进行合并、变量和过滤。查询的结果在被报表返回之前进行过滤。
优点
- 简单
缺点
- 来自您的第二个查询的值的数量必须相对较少。它因数据库甚至您的宇宙而异。我发现如果它超过 1,000 个值,我会在运行查询时收到一个错误,说它“太复杂”了。