좋은 아침이에요!! 나는 이것을 알아내려고 몇 주 동안 벽에 머리를 부딪혔지만 아이디어가 부족했습니다.
빌드 목록의 모든 프라임/대안을 다른 빌드 목록의 다른 모든 프라임/대체와 비교할 수 있는 그룹으로 그룹화하고 사용되는 프라임을 기반으로 다른 부품 번호에 대체를 추가하도록 권장하고 싶습니다.
첨부파일은 샘플파일입니다. 단순화를 위해 모든 Prime/Alternate 그룹이 동일한 숫자(예: 20 또는 40)로 시작하도록 만들었지만 마지막 숫자는 다릅니다. 부품 번호의 초기 그룹은 조립품 및 위치를 확인하여 구성할 수 있으며, 공통성이 있는 경우 다른 그룹에 그룹을 추가할 수 있습니다. 연관 배열을 사용하려고 했지만 이것이 올바른 접근 방식인지 잘 모르겠습니다.
제공할 수 있는 모든 도움에 미리 감사드립니다!
귀하의 의견에 감사드립니다!나는 동료와 문제를 공유했고 그는 대체 접근 방식, 즉 무차별 접근 방식에 더 가까운 접근 방식을 생각해 냈습니다.
제가 찾고 있는 작업을 수행하는 스크립트가 첨부되어 있습니다.기본적으로 테이블 자체를 조인하여 부품 번호를 그룹으로 가져온 다음 Assembly_location에서 다시 조인하여 모든 부품 번호를 가져옵니다.
앞뒤로 요약하고 전치한 후 결과는 그룹화 값으로 레이블이 지정된 단일 열에 모든 대체/프라임 그룹이 있는 목록입니다.
다시 한 번 감사드립니다!
브라이언
@SirBWhite 당신은 흥미로운 문제를 제기하고 있으며 이를 수행할 수 있는 우아한 방법이 있을 것으로 기대합니다. 짐의, @txnelson 's, 제안을 통해 버블 정렬과 유사성 유형 분석에 대해 생각하게 되었습니다.나는 이 작업을 쉽게 만들어 줄 몇 가지 텍스트 마이닝 솔루션과 텍스트 거리 측정법이 있을 것으로 기대합니다.
Jim과의 논의를 바탕으로 데이터를 재구성하겠습니다.
결과 테이블(아래 일부 표시)은 비교 가능한 어셈블리 선택을 극적으로 줄여줍니다.

다음은 이 테이블의 그래픽 그림입니다.

이를 수행하는 스크립트가 첨부되어 있습니다.내가 할 일은 다음과 같습니다.
- Type = PRM인 경우 2이고 Type= ALT인 경우 1인 Type Code라는 원래 열에 열을 추가합니다.
- 그런 다음 테이블(임시)을 분할하고 0으로 누락된 코드를 기록합니다.
- 나는 여전히 테이블을 정렬하겠지만 이것은 불필요하다.
부품 열이 이제 숫자 열이 되는 이 테이블은 클러스터 알고리즘과 최근접 이웃 알고리즘에 사용될 수 있습니다.
감사해요 @txnelson !나는 이 접근 방식을 좋아하지만 모든 어셈블리를 동일한 부품 번호로 만들 수는 없으며 수천 개의 어셈블리와 부품을 보는 것도 어려울 것입니다.아마도 예제를 너무 단순화하고 그 위에 매우 복잡한 설명을 추가한 것 같습니다.
나는 효과가 있을 것이라고 생각하는 접근법에 대해 어느 정도 진전을 이루었습니다.모든 조립 위치와 그에 따른 부품 번호에 대한 연관 배열을 동적으로 생성하는 방법을 알아낼 수 있었습니다.스크립트는 다음과 같습니다.
dt=Data Table( "Example" );
//Combine columns to get a single unique identifer for each row
dt << Combine Columns(
delimiter( "_" ),
Columns( :Assembly, :Location ),
Selected Columns are Indicator Columns( 0 ),
Column Name( "Assembly_Location" )
);
//Creates columns for each Assembly_Location - Grouping Like Part numbers together
dt1=dt << Split(
Split By( :Assembly_Location ),
Split( :Part Number ),
Remaining Columns( Drop All ),
Sort by Column Property, <BR /> Table Name ("Transposed Example")
);
//Get all column names as a list
allnames=dt1<<GET column="" names=""></GET>//Create an associative array for every column with the column name used as the array name
for (i = 1, i <= nitems(allnames), i++,
<BR />// If it's a string column then create the column name and an array name for use as a dynamic input
if (is string(allnames[i]),
col_name = "dt1:Name(\!"" || allnames[i]||"\!")" ;
array_name = "aa" || allnames[i];
// Build associative array string dynamically and then execute it.
str = evalinsert(
"\[^array_name^=Associative Array (^col_name^) ;]\");
eval(parse(str));
);
);
aaKBR175_001;<BR />aaKBR175_002;<BR />aaKBR175_003;
이제 각 배열을 다른 배열과 비교하여 겹치는 부분이 있는지 확인하고 싶습니다.있다면 배열을 결합하고 싶습니다. 예를 들어 KBR175-001을 보면 (20-0002, 20-0003, 20-0004, 20-0005), TRT330-003 (20-0002, 20-0003, 20-0004), NTE484-001 (20-0002, 20-0003, 20-0005 , 20-0007), KNW995-002 (20-0002, 20-0003, 20-0004, 20-0005). 결과는 다음과 같습니다(20-0002, 20-0003, 20-0004, 20-0005, 20-0007).
교차 연산을 사용할 수 있다고 생각했는데, 그러면 첫 번째 배열이 교차 결과로 대체됩니다.
//Creates an Associative Array for each two columns
aa1=Associative Array (dt1:Name("KBR175_001") );
aa3=Associative Array (dt1:Name("NTE484_001") );
//Looks for overlap<BR />aa1 << intersect ( aa3 );
Show(N Items(aa1));
//If there is overlap, it combines the two Arrays into one, otherwise it returns "no"
if (N Items (aa1)>0, aa1<< Insert( aa3 ), Show("no"));하지만 이것은 aa1과 aa3 더하기 aa3 또는 {"20-0002", "20-0003", "20-0005", "20-0007"}의 교차점만 제공합니다. 원래는 "20-0004"를 제외했습니다. aa1의 일부입니다.
내 질문은 두 부분으로 구성됩니다.
1. 배열을 비교한 다음 두 배열을 결합하여 모든 키를 포함하는 방법이 있습니까?
2. 모든 어레이를 다른 모든 어레이와 어떻게 비교합니까? 나는 일종의 For 루프를 가정합니다.
특정 부품 번호에 사용되지 않은 어셈블리를 볼 수 있는 이와 같은 것을 원하십니까?

설명이 혼란스러워서 죄송합니다. 이것이 조금 명확해지기를 바랍니다. 마지막에는 다음 그룹 {"20-0002", "20-0003", "20-0004", "20-0005", "20-"을 보고 싶습니다. 0007”} 다른 모든 어셈블리와 비교할 수 있습니다. 예를 들어, 20-0007 부품 번호는 KBR175, TRT330 또는 KNW995에서 호출되지 않으며 이를 대안으로 권장하고 싶습니다.
당신의 설명은 나에게 혼란 스럽습니다.기대하는 결과의 작은 샘플을 제공할 수 있습니까?