(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 的更多信息: