我有一个看起来像这样的表:
+------------+-----------+---------------+
| 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 |
+------------+-----------+---------------+
在Tableau中,如何为SUMs
B,C和D Charge_Amount
Charge_IDs
字段添加Charge_ID
,其中发票的Has_ChargeID_A
为A?结果将是70美元。
我的数据源是SQL Server,所以我想我可以在SQL Server表中添加一个字段(称为Charge_ID
),告诉发票是否有SUM
的A,然后在Tableau只执行Has_ChargeID_A
为Charge_ID
为真且{{1}}为B,C或D的所有行的{{1}}。但我更愿意,如果我可以直接在Tableau中执行此操作(不是这样的话)确切地说,但任何会让我得到同样结果的东西)。
答案 0 :(得分:2)
你的直觉正在引导你朝着正确的方向前进。您确实只想过滤到包含Charge_ID为A的行的发票,您可以直接在Tableau中执行此操作。
首先在过滤器架上放置Invoice_ID,然后选择过滤器的“条件”选项卡。然后选择"按公式"条件选项卡上的选项,并输入您希望用于确定过滤器包含哪些invoice_ids的公式。
以下是您的示例公式:
count(if Charge_ID = 'A' then 'Y' end) > 0
对于每个数据行,它将计算括号内表达式的值,然后仅包含内部表达式至少具有一个非空值的invoice_ids。 (if语句的隐含else,"返回" null)。
维度字段的条件选项卡等同于SQL中的HAVING子句。
如果条件公式变得复杂,使用计算字段定义它们通常是一个好主意 - 或者是几个更简单的计算字段的组合,只是为了使事情易于管理。
最后,如果您经常使用这样的维度集合,则可以将它们定义为集合。您仍然可以在过滤器架上放置集合,但是可以以其他方式重用它们:例如在计算字段中测试集合成员资格(如SQL IN子句),或者使用交集和联合运算符创建新集合。您可以将集合视为命名过滤器,例如包含A类费用的发票集。