你好@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
)
));
感谢您的帮助,
真挚地