你好@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>
如果要計算下面的代碼,需要用到matrix。
"num_colnr < 2100"
我希望它有所幫助。
感謝您的幫助,代碼運行正常,但有問題。
目標不是使用變量 T 的數字使得 T < 2100,因為對於每個對象,這個數字都有不同的對應操作。
有必要對每個對象進行賦值,我們在其中尋找對應於數字 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
)
));
感謝您的幫助,
真摯地