[]
SJS.TABLE 함수는 하나 이상의 입력값 집합에 대해 결과 셀 또는 범위를 평가하여 가상 분석을 수행합니다.
계산된 결과를 동적 배열로 반환합니다.
이 함수는 하나의 수식 내에서 단일 변수 및 다변수 시뮬레이션을 지원합니다.
=SJS.TABLE(result_reference, inputs1, input_cell1, ...)매개변수 | 설명 |
|---|---|
| 각 시뮬레이션에 대해 평가할 셀 또는 범위입니다. |
|
|
| 평가 중 각 입력값이 대입되는 단일 셀 참조입니다. |
다변수 분석을 수행하기 위해 추가적인 inputs / input_cell 쌍을 제공할 수 있습니다. 첫 번째 이후의 모든 쌍은 선택 사항입니다.
SJS.TABLE은 result_reference를 평가하고 수집된 결과를 동적 배열로 반환합니다.
결과는 입력 구조에 따라 자동으로 확장됩니다.
참조된 입력 셀의 원래 값은 영구적으로 변경되지 않습니다.
이 수식은 일반적인 동적 배열 수식처럼 동작합니다.
단일 값 입력은 모든 시뮬레이션에 적용됩니다.
SJS.TABLE은 result_reference의 형태와 제공된 입력값에 따라 크기가 결정되는 동적 배열을 반환합니다.
단일 셀 result_reference는 입력 차원에 따라 결과 그리드를 생성합니다.
범위 result_reference는 각 시뮬레이션에 대해 원래 형태를 유지합니다.
여러 입력 범위가 제공되면 입력값은 입력 및 결과 규칙(Input and Result Rules)에 설명된 차원 및 매핑 규칙에 따라 평가됩니다.
출력 크기 결정 방식과 각 시뮬레이션에 입력값이 매칭되는 방식에 대한 자세한 규칙은 입력 및 결과 규칙을 참조하세요.
다음 패턴은 SJS.TABLE의 일반적인 사용 방법을 보여줍니다.
입력값이 세로로 나열되어 있고 결과를 아래 방향으로 확장하려는 경우 이 패턴을 사용합니다.
=SJS.TABLE(B2, A3:A10, A2)각 행은 A2에 A3:A10의 해당 값이 설정된 상태에서 평가된 B2 값을 반환합니다.
입력값이 가로로 나열되어 있고 결과를 열 방향으로 확장하려는 경우 이 패턴을 사용합니다.
=SJS.TABLE(B2, B3:H3, A2)각 열은 해당 입력값에 대한 평가 결과를 반환합니다.
결과가 두 개의 독립적인 입력 변수에 의존하는 경우 이 패턴을 사용합니다.
=SJS.TABLE(A2, B2:H2, B1, A3:A5, A1)반환되는 2차원 배열은 제공된 행 입력과 열 입력의 모든 조합을 나타냅니다.
SJS.TABLE은 하나의 수식 내에서 2개를 초과하는 입력 변수 쌍을 지원합니다.
A1: =B1 * C1 * D1
=SJS.TABLE(A1, {1,2,3}, B1, {1,2,3}, C1, {1;-1}, D1)결과에는 제공된 입력값의 모든 조합이 포함됩니다.
입력값은 반드시 워크시트 범위에서 가져올 필요가 없습니다. 인라인 배열 및 동적 배열 함수도 지원됩니다.
=SJS.TABLE(B1, {1,2,3}, A1)
=SJS.TABLE(B1, SEQUENCE(2,2), A1)반환되는 결과는 제공된 입력 배열의 구조와 일치합니다.
SJS.TABLE은 표준 수식이므로 다른 함수 내부에서 사용할 수 있습니다.
=SUM(SJS.TABLE(A1, B2:B10, A2))다음 예제는 완전한 이변수 데이터 표 시나리오를 보여줍니다.
이 예제에서:
Price와 Discount는 입력 변수입니다.
Net Income은 예상 판매량을 기준으로 계산됩니다.
SJS.TABLE은 여러 Price와 Discount 조합에 대해 Net Income을 평가합니다.
var spread = new GC.Spread.Sheets.Workbook('ss');
spread.options.allowDynamicArray = true;
spread.suspendPaint();
var sheet = spread.getActiveSheet();
// Define the model inputs and formulas that will be recalculated by the data table.
sheet.setArray(0, 0, [
['Price', 300],
['Discount', 0],
['Sales Volume'],
['Net Income']
]);
sheet.setFormula(2, 1, '=ROUND(P3+O3*B1+B2*N3,0)');
sheet.setFormula(3, 1, '=B3*(B1*(1-B2)-130)');
// Use historical price and discount data to estimate future sales volume with LINEST.
sheet.getRange('N2').value('Calculate LINEST by History data');
sheet.getRange('N3').formula('=LINEST(P8:.P17,N8:.O17)');
sheet.setArray(5, 13, [
['History data', null, null, 'Estimated Sales Volume\nBy LINEST Result'],
['Price', 'Discount', 'Sales Volume'],
[300, 0, 38],
[250, 0.1, 62],
[300, 0.2, 60],
[320, 0.25, 60],
[200, 0.1, 70]
]);
// Show the fitted sales-volume result for each historical record.
sheet.getRange('Q8:Q13').formula('=ROUND(N$3*O8+O$3*N8+P$3,0)', true);
// Build the what-if analysis grid: discounts across the top, prices down the left.
sheet.setArray(5, 0, [
['Predict Table', null, 'Discount'],
[null, null, 0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35]
]);
// The top-left formula cell contains the result that SJS.TABLE will reevaluate.
sheet.setFormula(6, 1, '=B4');
sheet.setValue(7, 0, 'Price');
for (let i = 0; i < 34; i++) {
sheet.setValue(7 + i, 1, 150 + i * 10);
}
// Generate a two-variable data table.
sheet.setFormula(7, 2, '=SJS.TABLE(B7,C7:J7,B2,B8:B41,B1)');
spread.resumePaint();
결과 구조
C8에 입력된 수식은 34행 × 8열의 동적 배열로 확장됩니다.
이 크기는 다음에 의해 결정됩니다.
C7:J7 → 8개의 할인 값 (1 × 8)
B8:B41 → 34개의 가격 값 (34 × 1)
B7 → 단일 셀 결과 참조
result_reference가 단일 셀이므로 출력은 모든 입력 중 최대 행 및 열 차원에 맞게 확장됩니다.
생성된 그리드는 다음과 같습니다.
각 행은 하나의 가격 값에 대응합니다.
각 열은 하나의 할인 값에 대응합니다.
각 셀은 해당 조합에 대한 다시 계산된 Net Income을 나타냅니다.
Excel의 기존 데이터 표와 비교하여 SJS.TABLE은 다음과 같습니다.
편집 및 복사가 가능한 표준 워크시트 수식입니다.
결과 범위 내에서 행 및 열 삽입/삭제를 허용합니다.
두 개를 초과하는 입력 변수를 지원합니다.
배열 값, 이름 정의 범위 및 시트 간 참조를 허용합니다.
다른 수식 내부에 중첩할 수 있습니다.
SJS.TABLE은 비동기 함수와 함께 사용하는 것을 지원하지 않습니다. defaultValue 또는 setAsyncResult에 의존하는 비동기 함수와 함께 사용하면 결과를 예측할 수 없을 수 있습니다.
SJS.TABLE 평가 중에는 내부 셀 업데이트가 협업 동기화를 발생시키지 않고 수행됩니다. 계산이 완료되면 협업이 자동으로 재개됩니다.
waitForAllCalculations()은 모든 SJS.TABLE 시뮬레이션이 완료될 때까지 대기합니다.