참조 파일보다 작거나 같은 날짜에 따라 테이블을 업데이트합니다.안녕하세요 여러분,
dtA가 원본 파일이고 dtB가 참조 파일인 2개의 테이블이 있습니다. 내가 원했던 것은 참조 파일보다 작거나 같은 날짜에 따라 dtA를 업데이트하는 것입니다.
예를 들어,
테이블 dtA
| 날짜 | 모델 | 수량 |
| 2023년 6월 24일 | ㅏ | 23 |
| 2023년 6월 30일 | ㅏ | 25 |
| 2023년 7월 1일 | ㅏ | 34 |
| 2023년 7월 5일 | ㅏ | 50 |
테이블 dtB
| 날짜 | 모델 | 참조 |
| 2023년 6월 1일 | ㅏ | 100 |
| 2023년 7월 1일 | ㅏ | 150 |
dtA를 업데이트한 후 테이블은 다음과 같아야 합니다.
| 날짜 | 모델 | 수량 | 참조 |
| 2023년 6월 24일 | ㅏ | 23 | 100 |
| 2023년 6월 30일 | ㅏ | 25 | 100 |
| 2023년 7월 1일 | ㅏ | 34 | 150 |
| 2023년 7월 5일 | ㅏ | 50 | |
이것이 가능한가? 도와주세요
자동화 및 스크립팅Re: 참조 파일보다 작거나 같은 날짜에 따라 테이블을 업데이트합니다.다음은 작동하는 스크립트입니다.테이블이 아주 크게 베팅된다면 그다지 효율적이지 않을 것입니다.
2개의 데이터 테이블이 주어지면 스크립트가 업데이트를 제공합니다.

행 4에는 업데이트 값이 있지만 테이블에는 업데이트 값이 없습니다.귀하의 요구 사항을 잘못 해석하지 않는 한 마지막 행에는 선택 기준을 충족하는 참조 테이블의 값이 있습니다.
Names Default To Here( 1 );
New Table( "Original",
Add Rows( 4 ),
New Column( "Date",
Format( "m/d/y", 10 ),
Input Format( "m/d/y" ),
Set Values( [3770409600, 3770928000, 3771014400, 3771360000] )
),
New Column( "Model", Character( 16 ), Set Values( {"A", "A", "A", "A"} ) ),
New Column( "Qty", Set Values( [23, 25, 34, 50] ) )
);
New Table( "Reference",
Add Rows( 2 ),
New Column( "Date",
Numeric,
"Continuous",
Format( "m/d/y", 10 ),
Input Format( "m/d/y" ),
Set Values( [3768422400, 3771014400] )
),
New Column( "Model", Character( 16 ), Set Values( {"A", "A"} ) ),
New Column( "Ref", Set Values( [100, 150] ) )
);
// This is the code that does the actual update
dtA = Data Table( "Original" );
dtB = Data Table( "Reference" );
dtA << New Column( "Ref" );
For Each( {row}, Index( 1, N Rows( dtA ) ),
dtA:Ref[row] = dtB:ref[Max(
dtB << get rows where( dtB:date <= dtA:date[row] )
)]
);Re: 참조 파일보다 작거나 같은 날짜에 따라 테이블을 업데이트합니다.이를 수행하는 방법은 거의 없지만 JMP는 (적어도 아직) 그러한 조인을 직접 제공하지 않습니다.
먼저 원래 테이블(비어 있음)에 대한 Ref를 생성할 수 있습니다(JMP에서는 연결 시 누락된 열을 추가하므로 이 단계는 불필요할 가능성이 높습니다).

테이블 연결

그룹 및 시간별로 정렬합니다. Ref 열의 모든 값을 선택하고 마우스 오른쪽 버튼을 클릭하여 누락 채우기를 선택합니다.

QTY가 누락된 모든 행을 선택하고 삭제하세요.


커뮤니티에 이 가입을 수행할 수 있는 몇 가지 추가 기능(및 스크립트)도 있습니다. 또한 JMP 내에서 SQL을 사용할 수도 있습니다.
Re: 참조 파일보다 작거나 같은 날짜에 따라 테이블을 업데이트합니다.안녕하세요 txnelson, 다음과 같은 오류가 발생합니다.

