0

여러 값 (송장 번호, 날짜, 위치) 및 여러 값 (제품, 가격, 세금)이 포함 된 알 수없는 금액의 송장 헤더가있는 경우 방법이 있습니까 인보이스의 수량이 인보이스에 따라 다른 경우이 데이터를 하나의 행으로 전개 할 수 있습니까?인보이스 헤더가 주전자로 병합 된


입력 예 -

내가 같은 행에있는 모든 항목이 필요합니다
{"InvoiceRecords": [{ 
    "InvoiceDate": "8/9/2017 12:00:00 AM", 
    "InvoiceLocation": "002", 
    "InvoiceNumber": "2004085", 
    "InvoiceRecordHeaderDetails": [{ 
     "InvNum": "2004085", 
     "Location": "002", 
     "InvDate": "8/9/2017 12:00:00 AM" 
    }], 
    "InvoiceRecordLineItemDetails": [{ 
     "UniqueID": "3939934", 
     "InvNum": "2004085", 
     "LINEITEM": "1", 
     "CUSTID": "PREAA", 
     "DEPTID": "320306", 
     "PRODID": "088856", 
     "ProdDesc": "STATE UST", 
     "Unitprice": "0.003", 
     "QuantShare": "237.5", 
     "TaxRate": "7.25", 
     "taxamount": "0.05" 
    }], 
    "InvoiceTaxCodeDetails": [{ 
     "InvNum": "2004085", 
     "LineItem": "1", 
     "UniqueID": "34", 
     "taxCode": "SALES TAX", 
     "taxrate": "7.25", 
     "maxtax": "0" 
    }] 
}]} 

