大家好,
我对使用更强大的统计软件非常陌生,并且正在慢慢学习诀窍。 我擅长实施反馈,但不太擅长自己的研究。
我使用电池工作。 我们收集大量数据,并根据我们想要了解的内容使用不同的测试。 生成的数据本质上是周期性的,因为我们对电池充电、休息、放电,然后再次休息。 这些称为步骤。
在一次测试中(我称之为运行),我们可能在一种状态下有几个周期,然后在另一种状态下有几个周期。 因此,对我来说,能够跟踪响应(电流、电压、容量、能量等)作为周期、步骤和运行的因素非常重要。
关于我的查询:我需要一个从 11 开始的列公式,然后每 4 行增加 1 的值。 此列将跟踪多次运行的循环总数。 之所以需要加4,是因为每个周期有多少步。
为了进一步说明,让我举个例子。
第 1 列标记为“运行”。 它跟踪一系列特定测试的数量。
第 2 列标记为“总循环数”。 这是我需要正确编码的列。
第 3 列标记为“实际周期数”。 它描述了特定测试的循环次数。 这些值是循环的,并在每次新运行开始时返回到 1。 它们的上限并不一致。 这些值还会重复,具体取决于每个周期中有多少步。 值的示例为 1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,1,1,1,1,2,2 ,2,2 等
第 5 列标记为 RawStepID。 它在每个周期开始时重置回 1。 例如 1,2,3,4,1,2,3,4,1,2,3,4 等。
第 6+ 列是获得的任何数据。
到目前为止,我对第 2 栏的方法是尝试使用局部变量准备 IF 语句。 我希望每次 RawStepID == 1 时都会将该变量的值增加 1。 我需要它从 11 开始,然后当 RawStepID=1 时变成 12,下次 RawStepID=1 时变成 13,等等。然后我需要公式来显示变量的当前值。
即,如果使用我为第 3 列键入的数据,我需要该列的值变为
11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17, 17,17,17,18,18,18,18等
我希望这一点很清楚。 与此同时,我将尝试找出如何在论坛帖子中包含表格,就像我看到其他成员所做的那样,或者如果失败,则创建一个虚拟表格附加到此处。
谢谢,
害怕的羚羊。
Lag 只是查看前一行的值,在帮助或脚本索引中搜索 lag 可以获得更多信息。第二个条件是如果几个连续行的 ActualCycleNumber 为 1,并且它应该仅在第一行为 1 时重置。您的应用程序可能不需要它。
你好@ih ,
谢谢你! 您提供的第二种方法正是我想要实现的。 我不会分享我的代码是什么样子的,但我可以向你保证,它是最煮过头的意大利面条。
如果我理解正确的话,这也是一个非常灵活的解决方案。 我可以通过更改第 2 行中的 11 来更改行的起始编号,我可以通过更改第 3 行末尾的总周期数的滞后来更改增量,并且我可以看到如何调整此代码以增量,例如每次实际循环数循环回到 1 时运行值。
If(
Row() == 1, 23,
:ActualCycleNumber == 1 & Lag ( :ActualCycleNumber ) != 1, Lag ( :Run ) + 1,
Lag ( :Run )
)
我不明白第二个条件对总循环数增加的影响。 或者一般如何使用 Lag。 您能否解释一下或为我指出学习这些原理的好资源?
你好@statman
是的,这个特定场景就是这种情况。 然而,我在查询中广泛使用总循环数,以便跟踪多次运行的数据。 例如,我可以拥有此特定于运行 1 的表,以及另一个特定于运行 2 的数据的表。 在这两种情况下,实际周期数将从 1 开始并增加到任意值(在测试中定义)。 但是,总循环数将从该电池在所有运行中经历的实际循环数的累积总和开始。
另一种查看方式是,实际循环数是我从实验软件获得的原始数据,而总循环数是处理后的数据。 最后一个例子:
运行 1 包含 30 个循环。 在这种情况下,总周期数和实际周期数都将从 1 开始,到 30 结束。 运行 2 包含 15 个循环。 总周期数将从 31 开始,到 45 结束。 实际周期编号将从 1 开始,到 15 结束。 运行 3 包含 102 个循环。 总计从 46 开始,到 147 结束,实际从 1 开始,到 102 结束,等等。这种增量通常发生在同一个数据表中。 跟踪所有运行的总循环次数对于分析非常有用,因为这是电池健康状况的关键因素之一。
我希望这能满足我对数据的需求!
您想回答什么问题? 快速浏览一下,第 2 列 (11,11,11,11,12...) 将与第 1 列 (1,1,1,1,2...) 混淆,因此这没有用。 每列应该是唯一的 X 或 Y。
你好@害怕羚羊,
处理第 2 列“总周期数”的两种方法可以是按行显式定义它:
11 + Floor( (Row() - 1) / 4 )

或者按照我认为你现在正在做的方式计算它:
If(
Row() == 1, 11,
:RawStepID == 1 & Lag( :RawStepID ) != 1, Lag( :Total Cycle Number ) + 1,
Lag( :Total Cycle Number )
)

请注意中间条件中增加总循环数所需的两个条件。 您也可以扩展它来检查其他列,例如实际周期数可能也应该为 1。