다음은 샘플입니다. 델타 열은 내가 달성하려고 하는 것입니다. 부품 번호는 카테고리입니다.
| 부분# | 데이터 | 델타 |
| 1 | 4 | 4 - 4 |
| 2 | 5 | 5 - 5 |
| 삼 | 6 | 6 - 6 |
| 1 | 7 | 4 - 7 |
| 2 | 8 | 5 - 8 |
| 삼 | 9 | 6 - 9 |
| 1 | 10 | 7 - 10 |
| 2 | 11 | 8 - 11 |
| 삼 | 12 | 9 - 12 |
내가하는 방법은 다음과 같습니다.
Names Default To Here( 1 );
// Create the sample data table
dt = New Table( "Example",
Add Rows( 9 ),
New Column( "Part#", Character, "Nominal", Set Values( {"1", "2", "3", "1", "2", "3", "1", "2", "3"} ) ),
New Column( "Data",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [0, 0, 0, 9, 23, 45, 1, 34, 56] )
),
New Column( "Delta Pattern",
Character,
"Nominal",
Set Values( {"0 - 0", "0 - 0", "0 - 0", "0 - 9", "0 - 23", "0 - 45", "9 - 1", "23 - 34", "45 - 56"} )
)
);
// Add a new column to provide a path back to the original order
dt << New Column( "RowNum", formula( Row() ) );
// Delete the formula, so the values become static rather than calculated
dt:RowNum << delete formula;
// Sort the data by Part# and Row
dt << sort( by( Part#, :RowNum ), replace table( 1 ) );
// Create the new column with the delta values, which is pretty simple with all of
// the data sorted by Part#
dt << New Column( "Delta", formula( If( Lag( :Part# ) != Part#, 0, Lag( :Data ) - :Data ) ) );
// Delete formula so the values become static
dt:Delta << delete formula;
// Sort back into the original order
dt << sort( by( :RowNum ), replace table( 1 ) );
// Delete the Rownum column since it is no longer needed
dt << delete columns( "RowNum" );
다른 방법도 있지만 계산 속도가 느릴 수 있습니다.
안녕 짐,
신속한 응답에 감사드립니다.
이것은 행 번호가 빼기 위해 데이터 열의 값과 일치하는 경우에 작동합니다. 데이터 열에 임의의 값이 있고 빼기 위해 데이터 열의 원시 값을 고려하려는 경우 어떻게 합니까?
열 수식으로
If( Row() <= 3, :Data, :Data - Row() );
스크립트에서
For Each Row(
If( Row() <= 3, :Delta = :Data, :Delta = :Data - Row() );
);