는 (두 개 이상의 개별 항목 및/또는 특정 송장에 둘 이상의 세금 코드 항목이있을 허용 . 기록


출력 예 (참고 : 송장 라인과 세금 행 수의 불확 실한 양을 참조하여 아래 "_n") :

{"InvoiceRecords": [{ 
    "InvoiceDate": "8/9/2017 12:00:00 AM", 
    "InvoiceLocation": "002", 
    "InvoiceNumber": "2004085", 
    "InvoiceRecordHeaderDetailsInvNum": "2004085", 
    "InvoiceRecordHeaderDetailsInvNumLocation": "002", 
    "InvoiceRecordHeaderDetailsInvNumInvDate": "8/9/2017 12:00:00 AM", 
    "InvoiceRecordLineItemDetailsUniqueID_1": "3939934", 
    "InvoiceRecordLineItemDetailsInvNum_1": "2004085", 
    "InvoiceRecordLineItemDetailsLINEITEM_1": "1", 
    "InvoiceRecordLineItemDetailsCUSTID_1": "PREAA", 
    "InvoiceRecordLineItemDetailsDEPTID_1": "320306", 
    "InvoiceRecordLineItemDetailsPRODID_1": "088856", 
    "InvoiceRecordLineItemDetailsProdDesc_1": "STATE UST", 
    "InvoiceRecordLineItemDetailsUnitprice_1": "0.003", 
    "InvoiceRecordLineItemDetailsQuantShare_1": "237.5", 
    "InvoiceRecordLineItemDetailsTaxRate_1": "7.25", 
    "InvoiceRecordLineItemDetailstaxamount_1": "0.05", 
    "InvoiceTaxCodeDetailsInvNum_1": "2004085", 
    "InvoiceTaxCodeDetailsLineItem_1": "1", 
    "InvoiceTaxCodeDetailsUniqueID_1": "34", 
    "InvoiceTaxCodeDetailstaxCode_1": "SALES TAX", 
    "InvoiceTaxCodeDetailstaxrate_1": "7.25", 
    "InvoiceTaxCodeDetailsmaxtax_1": "0", 
    "InvoiceRecordLineItemDetailsUniqueID_n": "3939934", 
    "InvoiceRecordLineItemDetailsInvNum_n": "2004085", 
    "InvoiceRecordLineItemDetailsLINEITEM_n": "1", 
    "InvoiceRecordLineItemDetailsCUSTID_n": "PREAA", 
    "InvoiceRecordLineItemDetailsDEPTID_n": "320306", 
    "InvoiceRecordLineItemDetailsPRODID_n": "088856", 
    "InvoiceRecordLineItemDetailsProdDesc_n": "STATE UST", 
    "InvoiceRecordLineItemDetailsUnitprice_n": "0.003", 
    "InvoiceRecordLineItemDetailsQuantShare_n": "237.5", 
    "InvoiceRecordLineItemDetailsTaxRate_n": "7.25", 
    "InvoiceRecordLineItemDetailstaxamount_n": "0.05", 
    "InvoiceTaxCodeDetailsInvNum_n": "2004085", 
    "InvoiceTaxCodeDetailsLineItem_n": "1", 
    "InvoiceTaxCodeDetailsUniqueID_n": "34", 
    "InvoiceTaxCodeDetailstaxCode_n": "SALES TAX", 
    "InvoiceTaxCodeDetailstaxrate_n": "7.25", 
    "InvoiceTaxCodeDetailsmaxtax_n": "0" 
}]} 

고마워요!

+0

세 줄의 예가 가장 환영받을 것입니다! – AlainD

+0

물론 있습니다. 문제는 데이터의 모양에 따라 많은 것들이 있다는 것입니다. 입력에는 한 행 뒤에 임의의 수의 행이옵니다. 그리고 출력을 위해 인보이스 당 한 행을 원합니다. 어떤 유형의 데이터에서 lineitem 데이터를 원하십니까? 문자열? 배열? XML? JSON? – AlainD

+0

@ AlainD, 예를 게시했습니다. 감사! – jag959

답변

0

samples 디렉토리에 spoon.bat와 비슷한 질문이 있습니다. samples/transformation/XML Add을보고 첫 번째 choc에서 살아 남으십시오. 가능한 모든 것을 보여주기 위해 훨씬 복잡한 작업을 수행합니다.

귀하의 경우에는 Switch/Case으로 분할하고 헤더, 항목의 입력 스트림을 관리하고 각각에 InvoiceNumber를 유지 관리해야합니다 (자세한 내용은 나중에 설명). 3 스트림을 JSON으로 변환 (JSON 출력 또는 Javascript). 그런 다음 InvoiceNumber별로 항목을 Group by 있습니다. InvoiceNumber에 의해 세 가지 흐름을 결합하십시오. 헤더 스트림에 lookup stream을 제안한 다음 바닥 글 스트림에 다른 lookup stream을 제안합니다. javascript을 사용하고 데이터를 문자열로 처리하면 {header, [item], footer} 형식으로 JSON 행을 만들 수 있습니다. Group by의 경우 한 행만 연결될 수 있습니다.

흐름에서 사라진 항목과 바닥 글에 대한 InvoiceNumber를 얻는 것의 까다로운 부분을 제외하고 일부 작업이지만 오히려 표준입니다. 이를 위해 javascript은 다시 정의되지 않는 한 값을 보존한다는 사실을 사용할 수 있습니다. 새 시작 스크립트를 추가합니다. [탭 상단의 Script1을 마우스 오른쪽 단추로 클릭하고 복사본을 추가 한 다음 방금 생성 한 Script1_0을 마우스 오른쪽 단추로 클릭하고 [시작 스크립트]로 정의하십시오. 그런 다음

if(InvoiceNumber && PrevInvoiceNumber!=InvoiceNumber) 
    PrevInvoiceNumber = InvoiceNumber 

는 각 송장의 예상 INVOICENUMBER로 동일한 PrevInvoiceNumber 줄에와 데이터를 볼 수 : 주요 스크립트에

var PrevInvoiceNumber = -1; 

이 시작 스크립트에

. enter image description here

+0

생각합니다. 잘못된 질문에 대한 올바른 대답입니다. 그리고 나는 당신이 질문을 바로 잡는 답을 정정하는 것을 선호한다고 생각합니다. 그러나 내 시간이 지났 으면 내일 기다려야 할 것입니다. 기본적으로 3 개의 JSON 입력 (헤더, 항목, 꼬리말)을 사용하여 데이터를 읽고 InvoiceNr (JSON 입력에서 가능)을 유지한다는 점을 제외하고는 동일합니다. 시퀀스 번호로 _n을 생성하고, key : value 쌍을 만들고, 필드를 행으로 분할하고, 정렬하고, 단일 출력으로 그룹화합니다. – AlainD