안녕 @hcarr01 ,
귀하의 요청을 올바르게 이해했는지 잘 모르겠지만 다음 스크립트는 어떻습니까?
Names Default To Here( 1 );
dt = Current Data Table();
dur_cols = Filter Each( {col_name}, dt << Get Column Names( "String", Continuous ),
Starts With( col_name, "durée" )
);
// for indexing later
num_colnr = Transform Each( {col_name}, dur_cols, Word( -1, col_name ) );
// Add : Matrix of the index
num_colnr_mt = Matrix( Transform Each( {col_name}, dur_cols, Num( Word( -1, col_name ) ) ) )`;
dt << New Column( "DUREE ETAPE1",
Numeric,
Continuous,
Format( ":jou:hh:m", 8 ),
<<SET each="" value=""> :"opé"n & (num_colnr < 2100 ) );
colidx = Loc( dt[Row(), num_colnr] >= :"opé"n & (num_colnr_mt < 2100) ); // Changed
If( N Items( colidx ) > 0,
val = Sum( dt[Row(), dur_cols[colidx]] );
If( Is Missing( val ),
0,
val
);
,
0
);
,
0
)
)
);
</SET>
다음 코드를 계산하려면 행렬을 사용해야 합니다.
"num_colnr < 2100"
도움이 되길 바랍니다.
도움을 주셔서 감사합니다. 코드는 올바르게 작동하지만 문제가 있습니다.
목표는 T < 2100이 되도록 변수 T의 숫자를 사용하지 않는 것입니다. 각 객체에 대해 이 숫자는 서로 다른 해당 연산을 갖기 때문입니다.
각 개체에 대해 숫자 2100(변수 T에서)에 해당하는 작업을 찾는 할당을 수행해야 합니다.
각 줄에 대해 다음과 같습니다.
현재 연산이 숫자 2100에 해당하는 연산보다 작거나 같으면 숫자 2100에 해당하는 연산으로 합산합니다.
첫 번째 줄의 예:
작업 진행 중: 55
2100번 -> 62번에 해당하는 연산
따라서 작업 55에 해당하는 숫자의 합을 1500으로 만드십시오.
따라서 "단계 기간" = "기간 1500" = 30
숫자가 반드시 오름차순으로 정렬되는 것은 아닙니다.
안녕 @hcarr01 ,
당신의 응답을 주셔서 감사합니다.내 이해를 확인할 수 있습니까?
두 번째 줄의 예:
진행 중인 작업: 60("opé" 열의 숫자)
숫자 2100 -> 62에 해당하는 작업(변수 T 및 opé에서)
따라서 작업 60에 해당하는 숫자의 합을 1749로 만듭니다(열 1500, 1749, 2100 또는 2500에서 숫자 60 찾기).
따라서 "단계 기간" = "Durée 1749" = 45
세 번째 행의 예:
진행 중인 작업: 62("opé" 열의 숫자)
숫자 2100 -> 62에 해당하는 연산
따라서 작업 62에 해당하는 숫자의 합을 2100으로 만드십시오.
따라서 "단계 기간" = 0입니다(현재 작업이 숫자 2100에 해당하는 작업보다 크거나 같기 때문).
귀하의 질문에서 귀하는 다음과 같이 설명했습니다.
"1단계는 숫자 2100에 해당하지만, 이 숫자는 개체에 따라 해당 동작이 다를 수 있습니다(예: 개체 1 --> 숫자 2100 / 연산 62, 개체 5 --> 숫자 2100 / 연산 74)".
개체 5는 어떻게 생겼습니까? 예를 들어 주시겠습니까?
내 이해가 정확하지 않으면 알려주십시오.
네 추론이 맞습니다!
객체 5는 우리가 연구하고 있는 객체를 나타내며, 다른 객체에 따라 작업과 숫자는 서로 다른 대응 관계를 갖습니다.
이 코드가 작동할 수 있다고 생각합니다.
dt = Current Data Table();<BR />
dur_cols = Filter Each( {col_name}, dt << Get Column Names( "String", Continuous ),
Starts With( col_name, "durée" )
);
num_opé = Filter Each( {col_name}, dt << Get Column Names( "String", Continuous ),
Starts With( col_name, "opé" )
);
// for indexing later
num_colnr = Transform Each( {col_name}, dur_cols, Word( -1, col_name ) );
// Add : Matrix of the index
num_colnr_mt = Matrix( Transform Each( {col_name}, dur_cols, Num( Word( -1, col_name ) ) ) )`;<BR />
dt << New Column( "DUREE",<BR />Numeric,<BR />Continuous,<BR />Format( ":jou:hh:m", 8 ),<BR /><<SET each="" value=""></SET>If( dt[Row(), num_opé ] < :"2100"n,<BR />//colidx = Loc(dt[Row(), num_colnr] > :"opé"n & (num_colnr < 2100 ) );<BR />colidx = Loc( dt[Row(), num_colnr] >= :"opé"n & (dt[Row(), num_colnr] < :"2100"n) ); // Changed<BR />If( N Items( colidx ) > 0,<BR />val = Sum( dt[Row(), dur_cols[colidx]] );<BR />If( Is Missing( val ),<BR />0,<BR />val<BR />);<BR />,<BR />0<BR />);<BR />,<BR />0<BR />)<BR />)<BR />);<BR />
여러분, 안녕하세요,
내 데이터베이스의 여러 열에 대해 수식을 작성하려고 합니다. 이해하기 쉽지 않습니다. 예를 사용하여 목표를 설명하겠습니다.

1단계는 숫자 2100에 해당하지만 이 숫자는 객체에 따라 해당 동작이 다를 수 있습니다. (예: 객체 1 --> 숫자 2100 / 연산 62, 객체 5 --> 숫자 2100 / 연산 74)
1단계: 숫자 2100에 해당
회색 부분:
여기에는 4가지 유형의 객체(ENT1,..,ENT4)가 있습니다. 각 객체는 진행 번호(T열)와 연관되어 있으며, 이 번호는 잘 정의된 작업과 연결되어 있습니다.
노란색 부분:
이 셀은 각 개체가 겪게 될 "번호"를 표시하고 이 번호를 작업과 연결합니다. 셀이 비어 있으면 개체가 이 작업을 수행하지 않는다는 의미입니다.
목표는 다음과 같습니다.
- 개체가 진행되었다는 것을 알고 1단계까지의 기간을 추가합니다(예: ENT2 개체는 번호 1749에 있으므로 1500년 이전에 수행한 작업은 우리에게 관심이 없습니다). 따라서 1단계까지의 기간은 단지 기간입니다. 단계 1749이므로 기간 = 45
저는 다음 코드로 시작했습니다.
Names Default To Here( 1 );
dt = Current Data Table();
dur_cols = Filter Each({col_name}, dt << Get Column Names("String", Continuous),
Starts With(col_name, "durée"));
// for indexing later
num_colnr = Transform Each({col_name}, dur_cols,Word(-1, col_name));
dt << New Column("DUREE ETAPE1", Numeric, Continuous, Format(":jou:hh:m",8), << Set Each Value(
If( :"T"n < 2100 ,
colidx = Loc(dt[Row(), num_colnr] > :"opé"n & (num_colnr < 2100 ) );
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
,
0
)
));
당신의 도움을 주셔서 감사합니다,
감사합니다