Este é um processo de duas etapas e, como resultado, a Calculadora de Campo não é adequada. É melhor executar isso em um script independente. No entanto, isso pode ser feito na calculadora de campo, desde que você use um truque. Você precisa usar um cursor para carregar todos os valores em um dicionário global de uma lista classificada, mas apenas durante o cálculo do primeiro registro. Para todos os outros registros, você deve pular a criação do dicionário para evitar reler constantemente a tabela inteira para cada linha.
Os três valores do campo devem ser colocados em uma tupla para atuar como uma chave que será classificada corretamente. Assumirei que todos os valores da combinação de 3 campos são exclusivos na tabela SamplePoint, mas adicionei o ObjectID para garantir que ele seja exclusivo. Você deve fornecer o nome do caminho e do arquivo shapefile na linha 8 (ou eu poderia usar a técnica que o FelixIP usa onde a primeira camada no mapa atual é usada). Se você deseja usar campos diferentes para uma chave, é necessário alterar a lista de campos na linha 10 e combiná-los com os campos de entrada nas linhas 3 e 15.
#Pre-logic Script Code:
relateDict = {}
def autoIncrement(myYear, myMonth, myDay, OID):
global relateDict
# only populate the dictionary if it has no keys
if len(relateDict) == 0:
# Provide the path to the relate feature class/table
relateFC = r"C:\Users\OWNER\Documents\ArcGIS\SamplePoints.shp"
# create a field list with the relate fields in sort order
relateFieldsList = ["Year", "Month", "Day", "OID@"]
# process a da search cursor to transfer the data to the dictionary
relateList = sorted([(r[0:]) for r in arcpy.da.SearchCursor(relateFC, relateFieldsList)])
for relateSort in range(0, len(relateList)):
relateDict[relateList[relateSort]] = relateSort + 1
return relateDict[(myYear,myMonth,myDay,OID)]
#Expression:
autoIncrement(!Year!, !Month!, !Day!, !OBJECTID!)
Eu também não recomendaria o uso de nomes de campos Ano, Mês e Dia, pois eles funcionam apenas em shapefiles e não são permitidos em bancos de dados geográficos. Um geodatabase mudará os nomes para Year_1, Month_1, Day_1 se você tentar adicioná-los à lista de campos nas propriedades da tabela.
Se o objetivo desta tabela é relacioná-la a outra classe de tabela / recurso em uma chave de vários campos, considere usar a ferramenta que criei no meu blog chamada Chave de Campo Múltiplo a Ferramenta Chave de Campo Único - Relacione Duas Camadas com Base em Mais de Um Campo