(Quicksight)如何仅对唯一字段的值求和
(Quicksight) How to Sum Values only from Unique Fields
我的数据集有一个 {Invoice No} 字段,我想对其成本求和。所有发票编号都是唯一的,并且具有 一个 成本值。但是,由于每个 {Invoice No} 中有多个 {Part No} 字段,Quicksight 会将这一成本乘以每张发票中的零件号数量,因此总和最终是我想要的实际价值的倍数。这是 table 视图的样子:
{Invoice No} {Part No} {cost}
12345 001 10.12
12345 002 10.12
12345 003 10.12
我怎样才能只使用每个 {Invoice No} 的第一个 {cost} 值,以免重复?我认为解决方法可能是创建一个新字段来省略任何重复的发票编号,但不知道如何在 Quicksight 中执行此操作。
任何解决方案将不胜感激。
我可以通过使用计算字段使它在 table 中工作。
我使用的计算是
sumOver(max(cost),[{Invoice No}])
这基本上表明,按 {Invoice No}
分组在成本字段中取 max
个值(max
是任意的,因为它们都是相同的值)。然后对结果求和。
不幸的是,这在 KPI 卡中似乎不起作用(可能是仅显示总和的最佳选择)。它产生了错误 Table calculation attribute reference(s) are missing in field wells
.
为了测试这个,我扩展了你的数据集
Invoice No,Part No,cost
12345,001,10.12
12345,002,10.12
12345,003,10.12
12346,001,42.42
12346,003,42.42
12347,0032,3.01
12348,0033,.04
然后显示一个table中的值,包括sum
还有另一种计算类型,称为 Level Aware Aggregation。语法与 Table 计算非常相似(您使用相同的函数),但您不需要在视觉对象中使用 'group by' 字段。结果不是聚合值 - 它类似于在行级别连接回数据的子查询。在发票 ID 级别对数据进行重复数据删除的一种方法是采用每个发票的最大 PartNo 和 return 这些行的成本而不是其他行。它可能看起来像这样:
ifelse( maxOver(PartNo, [Invoice No] , PRE_AGG) = PartNo, cost, null)
然后将其拖到您的视觉对象中并求和。
maxOver 内部缺少聚合以及在末尾添加 PRE_AGG 将其变成了 Level Aware Aggregation。
可以查看此 blog post 以了解有关 LAA 的更多信息:
我的数据集有一个 {Invoice No} 字段,我想对其成本求和。所有发票编号都是唯一的,并且具有 一个 成本值。但是,由于每个 {Invoice No} 中有多个 {Part No} 字段,Quicksight 会将这一成本乘以每张发票中的零件号数量,因此总和最终是我想要的实际价值的倍数。这是 table 视图的样子:
{Invoice No} {Part No} {cost}
12345 001 10.12
12345 002 10.12
12345 003 10.12
我怎样才能只使用每个 {Invoice No} 的第一个 {cost} 值,以免重复?我认为解决方法可能是创建一个新字段来省略任何重复的发票编号,但不知道如何在 Quicksight 中执行此操作。 任何解决方案将不胜感激。
我可以通过使用计算字段使它在 table 中工作。
我使用的计算是
sumOver(max(cost),[{Invoice No}])
这基本上表明,按 {Invoice No}
分组在成本字段中取 max
个值(max
是任意的,因为它们都是相同的值)。然后对结果求和。
不幸的是,这在 KPI 卡中似乎不起作用(可能是仅显示总和的最佳选择)。它产生了错误 Table calculation attribute reference(s) are missing in field wells
.
为了测试这个,我扩展了你的数据集
Invoice No,Part No,cost
12345,001,10.12
12345,002,10.12
12345,003,10.12
12346,001,42.42
12346,003,42.42
12347,0032,3.01
12348,0033,.04
然后显示一个table中的值,包括sum
还有另一种计算类型,称为 Level Aware Aggregation。语法与 Table 计算非常相似(您使用相同的函数),但您不需要在视觉对象中使用 'group by' 字段。结果不是聚合值 - 它类似于在行级别连接回数据的子查询。在发票 ID 级别对数据进行重复数据删除的一种方法是采用每个发票的最大 PartNo 和 return 这些行的成本而不是其他行。它可能看起来像这样:
ifelse( maxOver(PartNo, [Invoice No] , PRE_AGG) = PartNo, cost, null)
然后将其拖到您的视觉对象中并求和。
maxOver 内部缺少聚合以及在末尾添加 PRE_AGG 将其变成了 Level Aware Aggregation。
可以查看此 blog post 以了解有关 LAA 的更多信息: