Questo è un processo in due passaggi e, di conseguenza, il calcolatore di campo non è adatto a questo. È meglio eseguirlo in uno script autonomo. Tuttavia, può essere fatto nel calcolatore di campo, a patto che tu usi un trucco. È necessario utilizzare un cursore per caricare tutti i valori in un dizionario globale da un elenco ordinato, ma solo durante il calcolo del primo record. Per tutti gli altri record devi saltare la creazione del dizionario per evitare di rileggere costantemente l'intera tabella per ogni riga.
I tre valori di campo devono essere inseriti in una tupla per fungere da chiave che verrà ordinata correttamente. Presumo che tutti i valori della combinazione a 3 campi siano univoci nella tabella SamplePoint, ma ho aggiunto l'ObjectID per assicurarmi che sia univoco. Devi fornire il percorso e il nome dello shapefile nella riga 8 (o potrei usare la tecnica che FelixIP usa dove viene usato il primo layer nella mappa corrente). Se si desidera utilizzare campi diversi per una chiave, è necessario modificare l'elenco dei campi nella riga 10 e abbinarli ai campi di input nella riga 3 e nella riga 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!)
Inoltre, non consiglierei di utilizzare i nomi dei campi di Anno, Mese e Giorno, poiché funzionano solo nei file di forma e non sono consentiti nei database geografici. Un geodatabase cambierà i nomi in Year_1, Month_1, Day_1 se si tenta di aggiungerli all'elenco dei campi nelle proprietà della tabella.
Se lo scopo di questa tabella è di metterlo in relazione con un'altra tabella / classe di funzionalità su una chiave multi-campo, prendere in considerazione l'utilizzo dello strumento che ho creato nel mio blog denominato Chiave da campo multiplo a Strumento chiave da campo singolo - Correlare due livelli basati su più di uno Campo