본문으로 건너뛰기

Report Table 연결과 여러 case

Report Workbench에서 선택한 표는 Flow에 typed collection 값 하나로 전달합니다. 표의 행 수는 Canvas Node 수나 Flow Run 수를 바꾸지 않습니다.

먼저 결정할 것: 한 번 실행할지, 행마다 실행할지

표를 Flow에 연결할 때 정할 것은 하나입니다.

하려는 일연결 방법Run 수
표 전체를 한 계산에 넘기기Flow의 Table input에 표를 연결1회
행마다 같은 계산을 따로 돌리기행을 고르고 Run → New batch고른 행 수만큼

표를 Table input에 연결하면 행이 몇 개든 Run은 한 번입니다. 행마다 결과와 실행 상태를 따로 얻으려면 Batch Run을 사용합니다. 두 방식의 자세한 비교는 collection 한 번과 Batch 여러 번 구분하기에 있습니다.

Flow가 Table input과 result를 공개합니다

이 예제는 contract_only이며 현재 SDK에서 실행할 수 없습니다. @px.record, px.fieldpx.Table이 승인된 뒤의 typed Table 연결 형태를 설명합니다.

python
from pipelinexlab import px


@px.record(
    "load_case",
    description="검토할 하중 case 한 행입니다.",
    row_key="case_key",
)
class LoadCase:
    case_key: str = px.field(description="Stable row key.")
    permanent_g: float = px.field(unit="kN", description="Permanent load.")
    variable_q: float = px.field(unit="kN", description="Variable load.")


flow = px.Flow(
    "load_case_review",
    label="Load case review",
    description="Checks the load cases supplied as one typed Table.",
)
cases = flow.input(
    "cases",
    px.Table[LoadCase],
    description="Load cases to check.",
)
check = flow.node("load_checks", check_load_cases)

flow.connect(cases, check.inputs.cases)
flow.result("checks", check.results.rows)

px.Table[LoadCase]는 여러 row를 담은 input 값 하나입니다. flow.connect(...)는 public input을 Node input으로 연결하는 Flow 내부 관계이며, Report table과 public input의 관계는 .pxreport.flowConnections[].inputMappings가 소유합니다.

새 Connected Table을 input에 연결합니다

  1. Report Workbench의 빈 문단에 caret를 둡니다.
  2. @ Insert → PXFLOW → Use report input을 선택합니다.
  3. cases · Table<LoadCase>를 고르고 확정해 connected table과 binding을 함께 만듭니다.
  4. table의 행을 입력하고 각 행을 식별하는 stable row key를 지정합니다.
  5. Connection → Table mapping에서 source field와 Flow Record field, row key의 type·unit을 확인하고 편집합니다.
  6. Report를 저장합니다.

기존 ordinary 표 범위를 선택해 @로 직접 승격하는 경로는 계획 단계입니다. 아래 JSON은 위 과정으로 만들었거나 SDK/import로 가져온 connected table을 저장한 mapping 예시입니다.

json
{
  "mappingKey": "load_cases_input",
  "portKey": "cases",
  "source": {
    "kind": "reportTableSelection",
    "tableKey": "design_loads",
    "rowKeys": ["uls_01", "uls_02", "sls_01"],
    "rowKey": {
      "sourceFieldKey": "case_key",
      "inputFieldKey": "case_key"
    },
    "fields": [
      {
        "sourceFieldKey": "permanent_g",
        "inputFieldKey": "permanent_g"
      },
      {
        "sourceFieldKey": "variable_q",
        "inputFieldKey": "variable_q"
      }
    ]
  }
}

어떤 행과 열을 보내는지는 mappingKey, tableKey, rowKeys, row key와 field mapping으로 정합니다. 화면에서 표를 정렬하거나 선택 영역을 옮겨도 이 값들이 그대로면 같은 대상을 가리킵니다.

Table result를 Report에 표시합니다

Flow가 공개한 checks result를 Report의 읽기 전용 result table에 연결합니다.

