今日は、Tableau Server Repositoryを利用して、プロジェクト-ワークブック-ビューの構成リストを作成します。
Tableau Server Repositoryとは
ユーザーの登録、参加グループ、ユーザーの利用状況などのユーザー情報、抽出・更新やサブスクライブ等のタスクのステータスなどTableau Serverをリアルタイムに監視する上で必要なデータで構成されており、データベースはPostgreSQLとなっています。
そして、Repository内にはプロジェクトの構成やワークブック、ビューの配置情報がデータベース化されています。
今回はプロジェクトリストをSQLで作成し、ワークブック情報やビュー情報を追加し、ワークブックやビューがどのブロジェクトに格納されているか一眼でわかるような構成となるSQLをご紹介します。
また、それにビューのアクセス数をつけたり、最終アクセス日時をつけたりすれば、増え続けるビューやワークブックを整理するための機能としても利用できます。
まずは、Tableau Server Repositoryの有効化についてはこちらをご覧ください。
Tableau Serverインストール後の初期設定ではTableau Server Repositoryは無効状態です。
有効化することでRepository情報にアクセスできるようになります。
Repositoryのdatabase情報は以下をご参照ください。
Workgroups Database
Introduction
The following “data dictionary” provides information about the tables and views in the “workgroup” PostgreSQL database of the Tableau Server repository. This database provides persistent storage for Tableau Server and is primarily intended to support that application.
今回利用するテーブル情報はこちらの情報をそのまま記載させていただいております。
https://tableau.github.io/tableau-data-dictionary/2020.1/data_dictionary.htm?_fsi=fgiDE7cI
早速、私のTableau Serverのプロジェクト構成を見ていきます。
Tableau Server プロジェクト階層図
01 WBA
02 WBC
03 IBF
04 WBO
を上位のプロジェクトとして構成されているTableau Serverを構築しました。
上記の図の通り、01 WBAの第二階層に01 Heavyweight、02 Cruiserweight、03 Light heavyweight、04 Super middleweight、05 Middleweight、・・・、16 Light flyweight、17 Minimumweight、18 Light minimumweight
と18のプロジェクトが存在し、
01 Heavyweightの直下に「test」プロジェクトがあり、その中には
image URL(ビュー:Sports/imageURL)とIncomeWaterfallChart(ビュー:income)というワークブックが保存されています。
他、02 WBCや03 IBF内にも同様に複数プロジェクトが作成されております。
Repostiroyのprojectsデータベース
上記のプロジェクト構成が格納されている情報は「projects」テーブルに存在します。
projectsの詳細は以下の通りです。
小さくて分かりづらいかと思いますが、
今回使用する項目は3つです。
Name | Type | Description |
---|---|---|
id | integer | Primary key for the record. |
name | character varying | The name of the project. |
parent_project_id | integer | Id of the parent project. NULL for top-level projects. |
idは自身のプロジェクトIDになります。
nameはプロジェクト名です。
parent_project_idは自身のプロジェクトの親になるプロジェクトのIDです。故に最上位(私のTableauでいえば、01 WBAなどといったプロジェクト)のプロジェクトについてはこの値がnullになります。
BOM表作成のSQLを利用(再帰処理)
今回のSQLはパーツの構成表であるBOM表を作成する際に利用した再帰のSQLと全く同じ対応が取れます。
今回は再帰処理の詳細説明は致しません。
過去の記事で同様事例を紹介したので、こちらもご覧ください。
早速、SQLを見てみましょう。
以下のようなSQLを作成しました。
with recursive rec_projects(level,parent,child,hierarchy,topproject)
as
(
select cast(1 as numeric) as level
,p.parent_project_id as parent
,p.id as child
,lpad(cast(p.id as varchar(4)),4,'0') as hierarchy
,lpad(cast(p.id as varchar(4)),4,'0') as topproject
from projects p
where p.parent_project_id is null
union
select r.level + 1 as level
,p.parent_project_id as parent
,p.id as child
,r.hierarchy || '->' || lpad(cast(p.id as varchar(4)),4,'0') as hierarchy
,cast(substring(r.hierarchy from 1 for 4) as varchar(4)) as topproject
from rec_projects r
inner join projects p
on r.child = p.parent_project_id
)
select r.topproject
,t.name as topprojectname
,r.level
,r.hierarchy
,r.parent
,r.child
,p.name as childname
from rec_projects r
left join projects p
on r.child = p.id
left join projects t
on cast(r.topproject as int) = t.id
order by r.topproject
,r.hierarchy
,r.level
,r.parent
,r.child
それでは結果を見ながら、内容を説明していきます。
結果
Name | Description |
---|---|
topproject | 最上位のプロジェクトのIDを左0埋め4桁で表した識別子。下位プロジェクトがどこの最上位プロジェクトに所属しているか判別させる。 |
topprojectname | 最上位のプロジェクト名。 |
level | どこの階層に属しているかのレベル。レベル=1は最上位。 |
hierarchy | 階層情報。ソートしやすくするため、プロジェクトIDを左0埋め4桁で整形し、表記。 |
parent | 親プロジェクトID。NULLは最上位プロジェクト。 |
child | 子プロジェクトID。自身のプロジェクトID |
childname | プロジェクト名 |
ワークブックやビュー情報を追加する
次にワークブックやビュー情報を上記SQLに追加していきます。
使用するテーブルは「workbooks」と「views」です。
テーブル詳細は以下の通りです。
workbooks
と全部写しきれていないのですが、以下の3項目のみ使用します。
id=ワークブックID
name=ワークブック名
project_id=格納されているプロジェクトのID
views
workbooks同様、idとname、また、workbook_idを利用します。
id=ビューID
name=ビュー名
workbook_id=自身が属するワークブックのID
with recursive rec_projects(level,parent,child,hierarchy,topproject)
as
(
select cast(1 as numeric) as level
,p.parent_project_id as parent
,p.id as child
,lpad(cast(p.id as varchar(4)),4,'0') as hierarchy
,lpad(cast(p.id as varchar(4)),4,'0') as topproject
from projects p
where p.parent_project_id is null
union
select r.level + 1 as level
,p.parent_project_id as parent
,p.id as child
,r.hierarchy || '->' || lpad(cast(p.id as varchar(4)),4,'0') as hierarchy
,cast(substring(r.hierarchy from 1 for 4) as varchar(4)) as topproject
from rec_projects r
inner join projects p
on r.child = p.parent_project_id
)
select r.topproject
,t.name as topprojectname
,r.level
,r.hierarchy
,r.parent
,r.child
,p.name as childname
,w.id as workbookid
,w.name as workbookname
,v.id as viewid
,v.name as viewname
from rec_projects r
left join projects p
on r.child = p.id
left join projects t
on cast(r.topproject as int) = t.id
left join workbooks w
on r.child = w.project_id
left join views v
on w.id = v.workbook_id
order by r.topproject
,r.hierarchy
,r.level
,r.parent
,r.child
28行から31行、37行から40行を追加しています。
この結果、ワークブックとビュー情報が先に作成したプロジェクトリストに載ってきます。
閲覧状況を追加する
さらに閲覧数や最終閲覧日等を追加していきます。
「views_stats」ビューを利用します。
こちらは元々Tableauで用意されているビュー情報です。
以下の項目を利用します。
Name | Type | Description |
---|---|---|
view_id | integer | A foreign key reference to the view that was accessed. This field must be populated. |
nviews | Keeps a cumulative count of the number of times the view was accessed by this user. | |
time | The time of the most recent access of the specified view by the specified user. |
以下のようなSQLを用意します。
select view_id
,sum(nviews) as viewcount
,min(time) as firsttime
,max(time) as latesttime
from views_stats
group by view_id
viewcount=該当のビューの過去のアクセス数累計値
firsttime=該当ビューが初めてアクセスされた時間
latesttime=該当ビューが最後にアクセスされた時間
with recursive rec_projects(level,parent,child,hierarchy,topproject)
as
(
select cast(1 as numeric) as level
,p.parent_project_id as parent
,p.id as child
,lpad(cast(p.id as varchar(4)),4,'0') as hierarchy
,lpad(cast(p.id as varchar(4)),4,'0') as topproject
from projects p
where p.parent_project_id is null
union
select r.level + 1 as level
,p.parent_project_id as parent
,p.id as child
,r.hierarchy || '->' || lpad(cast(p.id as varchar(4)),4,'0') as hierarchy
,cast(substring(r.hierarchy from 1 for 4) as varchar(4)) as topproject
from rec_projects r
inner join projects p
on r.child = p.parent_project_id
),
vs
as
(
select view_id
,sum(nviews) as viewcount
,min(time) as firsttime
,max(time) as latesttime
from views_stats
group by view_id
)
select r.topproject
,t.name as topprojectname
,r.level
,r.hierarchy
,r.parent
,r.child
,p.name as childname
,w.id as workbookid
,w.name as workbookname
,v.id as viewid
,v.name as viewname
,vs.viewcount
,vs.firsttime
,vs.latesttime
from rec_projects r
left join projects p
on r.child = p.id
left join projects t
on cast(r.topproject as int) = t.id
left join workbooks w
on r.child = w.project_id
left join views v
on w.id = v.workbook_id
left join vs
on v.id = vs.view_id
order by r.topproject
,r.hierarchy
,r.level
,r.parent
,r.child
21行から30行、42行から44行、54行、55行を追加しました。
結果は以下の通りです。
これによりそれぞれのビューのアクセス状況を見ることができます。
もちろんアクセスが無ければ、nullが返ります。
Tableau Server上でプロジェクトリストを見たいのであれば、上記SQLをDesktopのカスタムSQLに追加し、対応ください。
いかがでしたでしょうか?
そのほかのRepository情報を更に付け加えれば、Tableau Serverの利用状況をプロジェクト単位で持って管理することができるようになります。
こちらご参考いただければと。
では。