上次修改日期: 20 Jul 2023
环境
Tableau Desktop答案
通常,用于计算满足条件的维度成员数量的公式为:{ FIXED [Dimension] : SUM(
IF <Condition>
THEN 1
ELSE 0
END
) }
IF <Condition>
THEN 1
ELSE 0
END
) }
有若干使用案例可能会使用此常规公式。下面是使用示例数据集 Superstore 的一些示例。
单击以展开解决方案
示例 1:使用一系列包含参数的值
在此示例中,视图在行上包括“[Category]”(类别)和“[Segment]”(细分),目标是计算销售额介于每个类别和细分组合的两个参数值之间的客户的数量。
- 选择“分析”>“创建计算字段”
- 在打开的“计算字段”对话框中,执行以下操作,然后单击“确定”:
- 命名此计算字段。在此示例中,计算字段名为“# of Customers with Select Sales”(具有选定销售额的客户数)。
- 在公式字段中,创建一个类似于如下的计算:
IF { INCLUDE [Customer Name] : SUM([Sales])} >= [Sales Lower Limit]
AND { INCLUDE [Customer Name] : SUM([Sales])} <= [Sales Upper Limit]
THEN 1
ELSE 0
END
- 将“[# of Customers with Select Sales]”(具有特定销售额的客户数)拖到“标记”卡上的“文本”
单击以展开解决方案
示例 2:使用文本值
在此示例中,视图在行上包含“[Order ID]”(订单 ID)和“[Product Name]”(产品名称),目标是计算包含产品“Staple holder”的订单数。
- 使用类似于如下的计算创建一个名称类似于“# of Orders with a Staple holder”(包含 Staple holder 的订单数)的计算字段:
{ FIXED [Order ID] : MAX(
IF [Product Name] = "Staple holder"
THEN 1
ELSE 0
END)} - 将“[# of Orders with a Staple holder]”(包含 Staple holder 的订单数)拖到“标记”卡上的“文本”
单击以展开解决方案
示例 3:创建类别
在此示例中,“[State]”(州)已添加到文本,目标是按具有负利润的城市数对州进行分类。
- 使用类似于如下的计算创建一个名称类似于“# of Unprofitable Cities”(未赢利城市数)的计算字段:
{ FIXED [State] : SUM(
IF { INCLUDE [City] : SUM([Profit]) } < 0
THEN 1
ELSE 0
END
) } - 使用类似于如下的计算创建一个名称类似于“Categories based on city profit”(根据城市利润进行分类)的计算字段:
IF [# of Unprofitable Cities] = 0
THEN "All cities have positive profit"
ELSEIF [# of Unprofitable Cities] = 1
THEN "One city has negative profit"
ELSE "Multiple cities have negative profit"
END - 将“[Categories based on city profit]”(根据城市利润进行分类)拖到“列”功能区
单击以展开解决方案
示例 4:使用表函数
在此示例中,视图已筛选为按各细分各类别的销售额显示前 10 名客户。目标是突出显示利润为负的客户超过两个的任何类别/细分。
- 使用类似于如下的计算创建一个名称类似于“3+ Top 10 Customers w/ Neg Profit”(3 个以上利润为负的前 10 名客户)的计算字段:
IF
WINDOW_SUM(
IF SUM([Profit]) < 0
AND [Sales Rank] <= 10
THEN 1
ELSE 0
END ) > 2
THEN "Three or more customers with negative profit"
ELSE "Good standing"
END - 将“[3+ Top 10 Customers w/ Neg Profit]”(3 个以上利润为负的前 10 名客户)拖到到“标记”卡上的“颜色”
- 在“颜色”上右键单击“[3+ Top 10 Customers w/ Neg Profit]”(3 个以上利润为负的前 10 名客户),并选择“计算依据”>“Customer Name”(客户名称)
其他信息
有关示例 1 的注意事项:
- 由于视图中没有“[Customer Name]”(客户名称),因此 INCLUDE 表达式是必需的
- “SUM([Sales])”将聚合到视图中的详细级别,即本例中的“[Category]”(类别)和“[Segment]”(细分),再加上“[Customer Name]”(客户名称),因为 INCLUDE 表达式列出了“[Customer Name]”(客户名称)
- 如果每个客户的销售额低于“[Sales Upper Limit]”(销售额上限)并高于“[Sales Upper Limit]”(销售额下限),则“["# of Customers with Select Sales]”(具有选定销售额的客户数)计算将会进行计算。如果每个客户的销售额在指定范围内,则此计算将返回 1,该值累加起来就是客户计数
- 也可以使用 COUNTD() 编写此计算
有关示例 2 的注意事项:
- IF 语句审阅基础数据集中的每条记录,检查“[Product Name]”(产品名称)是否为“Staple holder”。 如果是,计算将为该记录返回 1。然后,FIXED 表达式将为具有相同“[Order ID]”(订单 ID)值的每条记录返回最大值 1 和 0。
- 在 Superstore 中,每个“[Product Name]”(产品名称)和“[Order ID]”(订单 ID)的唯一组合只有 1 条记录,这意味着 MAX() 可替换为 SUM(),并且会返回相同的结果,因为对 1 个值进行加总与获取 1 个值的最大值是相同的。
有关示例 3 的注意事项:
- INCLUDE 表达式将返回各州各城市的利润总和,因为“[State]”(州)位于 FIXED 表达式中。计算随后将为每个未赢利城市返回 1,这是一种对城市计数的方式。
有关示例 4 的注意事项:
- 此示例必须使用表计算,而不是详细级别 (LOD) 表达式,因为表计算筛选器不会筛选基础数据,因此我们必须为排名在计算内添加一个条件。但是,RANK() 是一个表函数,无法在 LOD 计算内使用。
- 视图中每个非聚合维度都会影响表计算。如果表计算未返回正确的结果,这可能是由于视图中维度对表计算的运算方式导致的。为了解决此问题,请更改计算依据选项。有关详细信息,请参见使用表计算转换值
感谢您提供该文章是否有效的反馈。
打开新案例
继续搜索
知识库
社区
产品帮助
培训和教程