json
{
  "mappingKey": "checks_table_result",
  "portKey": "checks",
  "target": {
    "kind": "reportTableResult",
    "tableKey": "check_results",
    "rowKey": {
      "resultFieldKey": "case_key",
      "targetFieldKey": "case_key"
    },
    "fields": [
      {
        "resultFieldKey": "utilization",
        "targetFieldKey": "utilization"
      },
      {
        "resultFieldKey": "passed",
        "targetFieldKey": "passed"
      }
    ]
  }
}

result table은 Run이 만든 결과 행을 row key로 찾아 표시합니다. 사용자가 작성한 표의 값은 그대로 두고, 화면에 보이는 행 순서와 무관하게 같은 key끼리 짝지어 보여 줍니다.

selection과 실행 횟수

Report selectionFlow public input결과
1 cellscalarFlow Run 1회
N rows × 1 fieldlist[T]list 하나로 Flow Run 1회
N rows × M fieldspx.Table[Record]Table 하나로 Flow Run 1회
N rowsscalarshape 오류; 연결 확정 전 중지

한 Table input을 Node body가 vectorized library, 내부 loop 또는 worker batch로 처리할 수 있습니다. 이 실행 정책은 target contract가 소유하며 Canvas에 row별 Node를 만들지 않습니다.

여러 scalar case는 Batch Run으로 만듭니다

Flow input이 scalar이고 각 row를 독립 Run으로 실행하려면 Batch Run을 선택합니다.

Batch Run은 사용자가 화면에서 확인한 case 목록을 같은 Flow revision에 하나씩 전달합니다. 표에서 행을 고른 것만으로 실행이 자동으로 늘어나는 일은 일어나지 않으며, Canvas에 행마다 Node가 생기지도 않습니다. Batch 안의 각 case는 자기 caseKey로 자기 child Run을 기억하므로, 한 case를 Retry해도 다른 case의 결과는 그대로 유지됩니다.

표 변경과 Stale 상태

표의 표시 정렬만 바뀌고 stable selection과 값이 같다면 input digest는 바뀌지 않습니다. row key, selected field, 값 또는 unit이 바뀌면 새 input payload가 필요합니다.

partial result

Flow result가 row별 상태를 포함하는 typed Table이면 Report result table에서 그대로 표시할 수 있습니다.

이 행별 상태는 한 번 실행한 Run이 돌려준 Table 안의 값입니다. Batch Run의 실행 상태는 caseKey별 child Run 상태와 Batch 요약에서 따로 확인합니다.

field
case_keyuls_01
statussucceeded, failed, cancelled
value사용할 수 있는 row result
diagnostic실패 row의 stable code와 message

재시도는 Run·Result 화면에서 시작합니다. Report는 worker 예약이나 attempt 상태를 문서 본문에 저장하지 않습니다.

큰 Table

  • Report Workbench는 viewport에 필요한 row를 점진적으로 표시합니다.
  • 연결 picker는 row 수, selected field와 schema summary를 먼저 보여 줍니다.
  • 전체 input payload와 result는 content-addressed resource로 저장할 수 있습니다.
  • AI에는 bounded summary와 permission-checked resource link를 제공합니다.
  • export는 pinned ResultSnapshot과 명시한 pagination profile을 사용합니다.

Validation

  1. source selection이 stable tableKey, rowKeys, exact rowKey와 source→input fields를 가집니다.
  2. destination이 exact px.Table[RecordType] 또는 호환 collection type입니다.
  3. Record field의 type·unit·nullable 규칙이 호환됩니다.
  4. declared row key가 source와 result schema에 존재합니다.
  5. result target field가 Flow result contract에 존재합니다.
  6. 같은 result table destination을 두 mapping이 겹쳐 소유하지 않습니다.
  7. connection이 exact Flow revision을 고정합니다.

사용자가 보는 오류

문제표시복구
Table schema 불일치source/destination field difffield mapping 또는 Flow input 수정
row key 누락누락한 exact fieldReport table 또는 Record contract 수정
result field 제거영향받는 column 목록result mapping 검토
scalar input에 여러 rowexpected scalar/current collection한 row 선택 또는 Batch Run
stale Resultprevious/current source digestRun again
Flow revision 접근 불가pinned target과 필요한 권한Request access 또는 revision 선택

함께 읽기