Dies ist ein zweistufiger Prozess, weshalb der Feldrechner nicht gut dafür geeignet ist. Es ist besser, dies in einem eigenständigen Skript auszuführen. Dies kann jedoch im Feldrechner erfolgen, sofern Sie einen Trick verwenden. Sie müssen einen Cursor verwenden, um alle Werte aus einer sortierten Liste in ein globales Wörterbuch zu laden, jedoch nur während der Berechnung des ersten Datensatzes. Für alle anderen Datensätze müssen Sie die Wörterbucherstellung überspringen, um zu vermeiden, dass die gesamte Tabelle für jede Zeile ständig neu gelesen wird.
Die drei Feldwerte müssen in einem Tupel platziert werden, um als Schlüssel zu fungieren, der ordnungsgemäß sortiert wird. Ich gehe davon aus, dass alle 3-Feld-Kombinationswerte in der SamplePoint-Tabelle eindeutig sind, aber ich habe die ObjectID hinzugefügt, um sicherzustellen, dass sie eindeutig ist. Sie müssen den Pfad- und Shapefile-Namen in Zeile 8 angeben (oder ich könnte die Technik verwenden, die FelixIP verwendet, wenn die erste Ebene in der aktuellen Karte verwendet wird). Wenn Sie verschiedene Felder für einen Schlüssel verwenden möchten, müssen Sie die Feldliste in Zeile 10 ändern und sie mit den Eingabefeldern in Zeile 3 und Zeile 15 abgleichen.
#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!)
Ich würde auch nicht empfehlen, die Feldnamen Jahr, Monat und Tag zu verwenden, da diese nur in Shapefiles funktionieren und in Geodatabases nicht zulässig sind. Eine Geodatabase ändert die Namen in Jahr_1, Monat_1, Tag_1, wenn Sie versuchen, sie der Feldliste in den Eigenschaften der Tabelle hinzuzufügen.
Wenn der Zweck dieser Tabelle darin besteht, sie mit einer anderen Tabelle / Feature-Class auf einem Mehrfeldschlüssel zu verknüpfen, sollten Sie das in meinem Blog erstellte Tool mit dem Namen " Mehrfachfeldschlüssel für Einzelfeldschlüssel" verwenden - zwei Ebenen basierend auf mehr als einer verknüpfen Feld