이는 2 단계 프로세스이므로 결과적으로 필드 계산기는 적합하지 않습니다. 이것을 독립형 스크립트로 실행하는 것이 좋습니다. 그러나 트릭을 사용하는 경우 필드 계산기에서 수행 할 수 있습니다. 커서를 사용하여 정렬 된 목록에서 모든 값을 전역 사전에로드해야하지만 첫 번째 레코드를 계산하는 동안에 만 필요합니다. 다른 모든 레코드의 경우 각 행의 전체 테이블을 지속적으로 다시 읽지 않도록 사전 작성을 건너 뛰어야합니다.
세 가지 필드 값은 올바르게 정렬되는 키 역할을하도록 튜플에 배치해야합니다. 모든 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!)
또한 shapefile에서만 작동하며 지오 데이터베이스에서는 사용할 수 없으므로 Year, Month 및 Day 필드 이름을 사용하지 않는 것이 좋습니다. 지오 데이터베이스는 이름을 테이블 속성의 필드 목록에 추가하려고하면 이름을 Year_1, Month_1, Day_1로 변경합니다.
이 테이블의 목적이 테이블을 다중 필드 키의 다른 테이블 / 피처 클래스와 연관시키는 것이라면 블로그에서 다중 필드 키라는 단일 도구를 단일 필드 키 도구로 사용하는 도구를 사용하는 것이 좋습니다. 들