知识库

在不使用表计算的情况下进行“总额百分比”计算


发布时间: 05 Aug 2016
上次修改日期: 20 Jul 2023

问题

如何使用诸如快速表计算等表计算来计算总额百分比

环境

Tableau Desktop

答案

一般解决方法

创建一个计算,该计算在分母中使用详细级别 (LOD) 函数来查找总额。例如,查找每个细分的销售总额百分比;用于查找销售总额百分比的以下表计算:
SUM([Sales]) / TOTAL(SUM([Sales]))
可能会变为:
SUM([Sales]) / SUM( { EXCLUDE [Segment] : SUM([Sales]) } )

 
单击以扩展解决方案

示例 1:将快速表计算转换为 LOD 计算

这些指引从附带的工作簿中的“Example 1: table calc”(示例 1:表计算)工作表开始。 
步骤 1 - 使用表计算构建视图
  1. 将“[Region]”(区域)拖到“行”功能区
  2. 将“[Segment]”(细分)拖到“标记”卡上的“颜色”
  3. 将“[Sales]”(销售额)拖到“列”功能区
  4. 在“列”功能区上右键单击“[Sales]”(销售额),并选择“快速表计算”>“总额百分比”
  5. 在“列”功能区上右键单击“[Sales]”(销售额),并选择“计算依据”>“表(横穿)”
  6. 按住 Ctrl 并将“[Sales]”(销售额)从“列”功能区拖到“标记” 卡上的“标签”。这将创建一个应用了相同快速表计算的副本。
步骤 2 - 使用计算字段重新生成相同结果
  1. 选择“分析”>“创建计算字段”
  2. 在打开的“计算字段”对话框中,执行以下操作,然后单击“确定”
    1. 命名此计算字段。在此示例中,计算字段名为“Ex 1: % of total sales per segment within region”(示例 1:区域内每个细分的销售总额百分比)
    2. 将带有三角形图标的绿色“SUM(Sales)”字段从“标记”卡拖到计算编辑器中
    3. Tableau Desktop 将自动编写出以下计算:
      SUM([Sales])/TOTAL(SUM([Sales]))
  3. 对计算进行修改,将表函数 TOTAL() 替换为 LOD 函数。最终计算可能如下所示:
    SUM([Sales])/SUM({ EXCLUDE [Segment] : SUM([Sales])})

    重要信息:EXCLUDE 函数将运算表达式(在本例中为 SUM([Sales])),就好像 EXCLUDE 后台列出的维度已从视图中移除一样。为了避免“cannot mix aggregate and nonaggregate arguments”(无法将聚合和非聚合参数混合)错误,EXCLUDE 外部必须要有 SUM(),并且该函数不会更改分母的值。
  4. 将视图中的“SUM(Sales)”替换为“[Ex 1: % of total sales per segment within region]”(示例 1:区域内每个细分的销售总额百分比)
  5. (可选)通过设置轴的默认数字的格式,将其修改为百分比。
要查看以下视频中显示的步骤,请展开上述部分。
注意:视频没有声音。
 
单击以展开步骤

示例 2:调整总额百分比的范围

选项 1
如果使用 EXCLUDE,请在 EXCLUDE 后面列出所有维度,将对度量值进行分组的维度除外。举例来说,如果视图包括“[Region]”(区域)、“[Segment]”(细分)和“[Category]”(类别),而目标是查找每个区域内各个细分的总额百分比,则计算将如下所示:
{ EXCLUDE [Category] : SUM( [Sales] ) }/{ EXCLUDE [Segment], [Category] : SUM( [Sales] ) }

