2014-10-21 71 views
1

我有一个表,看起来像这样:使用过滤的结果作为场计算出的字段中的Tableau

+------------+-----------+---------------+ 
| Invoice_ID | Charge_ID | Charge_Amount | 
+------------+-----------+---------------+ 
|   1 | A   | $10   | 
|   1 | B   | $20   | 
|   2 | A   | $10   | 
|   2 | B   | $20   | 
|   2 | C   | $30   | 
|   3 | C   | $30   | 
|   3 | D   | $40   | 
+------------+-----------+---------------+ 

在画面,如何可以有一个字段,SUMsCharge_AmountCharge_IDs B,C和d ,发票有A的Charge_ID?结果将是70美元。

我的数据源是SQL Server的,所以我想我可以一个字段(称为Has_ChargeID_A)添加到SQL Server表,告诉如果发票有一个Charge_ID,然后在的Tableau只是做所有的SUM其中Has_ChargeID_A为true的行和Charge_ID是B,C或D.但我更喜欢如果我可以直接在Tableau中完成此操作(并非完全是这样,但任何会使我达到相同结果的操作)。

回答

2

你的直觉引导你朝着正确的方向前进。您只想过滤仅包含Charge_ID为A的行的发票,并且您可以直接在Tableau中执行此操作。

在过滤器架上首先放入Invoice_ID,然后选择过滤器的Condition选项卡。然后选择条件选项卡上的“按公式”选项,然后输入您希望用来确定过滤器包含哪些invoice_ids的公式。

这里是您的示例的公式:

count(if Charge_ID = 'A' then 'Y' end) > 0 

对于每个数据行,它会计算在括号内的表达式的值,然后只包括invoice_ids与至少一个非空值用于内部表达。 (if语句的隐式else,“返回”null)。

维度字段的条件选项卡等同于SQL中的HAVING子句。

如果条件公式变得复杂,那么通过计算字段或几个更简单的计算字段的组合来定义它们通常是一个好主意,只是为了使事情易于管理。最后,如果你最终经常使用这样的维度集合,你可以将它们定义为集合。您仍然可以在过滤器架上放置集,但可以通过其他方式重用它们,例如在计算字段中测试集成员身份(如SQL IN子句),或者使用交集和联合操作符创建新集。您可以将集合看作命名过滤器,例如包含A类费用的发票集合。

+0

太棒了!我不知道我可以使用这样的条件选项卡。这将有很大帮助。谢谢。 – user1845791 2014-10-22 23:09:59

相关问题