Ini adalah proses dua langkah, dan sebagai hasilnya, Kalkulator Lapangan tidak cocok untuk itu. Lebih baik menjalankan ini dalam skrip mandiri. Namun, itu bisa dilakukan di bidang kalkulator, asalkan Anda menggunakan trik. Anda perlu menggunakan kursor untuk memuat semua nilai ke kamus global dari daftar yang diurutkan, tetapi hanya selama perhitungan catatan pertama. Untuk semua catatan lain Anda harus melewati pembuatan kamus untuk menghindari membaca ulang seluruh tabel untuk setiap baris secara konstan.
Tiga nilai bidang harus ditempatkan di tuple untuk bertindak sebagai kunci yang akan mengurutkan dengan benar. Saya akan menganggap semua nilai kombinasi 3-bidang unik di tabel SamplePoint, tetapi saya menambahkan ObjectID untuk memastikannya unik. Anda harus memberikan path dan nama shapefile di baris 8 (atau saya bisa menggunakan teknik yang FelixIP gunakan di mana lapisan pertama di peta saat ini digunakan). Jika Anda ingin menggunakan bidang yang berbeda untuk kunci Anda harus mengubah daftar bidang di baris 10 dan mencocokkannya dengan bidang input di baris 3 dan baris 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!)
Saya juga tidak akan merekomendasikan menggunakan nama bidang Tahun, Bulan dan Hari, karena hanya berfungsi di shapefile dan tidak diizinkan di geodatabases. Database geodat akan mengubah nama menjadi Year_1, Month_1, Day_1 jika Anda mencoba menambahkannya ke daftar bidang di properti tabel.
Jika tujuan tabel ini adalah untuk mengaitkannya dengan tabel lain / kelas fitur pada kunci multi-bidang, pertimbangkan untuk menggunakan alat yang saya buat di Blog saya bernama Multiple Field Key ke Single Tool Key Field - Hubungkan Dua Layers Berdasarkan Lebih dari Satu Bidang