Це двоетапний процес, і як результат, калькулятор поля не дуже підходить до нього. Краще запустити це в автономному сценарії. Однак це можна зробити в польовому калькуляторі за умови використання хитрості. Вам потрібно використовувати курсор для завантаження всіх значень у глобальний словник із відсортованого списку, але лише під час обчислення першого запису. Для всіх інших записів вам потрібно пропустити створення словника, щоб уникнути постійного перечитування всієї таблиці для кожного рядка.
Три значення поля повинні бути розміщені в кордоні, щоб діяти як ключ, який буде сортувати належним чином. Я буду вважати, що всі значення комбінацій 3-х полів є унікальними в таблиці SamplePoint, але я додав ObjectID, щоб переконатися, що він унікальний. Ви повинні надати шлях і ім’я файлу форми у рядку 8 (або я міг би використовувати техніку, яку використовує FelixIP, коли використовується перший шар у поточній карті). Якщо ви хочете використовувати різні поля для ключа, вам слід змінити список полів у рядку 10 та зіставити їх із полями введення у рядку 3 та рядку 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!)
Я також не рекомендував би використовувати назви полів "Рік", "Місяць" та "День", оскільки вони працюють лише у форматі файлів і не дозволяються в базах даних про геодані. База геоданих змінить імена на Рік_1, Місяць_1, День_1, якщо ви спробуєте додати їх до списку полів у властивостях таблиці.
Якщо мета цієї таблиці полягає в тому, щоб пов’язати її з іншою таблицею / класом функцій на клавіші з декількома полями, розгляньте можливість використання інструменту, створеного в моєму блозі під назвою Кілька польових ключів, до інструмента «Клавіша одного поля» - відношення двох шарів на основі більше одного Поле