นี่เป็นกระบวนการสองขั้นตอนและด้วยเหตุนี้เครื่องคำนวณฟิลด์จึงไม่เหมาะสำหรับมัน มันจะดีกว่าที่จะเรียกใช้ในสคริปต์แบบสแตนด์อโลน อย่างไรก็ตามมันสามารถทำได้ในเครื่องคิดเลขฟิลด์หากคุณใช้เคล็ดลับ คุณจำเป็นต้องใช้เคอร์เซอร์เพื่อโหลดค่าทั้งหมดไปยังพจนานุกรมโกลบอลจากรายการที่เรียงลำดับ แต่ระหว่างการคำนวณของระเบียนแรกเท่านั้น สำหรับระเบียนอื่น ๆ ทั้งหมดคุณต้องข้ามการสร้างพจนานุกรมเพื่อหลีกเลี่ยงการอ่านซ้ำทั้งตารางสำหรับแต่ละแถวอย่างต่อเนื่อง
ต้องใส่ค่าฟิลด์ทั้งสามไว้ใน tuple เพื่อทำหน้าที่เป็นคีย์ที่จะเรียงลำดับอย่างถูกต้อง ฉันจะสมมติว่าค่าชุดค่าผสม 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!)
ฉันจะไม่แนะนำให้ใช้ชื่อเขตข้อมูลของปี, เดือนและวันเนื่องจากสิ่งเหล่านั้นทำงานในรูปทรงไฟล์เท่านั้นและไม่ได้รับอนุญาตในฐานข้อมูลทางภูมิศาสตร์ ฐานข้อมูลภูมิศาสตร์จะเปลี่ยนชื่อเป็น Year_1, Month_1, Day_1 หากคุณพยายามที่จะเพิ่มลงในรายการเขตข้อมูลในคุณสมบัติของตาราง
หากวัตถุประสงค์ของตารางนี้เกี่ยวข้องกับตาราง / ฟีเจอร์คลาสอื่นบนคีย์แบบหลายฟิลด์ให้พิจารณาใช้เครื่องมือที่ฉันสร้างขึ้นในบล็อกของฉันชื่อคีย์ฟิลด์หลายฟิลด์กับเครื่องมือคีย์ฟิลด์เดียว - สัมพันธ์สองเลเยอร์มากกว่าหนึ่ง สนาม