Composer 中的 ThingWorx 模型定義 > 資料儲存 > 值串流 > 使用 QueryPropertyHistory 服務
使用 QueryPropertyHistory 服務
QueryPropertyHistory 服務可在特定時間範圍內,查詢特定來源物件各個內容 (必須是已記錄的內容) 值的值串流。服務會呼叫各個內容的 ValueStream.queryValueStreamEntries,然後將值匯整在結果集中。
QueryPropertyHistory 會針對某物件查詢每項已記錄的內容,再傳回據此建立的資料集,然後再將個別資料集整合到一個大資料集中。「列」是在個別資料集中針對各個時間戳記所建立的。如果該時間戳記有已記錄的值,系統就會將該值輸入資料集中的列。如果沒有已記錄的值,系統預設會使用該內容上次記錄的值。除非您在 fillOption 參數中選取 None 選項,否則會傳回 Null 值。如果沒有已記錄的內容,則項目保留空白。此整合流程會依據時間戳記移除特定內容的重複項。
若要取得特定內容的實際已記錄值,您必須使用 QueryPropertyHistory 服務 (例如,QueryIntegerPropertyHistory)。您可以確認該資料實際上已與這些服務一起清除。欲瞭解此服務的運作方式,請參閱下列幾個範例情境。
範例情境
情境 1:我指定了三列,但 QueryPropertyHistory 傳回九列
值串流用於記錄三個內容。每個內容已有三個單獨的項目。因此,所輸入的資料點總數是九。
如果在此值串流的 maxItems 參數設定為三時呼叫 QueryPropertyHistory,系統將會傳回九列資料。QueryPropertyHistory 會對各個內容查詢三次,因為已將 maxItems 設定為三。由於每個內容有三個資料項目,所以傳回的最大項目數量可能是:九列。
情境 2:我知道此時間戳記有資料,但我收到空的 InfoTable
如果不想使用將值輸入值串流時 ThingWorx 自動產生的時間戳記,您可以從邊裝置記錄您自己的自訂時間戳記,但應考慮下列行為。
如果我嘗試在不使用 setPropertyVTQ 的情況下查詢此自訂時間戳記欄,可能會發生什麼情況?
QueryPropertyHistory 服務會出庫物件所使用的值串流,並會根據 startDateendDateoldestFirstmaxRows 參數擷取初始結果集。
如果您將 startDateendDate 保留空白,這表示您不查詢自動產生的時間戳記內容,查詢會從最近新增的內容值或值串流中最舊的內容值擷取 maxRows (假設 500)。這取決於 oldestFirst 布林參數。如果將 oldestFirst 設定為 false,傳回的結果集將包含 500 個每個內容最近輸入的內容值。如此,500 個以上的值各有三個已記錄的內容,則初始資料集將會包含 1500 列。
後續如何處理?
還留有一個未使用的參數:query 參數。後續處理時,系統會套用此參數。也就是說,完成初始的值串流查詢之後,系統會將 query 參數套用至傳回的初始結果集以便篩選,並僅傳回所需的資料。
問題?
如果您決定要查詢自己已建立的自訂時間戳記內容,但在初次傳回的結果集內,沒有您查詢的時間,則查詢內容為空,且系統會傳回空的資料負載。
解決方案
欲完全避免此問題,請使用 setPropertyVTQ 服務將您自己的時間戳記值輸入值串流。如此可覆蓋自動產生的時間戳記值 (表示將值輸入值串流時的切確時間)。然後,您可使用 startDateendDate 參數來查詢日期,而不使用 query 參數,且您不會因為查詢時間戳記而有遺失資料的風險。
這是否有幫助?