基于其他列的分组创建新列大家好,
我正在尝试创建一个新列“Status”,它将根据以下规范返回“Active”或“Replaced”(附有“Status”列的表格部分作为预期结果的说明)。
每个 TOOL 和 Site 都可以在一段时间内替换不同的 Sub_Tool,并使用其时间戳运行多个单元。 特定工具和站点的最新 Sub_Tool 应该在状态栏上收到 Active,所有以前用于该工具和站点的 Sub_Tool 应该收到 Replaced。
正如附加的示例一样,相同的 Sub_Tool 可能会随着时间的推移重复出现,但只有在最后一次运行时才应标记为活动。
真实文件有很多工具,每个工具都有很多站点,因此需要强大的编码。
非常感谢您的帮助。
回复:根据其他列的分组创建新列感谢您提供更完整的测试文件以及您对我的初始代码的测试。
这是格式的新版本
If( Row() > 1,
If( :TOOL != Lag( :TOOL ) | :SITE != Lag( :SITE ) | Row() == N Rows( Current Data Table() ),
TargetValue = :SUB_TOOL[Row() - 1];
:Active2[Row() - 1] = "Active";
For( i = Row() - 1, i >= 1, i--,
If( :SUB_TOOL[i] == TargetValue,
:Active2[i] = "Active",
Break()
)
);
)
);
If( Row() == N Rows( Current Data Table() ),
"Active",
"Replaced"
);
您需要将“Active2”代码中的列引用更改为您为该列提供的列名。
现在我要问你的问题是:
您了解公式的工作原理吗?
如果没有,您需要研究代码并提出有关代码的问题,以便理解它,并可以在将来进行必要的更改。
回复:根据其他列的分组创建新列感谢您花时间解决此问题,建议的脚本会对创建的列 Sub_Tool_Status 产生以下错误意图:
1. 最近的行值产生替换(附加文件第 91 行标记为黄色)
2.最近一行是空的(附件最后一行)
2.何时进行多次替换,只有替换前的最后一行产生替换,并且不会更新前面的行(附件中标有两个绿色阴影的文件)
回复:根据其他列的分组创建新列这是可能计算新列的几种方法之一。只需创建一个新的字符列,将以下公式粘贴到新列中,然后将对“Active2”的引用更改为您创建的新列的名称。
If( Row() > 1,
If( :TOOL != Lag( :TOOL ) | :Site != Lag( :Site ) | Row() == N Rows( Current Data Table() ),
TargetValue = :Sub_Tool[Row() - 1];
:Active2[Row() - 1] = "Active";
For( i = Row() - 2, i >= 1, i--,
If( :Sub_Tool[i] == TargetValue,
:Active2[i] = "Active",
:Active2[i] = "Replaced";
Break();
)
);
)
);
If( Row() == N Rows( Current Data Table() ),
"Active",
"Replaced"
);
回复:根据其他列的分组创建新列你好,
原始表将有许多其他列,我将在这些列上使用 Sub_Tool 计算统计信息,因此不仅最后一行需要标记为 Acitve,而且最新的 Sub_Tool 运行的整个批次都需要标记为 Acitve。 是的,我需要找出最后一个 SubTool 用于工具和站点的内容,然后将所有行标记为活动回到 SubTool 更改时。
回复:根据其他列的分组创建新列根据我对您的定义的阅读,我可以想出第 36 行被视为活动,但除了看到第 28 行到第 35 行具有保存 SubTool 值外,我不明白为什么这些行应标记为活动。
或者,您想要做的是找出最后一个 SubTool 用于工具和站点的简单问题,然后将所有行标记为活动回到 SubTool 更改时?????
我很困惑