以下の演習はPI SQL Commander, PI SQL Commander Liteにて実行できます。
添付のXMLからOSIsoft Enterprisesのデータベースをインポートして演習ができます。
Server名はPISRV1となっています。クライアント側でAliases:を登録することで使用可能です。
タグは添付のExcel(OSIsoft EnterprisesAllTags.xlsx)を使用して作成できます。
1 1つのテーブルからデータを取得
「OSIsoft Enterprises」データベース内のすべてのエレメントの名前、説明を表示するクエリをElementテーブルから作成してください。
Joinは使用しないで実現できます。クエリを実行し、正しい結果が取得できるか確認してください。
結果は以下のようになります。
Name
Description
Huston
The Huston Plant
…
…
回答例
SELECT e.Name, e.Description
FROM [OSIsoft Enterprises].[Asset].[Element] e
2 2つのテーブルからデータを取得
前のクエリにさらにクエリを足す形で、結果列に名前、説明、親エレメントのパスを表示するクエリを作成してください。
ID列に入っているGUIDを使用して2つのテーブルをjoinする必要があります。
一般的に言ってPI OLEDB Enterpriseで必要な情報を取得する場合、少なくとも2つ以上のテーブルをJoinする必要が出てくることがほとんどです。
結果は以下のようになります。
Path
Name
Description
\
Houston
The Houston Plant
…
…
…
回答例
SELECT eh.Path, e.Name,
e.Description
FROM [OSIsoft Enterprises].[Asset].[Element] e
INNER JOIN [OSIsoft Enterprises].[Asset].[ElementHierarchy]
eh ON e.ID = eh.ElementID
3 3つのテーブルからデータを取得
全てのエレメント内の「Fuel Gas Flow」属性の名前、自身のエレメント名、親エレメントのパス、エレメントの説明を取得します。
ここでは別名を使用する必要があります。そうしないとNameという同じ名前の列名が複数になってしまうためです。
1つは、Element.Name 列、もう1つはAttribute.Name列となります。以下のようにリネームする必要があります。
- Path => Element Parent
- Name => Element Name
- Description => Element Description
- Joinしたテーブルより: Attribute Name
結果は以下のようになります。
Element Parent
Element Name
Element Description
Attribute Name
\Tucson\Cracking Process
Boiler-309
Cracking Boiler B-309
Fuel Gas Flow
…
…
…
…
回答例
SELECT eh.path as [Element Parent],
e.name as [Element Name], e.description as [Element
Description], ea.name as [Attribute Name]
FROM [OSIsoft Enterprises].[Asset].[Element] e
INNER JOIN [OSIsoft Enterprises].[Asset].[ElementHierarchy]
eh ON eh.ElementID = e.ID
INNER JOIN [OSIsoft Enterprises].[Asset].[Elementattribute]
ea ON ea.ElementID = e.ID
WHERE ea.name = 'Fuel Gas Flow'
4 4つのテーブルからデータを取得
4つのテーブルをjoinします。前のクエリと同じ列を表示し、さらに現在のTimestampとValue を表示します。
結果は以下のようになります。
Element Parent
Element Name
Element Description
Attribute Name
Time
Value
\Tucson\Cracking Process
Boiler-309
Cracking Boiler B-309
Fuel Gas Flow
2015-04…
- 66.4…
…
…
…
…
…
…
回答例
SELECT eh.path as [Element Parent],
e.name as [Element Name],
e.description as [Element Description],
ea.name as [Attribute Name],
s.Time,
s.Value
FROM [OSIsoft Enterprises].[Asset].[Element] e
INNER JOIN [OSIsoft Enterprises].[Asset].[ElementHierarchy] eh ON eh.ElementID = e.ID
INNER JOIN [OSIsoft Enterprises].[Asset].[Elementattribute] ea ON ea.ElementID = e.ID
INNER JOIN [OSIsoft Enterprises].[Data].[Snapshot] s ON ea.id = s.ElementAttributeID
WHERE ea.name = 'Fuel Gas Flow'
5 演習 –Viewを作成します
リレーショナルデータベースにおいて「view」は他のテーブルと同じようにクエリを実行できる仮想的なテーブルのように扱えます。
- 前の演習のクエリをコピーします。
- PI SQL Commander LiteのData Sources > AF Servers > localhost > Catalogs > OSIsoft Enterprises > Asset > Viewsを開きます。右クリックして、「Create View…」を選びます。
- [ <view name> ] を[Fuel Gas Flows]とします。
- ポップアップウィンドウの<query>セクションに演習のクエリをペーストします。
- クエリを実行します。
- Views」を右クリックし、「Refresh」を実行します。
- 「Views」を展開し、新しいViewを右クリック「Execute Predefined Query」を実行します。
6 演習 – Data Transpositions
今度はCatalogs > OSIsoft Enterprises > Data Tについて見ていきたいと思います。取得したいものは以下のデータです。
Element
Attribute
Current Value
Pump 1
Flow
43 m3/h
Pump 1
Power draw
- 17.1 A
Pump 1
Spindle speed
1960 RPM
Pump 2
Flow
29 m3/h
Pump 2
Power draw
- 13.8 A
…
…
…
しかしながら、上記表よりも、下記のように結果をtransportするともっと見やすいものになります。
Element
Flow
Power draw
Spindle speed
Pump 1
43 m3/h
- 17.1 A
1960 RPM
Pump 2
29 m3/h
- 13.8 A
1754 RPM
…
…
…
…
PI OLEDB EnterpriseのTranspositionを使えば上記が実現可能です。TranspositionはBIアプリケーションのPower Pivotのようなものです。ViewやTranspositionは必要に応じて、自身で作成する必要があります。
アプローチ
- PI SQL Commander Liteを使用し、Data Sources > AF Servers > localhost > Catalogs > OSIsoft Enterprises > DataT > Functionsを開きます。Functionsを右クリックし、New Transpose Functions > (asset):を選択します。
- 「Boiler」にチェックを入れてnextをクリックします。
- Attribute Pathのダイアログでは変更せずにnextをクリックします。
- 「TransposeSnapshot」にチェックを入れnextをクリックします。
- デフォルトのまま、nextをクリックします。
- next / executeを通して作成を完了させます。
上記作業によって、functionとテーブルがDataT以下に作成されます。これらを使用して以下演習を行います。
DataT > Tables > ft_TransposeSnapshot_Boilerを開き、新しいテーブルを右クリックし、「Execute Predefined Query」を実行します。クエリを編集し、実行することで価値のあるデータを表示することができます。
7 演習– PI OLEDBを利用してタグデータの一括削除
SQL Queryを使用すると、where条件式を利用すれば、特定のイベントを抽出することも簡単です。
たとえば、PI Data Archiveを停止すると、ShutdownフラグがONのタグに対して、PI Shutdown Subsystemによって”Shutdown”というデジタルステートがタグに書き込まれます。
ここではその”Shutdown”イベントを一括して削除してみましょう。
アプローチ
- PI SQL Commander Liteを使用し、Data Sources > PI Servers > ServerName > Catalogs > piarchive > Tables > picomp2を開きます。右クリックし、Execute Predefined Queryを実行します。
- まず、削除したいイベントをSelect文で表示してみます。“Shutdown”の値のあるタグ(sinusoidタグなど)を表示します。
どのカラムにほしい情報が入っていますか?
また、数字で入っているので、”Shutdown”という文字列が表示したい場合はどのようにしますか?
3. 表示できたら、SelectをDeleteに変更し、実行します。(1つのテーブルで実行できるのであれば簡単に実施可能です)Joinした結果を削除したい場合、Deleteクエリは1つのテーブルで実施する必要があるため、WHEREでtime in(Select文)のように実行する必要があります。
4. 実行結果をクライアント製品やPI SMTで確認しましょう。
回答例
Delete [piarchive].[picomp2] WHERE time in (Select time from [piarchive].[picomp2] ar
JOIN pids.pids ds
ON ar.status = ds.code
WHERE ar.time BETWEEN '*-2h' AND '*'
And ds.name= 'Shutdown')