你好
我有一张不同 ID 的处理步骤和处理时间的表。 但是,我的某些流程步骤在每个 ID 的流程中发生多次。 我想创建一个专栏,将所有流程步骤分为“合成”或“处理”。 这些组将根据它们是否发生在另一个处理步骤之前或之后来确定。
我希望公式能够找到每个 ID 的生成步骤时间,并将其与该 ID 的所有其他流程步骤时间进行比较。
我试图使用某种循环,但我是脚本编写新手,循环非常令人困惑!
有什么办法可以做到这一点吗???
例如,我的内容如下所示,我想添加“类别”列。
| ID | 工艺步骤 | 处理时间 | 类别 |
| 10 | 烘干 | 9:00 | 合成 |
| 10 | 生成 | 9:30 | 合成 |
| 10 | 烘干 | 10:00 | 加工 |
| 10 | 完成的 | 11:00 | 加工 |
| 11 | 烘干 | 2:00 | 合成 |
| 11 | 生成 | 2:30 | 合成 |
| 11 | 烘干 | 2:45 | 加工 |
| 11 | 完成的 | 4:00 | 加工 |
| 12 | 烘干 | 7:30 | 合成 |
| 12 | 生成 | 7:45 | 合成 |
| 12 | 烘干 | 8:00 | 加工 |
| 12 | 完成的 | 9:00 | 加工 |
有任何想法吗??
谢谢你!
这个脚本似乎就是你想要的。 如果您愿意,可以将其转换为公式
Names Default To Here( 1 );
dt = New Table( "Untitled 13",
Add Rows( 12 ),
New Column( "ID",
Character,
"Nominal",
Set Values( {"10", "10", "10", "10", "11", "11", "11", "11", "12", "12", "12", "12"} )
),
New Column( "Process Step",
Character( 16 ),
"Nominal",
Set Values(
{"Drying", "Spawned", "Drying", "Finished", "Drying", "Spawned", "Drying", "Finished", "Drying", "Spawned", "Drying",
"Finished"}
)
),
New Column( "Process Time",
Numeric,
"Nominal",
Format( "h:m", 12 ),
Input Format( "h:m" ),
Set Values( [32400, 34200, 36000, 39600, 7200, 9000, 9900, 14400, 27000, 27900, 28800, 32400] )
)
);
dt << New Column( "Category", Character );
For( i = 1, i <= N Rows( dt ), i++,
currID = dt:id[i];
If( i == 1,
spawnTime = dt:Process Time[(dt << get rows where( dt:id == currID & dt:Process Step == "Spawned" ))[1]]
);
If( i > 1,
If( dt:ID[i] != dt:ID[i - 1],
spawnTime = dt:Process Time[(dt << get rows where( dt:id == currID & dt:Process Step == "Spawned" ))[1]]
)
);
If( dt:Process Time[i] <= spawnTime,
dt:Category[i] = "Synthesis",
dt:Category[i] = "Processing";
);
);
该脚本假定数据按 ID 排序。 但是,如果为每个数据循环重新计算生成时间,则不必对表进行排序。 它会减慢脚本速度,计算每个循环的 SpawnTime,但这可能是您想要做出的权衡。