如何基于另一个字段创建递增的计算字段

时间:2019-04-30 14:49:53

标签: excel excel-formula

我有一个包含这些列的Excel电子表格。...

ID,位置,产品名称,产品代码

样本数据...

ID, Location, ProductName, ProductCode
1, Miami, Gloves, 100
2, Tampa, Gloves, 203
3, Miami, Hats, 101
4, Tampa, Hats, 204
5, Miami, Balls, 102
6, Tampa, Balls, 205

如您所见,当前相同的产品可能具有不同的产品代码,具体取决于位置。手套同时使用100(迈阿密)和203(坦帕)。

我的目标是创建一个NewProductCode列。对于每个共享相同ProductName的产品,NewProductCode将为 SAME 。因此,从500开始。因此,使用相同的列表,这将是结果。...

ID, Location, ProductName, ProductCode, NewProductCode
1, Miami, Gloves, 100, 500
2, Tampa, Gloves, 203, 500
3, Miami, Hats, 101, 501
4, Tampa, Hats, 204, 501
5, Miami, Balls, 102, 502
6, Tampa, Balls, 205,502

因为有1000多个记录,所以我希望NewProductCode是CALCULATED字段。因此,基本上,我可以先按ProductName对列表进行排序。然后,计算出具有相同代码的相似产品的NewProductCodes,然后为下一个产品递增,以此类推...

我该怎么做?这有可能吗?

2 个答案:

答案 0 :(得分:2)

即使表未排序,这也将返回正确的代码:

在E2和E3中放入500,请输入以下公式:

val tuples =
  rdd
    .map(line => line.replaceAll("[\\(\\)]", "").split(","))
    .collect {
      case Array(col1, col2, ..., coln) => (col1, col2, ..., coln)
    }
// tuples: RDD[(String, String, ..., String)]

它将尝试查找匹配项,如果匹配则返回相同的值。如果找不到匹配项,则返回最大值+ 1。

enter image description here


如果始终在ProductName上进行排序,则可以使用简单的IF代替上面的公式:

=IFERROR(INDEX($E$1:E2,MATCH(C3,$C$1:C2,0)),MAX($E$1:E2)+1)

enter image description here

答案 1 :(得分:1)

当我喜欢这些难题时,请选择另一种方法:)

在E2中放:

=SUMPRODUCT(--(FREQUENCY(MATCH($C$2:C2,$C$2:C2,0),ROW($C$2:C2)-ROW($C$2)+1)>0))+499

然后向下拖动。