これは2段階のプロセスであるため、フィールド計算機はそれに適していません。スタンドアロンスクリプトでこれを実行することをお勧めします。ただし、トリックを使用すれば、フィールド計算機で実行できます。カーソルを使用して、ソートされたリストからグローバル辞書にすべての値をロードする必要がありますが、最初のレコードの計算中のみです。他のすべてのレコードについては、辞書の作成をスキップして、各行のテーブル全体を絶えず再読み取りしないようにする必要があります。
適切にソートされるキーとして機能するには、3つのフィールド値をタプルに配置する必要があります。SamplePointテーブルではすべての3フィールドの組み合わせの値が一意であると仮定しますが、一意になるように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に変更します。
このテーブルの目的が、マルチフィールドキー上の別のテーブル/機能クラスに関連付けることである場合、ブログで作成したマルチフィールドキーからシングルフィールドキーツールという名前のツールを使用することを検討してください。フィールド