大家好,
我對使用更強大的統計軟件非常陌生,並且正在慢慢學習訣竅。 我擅長實施反饋,但不太擅長自己的研究。
我使用電池工作。 我們收集大量數據,並根據我們想要了解的內容使用不同的測試。 生成的數據本質上是周期性的,因為我們對電池充電、休息、放電,然後再次休息。 這些稱為步驟。
在一次測試中(我稱之為運行),我們可能在一種狀態下有幾個週期,然後在另一種狀態下有幾個週期。 因此,對我來說,能夠跟踪響應(電流、電壓、容量、能量等)作為周期、步驟和運行的因素非常重要。
關於我的查詢:我需要一個從 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。