(快速见解)如何仅对唯一字段中的值求和

时间:2019-07-23 19:17:28

标签: amazon-web-services duplicates calculated-field amazon-quicksight

我的数据集中有一个{Invoice No}字段,我想对其总计。所有发票编号都是唯一的,并且具有一个成本值。但是,由于每个{Invoice No}中都有多个{Part No}字段,因此Quicksight将此成本乘以每个发票中存在的许多零件号,因此总和最终是我想要的实际值的倍数。表格视图如下所示:

{Invoice No}    {Part No}     {cost}
12345            001           10.12
12345            002           10.12
12345            003           10.12

如何仅使用每个{Invoice No}的第一个{cost}值,所以它不重复呢?我认为一种解决方法可能是创建一个新字段,该字段会忽略任何重复的发票编号,但是不知道如何在Quicksight中执行此操作。 任何解决方案将不胜感激。

2 个答案:

答案 0 :(得分:1)

我可以通过使用计算所得的字段使它在表中工作。

我正在使用的计算方式是

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

然后在表格中显示值,包括总和 Field wells Invoice cost table

答案 1 :(得分:1)

还有另一种类型的计算,称为“级别感知聚合”。语法与表计算非常相似(您使用相同的函数),但是您无需在视觉效果中使用“分组依据”字段。结果不是一个聚合值,它类似于一个子查询,该子查询在行级被重新连接到您的数据。在发票ID级别对数据进行重复数据删除的一种方法是,获取每个发票的最大部件号,并返回其他行的成本。看起来可能像这样:

ifelse( maxOver(PartNo, [Invoice No] , PRE_AGG) = PartNo, cost, null)

然后将其拖动到您的视觉效果中并对其求和。

maxOver内部缺乏聚合,最后还添加了PRE_AGG,将其转变为Level Aware聚合。

可以查看此blog post以获得有关LAA的更多信息: