やあ@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 の数値を使用しないことです。
各オブジェクトに対して、(変数 T 内の) 数値 2100 に対応する操作を求める割り当てを行う必要があります。
各行は次のようになります。
現在の操作が番号 2100 に対応する操作以下の場合、合計は番号 2100 に対応する操作となります。
最初の行の例:
進行中の操作: 55
番号 2100 -> 62 に対応する操作
したがって、演算 55 に対応する数値の合計は 1500 になります。
したがって、「ステップ期間」 = 「期間 1500」 = 30
ただし、番号は必ずしも昇順に並んでいるわけではありません。
やあ@hcarr01 、
ご返答ありがとうございます。自分の理解度を確認できますか?
2 行目の例:
進行中の操作: 60 (「opé」列の数値)
数値 2100 -> 62 に対応する演算 (変数 T および opé 内)
したがって、演算 60 に対応する数値の合計を求め、数値 1749 となります (列 1500、1749、2100、または 2500 で数値 60 を見つけます)。
したがって、「ステップの継続時間」 = 「デュレ 1749」 = 45
3行目の例:
進行中の操作: 62 (「操作」列の数字)
数値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)
STEP1: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
)
));
ご協力いただきありがとうございます、
心から