如果使用 FIXED,则在 FIXED 后面列出将用于对度量值进行分组的所有维度。上面使用 FIXED 的相同示例将为:
{ FIXED [Segment], [Region] : SUM( [Sales] ) }/{ FIXED [Region] : SUM( [Sales] }
选项 2
若要查找每个细分的总体销售总额百分比,您将注意到此特定示例将显示每个区域和每个类别比例为 50.56% 的消费者。这是因为总额百分比与细分相关联,并且由于视图中有其他维度,因此百分比将重复。
{ EXCLUDE [Region], [Category] : SUM([Sales]) }/{ EXCLUDE [Region], [Category], [Segment] : SUM([Sales])}

如果使用 FIXED,请使用以下等效的计算:
{ FIXED [Segment] : SUM([Sales]) }/{ FIXED : SUM([Sales]) }
选项 3
使用以下计算来查看视图中每一行的销售总额百分比。
SUM([Sales])/SUM({ EXCLUDE [Category] : SUM([Sales]) })
  • 将为视图中的每一行计算“SUM([Sales])”。
  • EXCLUDE 语句将为视图中的每一行计算销售额,就好像“[Category]”(类别)已移除一样。
  • 如果向视图中添加了其他维度,则分子和分母的值将相应更改
请参见工作表“Example 2: LOD Scope Variations”(示例 2:LOD 范围变化)来查看这些示例。有关何时使用 EXCLUDE 与 FIXED 的提示,请参见本文的其他注释部分。
若要查看以下视频中显示的步骤,请展开上述部分。
注意:视频没有声音。
 
单击以展开步骤

示例 3:包括或忽略筛选器

由于操作顺序的原因,FIXED 表达式只会通过上下文筛选器进行筛选。EXCLUDE 表达式通过所有维度筛选器进行筛选。

不要使用表计算,也不要使用 TOTAL() 函数,请使用详细级别 (LOD) 表达式,例如:
{ FIXED [<您正在寻找其总额百分比信息的维度>] : SUM([Measure]) } /
{ FIXED [<"Total" 维度>] : SUM([Measure]) }

例如,使用 Superstore 样本数据按地区显示每个细分的总额百分比是多少:
  1. 选择“分析”>“创建计算字段”。将计算命名为“Percent of Total”(总额百分比),输入以下计算,然后单击“确定”:
    { FIXED [Segment], [Region] : SUM([Sales]) }/{ FIXED [Region] : SUM([Sales]) }
  2. “度量”窗格中,右键单击“Percent of Total”(总额百分比),并选择“默认属性”>“数字格式...”>“百分比”
  3. “Percent of Total”(总额百分比)放在“列”上。 
  4. “Region”(区域)放在“行”上。 
  5. “Segment”(细分)放在“颜色”上。
  6. “Percent of Total”(总额百分比)放在“标签”上。
若要查看上述步骤,请观看下面的视频。
注意:视频没有声音。

若要查看其他示例,请参见附带的工作簿中的“Example 3: Working with Filters”(示例 3:使用筛选器)工作表。
  1. 使用类似于“Ex 3: % of total sales per segment within region (not filtered)”(示例 3:区域内每个细分的销售总额百分比(未筛选))的名称创建一个计算字段,其计算类似于如下:
    { FIXED [Segment], [Region] : SUM([Sales]) }/{ FIXED [Region] : SUM([Sales]) }
  2. 将“[Ex 3: % of total sales per segment within region (not filtered)]”(示例 3:区域内每个细分的销售总额百分比(未筛选))拖到“列”功能区
  3. 将“[Category]”(类别)和“[Sub-Category]”(子类)拖到“筛选器”功能区
  4. 在“筛选器”功能区上右键单击“[Category]”(类别),并选择“添加到上下文”

上面计算的说明:

  • 使用 EXCLUDE 的计算将通过“[Category]”(类别)和“[Sub-Category]”(子类)筛选器进行筛选(对于表函数也是如此)
  • 使用 FIXED 的计算将仅通过“[Catgory]”(类别)进行筛选,因为该筛选器已添加到上下文中。
  • 可以在一个计算中混用 FIXED 和 EXCLUDE,以便在一段被筛选的情况下,另一段不会被筛选。
单击以展开步骤

示例 4:在另一个计算中使用总额百分比

在另一个计算中使用总额百分比计算时,要考虑两个主要方面:
  1. 如果最终视图缺少运算分子和/或分母所需的维度,则必须使用 FIXED 或 INCLUDE;
  2. 总额百分比计算需要与其中使用了该计算的计算聚合匹配。LOD 始终返回非聚合值。
步骤 1 - 生成视图
  1. 右键单击并将“[Order Date]”(订单日期)拖到“列”功能区
  2. 在“放置字段”对话框中,选择绿色的“Order Date (continuous)”(订单日期(连续)),并单击“确定”
  3. 将“[Sales]”(销售额)拖到“行”功能区
  4. 将“[Order ID]”(订单 ID)拖到“标记”卡上的“详细信息”
步骤 2 - 创建计算字段
  1. 使用类似于“Ex 4: % of total per customer overall”(示例 4:每个客户的总体总额百分比)创建一个计算字段,其计算类似于如下:
    { FIXED [Customer Name], [Region] : SUM([Sales]) }/{FIXED [Region] : SUM([Sales])}
  2. 使用类似于“Ex 4: Top Customers per Region”(示例 4:每个区域位于前列的客户)创建一个计算字段,其计算类似于如下:
    IF
    ([Ex 4: % of total per customer within region] > .02
    AND [Region] = "South")
    OR
    [Ex 4: % of total per customer within region] > .0075
    THEN "big customer"
    ELSE "other"
    END
  3. 将“[Ex 4: Top Customers per Region]”(示例 4:每个区域位于前列的用户)拖到“标记”卡上的“颜色”
在附带的工作簿中也可以看到此示例,具体位于名为“Example 4”(示例 4)的工作表中。
要查看以下视频中显示的步骤,请展开上述部分。
注意:视频没有声音。

其他信息

 
表计算与 LOD
表函数和 LOD 函数均允许我们确定总额的范围。根据总额百分比的使用方式,一个选项可能更适合:
  • 表计算可能在总额中显示意外结果
  • 筛选器可能会意外改变表计算
  • FIXED LOD 计算会忽略除上下文筛选器外的所有筛选器
  • 引用总额百分比的计算可能会遇到“cannot mix aggregate and nonaggreate arguments”(无法将聚合和非聚合参数混合)。使用与计算将进入的计算聚合匹配的总额百分比计算。FIXED 表达式为非聚合,而 EXCLUDE 和表函数为聚合。
有关表函数和 LOD 计算有何不同的详细信息,请参见选择正确的计算类型
EXCLUDE 与 FIXED

大多数情况下,可以使用 EXCLUDE 或 FIXED。要考虑的某些因素:

  • EXCLUDE 语句将考虑所有维度筛选器。FIXED 将仅考虑上下文筛选器。
  • EXCLUDE 语句必须在视图中或“筛选器”功能区上进行聚合。FIXED 语句的处理方式与维度类似。
  • 为了简单起见,这些示例仅显示 EXCLUDE,而不显示 INCLUDE。INCLUDE 将运算表达式,就好像指定维度已添加到视图中一样。当维度缺少定义分子和/或分母范围所需的维度时,INCLUDE 比 EXCLUDE 更加适合。
有关 LOD 的确切工作方式以及 FIXED、INCLUDE 和 EXCLUDE 的差异的详细信息,请参见向视图中添加详细级别表达式

此文章是否已解决问题?