Re: 참조 파일보다 작거나 같은 날짜에 따라 테이블을 업데이트합니다.16보다 오래된 JMP 버전을 실행하고 있을 가능성이 높습니다(For Each는 JMP16에 추가됨). 상당히 쉽게 수정하고 For 루프로 변경할 수 있습니다.
Re: 참조 파일보다 작거나 같은 날짜에 따라 테이블을 업데이트합니다.지원하지 않는 JMP 버전이 있는 것 같습니다.
For Each()
따라서 For Each 섹션을 다음으로 변경하면
For(row=1, row<= N Rows( dtA ), row++,
dtA:Ref[row] = dtB:ref[Max(
dtB << get rows where( dtB:date <= dtA:date[row] )
)]
);
작동해야합니다.
Re: 참조 파일보다 작거나 같은 날짜에 따라 테이블을 업데이트합니다.현재 스크립트는 잘 작동하고 있지만 마지막 질문이 있습니다. 테이블이 매일 업데이트되므로 업데이트를 특정 날짜로 제한할 수 있는 방법이 있습니까? 예를 들어,
테이블 dtA
| 날짜 | 모델 | 수량 |
| 2023년 6월 24일 | ㅏ | 23 |
| 2023년 6월 30일 | ㅏ | 25 |
| 2023년 7월 1일 | ㅏ | 34 |
| 2023년 7월 5일 | ㅏ | 50 |
| 2023년 7월 10일 | ㅏ | 65 |
| 2023년 7월 27일 | ㅏ | 68 |
테이블 dtB
| 날짜 | 모델 | 참조 |
| 2023년 6월 1일 | ㅏ | 100 |
| 2023년 7월 1일 | ㅏ | 150 |
| 2023년 7월 20일 | ㅏ | 300 |
| 2023년 8월 1일 | ㅏ | 250 |
dtA를 업데이트한 후 테이블은 다음과 같아야 합니다.
| 날짜 | 모델 | 수량 | 참조 |
| 2023년 6월 24일 | ㅏ | 23 | 100 |
| 2023년 6월 30일 | ㅏ | 25 | 100 |
| 2023년 7월 1일 | ㅏ | 34 | 150 |
| 2023년 7월 5일 | ㅏ | 50 | 300 |
| 2023년 7월 10일 | ㅏ | 65 | 300 |
| 2023년 7월 27일 | ㅏ | 65 | 250 |
스크립트를 사용해 보았지만 과거 날짜 Ref 값을 최신 값인 250으로 덮어씁니다. 다음과 같습니다
| 날짜 | 모델 | 수량 | 참조 |
| 2023년 6월 24일 | ㅏ | 23 | 250 |
| 2023년 6월 30일 | ㅏ | 25 | 250 |
| 2023년 7월 1일 | ㅏ | 34 | 250 |
| 2023년 7월 5일 | ㅏ | 50 | 250 |
| 2023년 7월 10일 | ㅏ | 65 | 250 |
| 2023년 7월 27일 | ㅏ | 65 | 250 |
Re: 참조 파일보다 작거나 같은 날짜에 따라 테이블을 업데이트합니다.스크립트 도움말과 관련된 토론 커뮤니티의 목적은 주문형 스크립트 생성 소스가 되는 것이 아닙니다.개인이 개발 중인 스크립트와 관련된 문제를 해결하고 자신의 스크립트를 향상시키는 능력을 향상시키는 데 도움이 됩니다.
아직 시간을 내어 스크립팅 가이드를 읽어보지 않으셨다면 읽어보시길 적극 권장합니다.여기서는 스크립팅 언어의 세부 사항을 보여주고 JSL이 실제로 사용할 수 있는 모든 것을 처리할 수 있는 완전한 스크립팅 언어라는 것을 알 수 있습니다.그러나 현재 질문과 관련하여 조건부 "IF()" 문을 쉽게 배치하여 업데이트를 실행할지 또는 실행하지 않을지 정의할 수 있습니다.아래는 그러한 예이다.
For( row = 1, row <= N Rows( dtA ), row++,
If( dtb:Date == Today(),
If( dtA:date[row] <= Col Max( dtB:date ),
dtA:Ref[row] = dtB:ref[Max(
dtB << get rows where( dtB:date <= dtA:date[row] )
)],
dtA:Ref[row] = .
)
)
);