見出し画像

Tableau Serverサイト運営の投稿-18

  • 事業会社でTableau Serverのサイト管理者を担当しています。(Tableau Cloudでない、自前のTableau Server管理です。

  • 今回はTableau Serverのリポジトリでは難易度の高いプロジェクトの管理を考えてみましょう。

  • プロジェクトは1レコード単位で、その属性情報と自分の親プロジェクトのID情報を保有しています。我々がWebUIで見るのはTOPから階層をたどった内容を一つ一つ操作することになりますので、そのような情報を管理できる方が望ましいです。


TableauServerプロジェクトの管理課題

TOP階層から最下層までの構造は?

TOP階層のプロジェクト名/第二階層/第三階層/・・・・/最下層という形での表現だと分かりやすいです。

そのプロジェクトの所有者は誰?

プロジェクト所有者名の情報は重要ですね。

管理用のデータの作成

いつものPrepBuilderのフローでは実現難しい

ここは工夫が必要です。Windowsのフォルダ階層のように何階層もプロジェクトが作れるので、Prep Builderでデータの接続でprojectsテーブルに繰り返し接続すると巨大なフローになる可能性があるためです。難易度が上がりますがカスタムSQLを使うしかなさそうです。

カスタムSQL

SQLのwith recursiveを使いましょう。再帰的にデータを取得できます。ただし設定次第では無限ループになる可能性があるので対象テーブルの事前検証が必要です。下記のSQLについてPrep BuilderでリポジトリDBのPostgresSQLに接続後、カスタムSQLに貼り付けてみてください。
  工夫-1:with recursiveを使った再帰SQL作成
  工夫-2:project_nameを演算子||を使って区切り文字/(スラッシュ)を配置

===ココカラ

WITH RECURSIVE project_hierarchy AS(
SELECT
p.site_id as site_id,
p.id as project_id,
p.name as project_name,
su.friendly_name as project_owner_friendly_name,
su.name as project_owner_system_name,
p.parent_project_id,
CAST(NULL as varchar) as parent_project_name,
CAST(NULL as varchar) as parent_project_owner_friendly_name,
CAST(NULL as varchar) as parent_project_owner_system_name,
0 as project_level,
p.name as top_level_project_name,
CAST(p.name AS VARCHAR(255) as project_path,
p.controlled_permissions_enabled,
p.controlling_permissions_project_id,
p.nested_projects_permissions_included
from projects p
left join users u
on p.owner_id = u.id
left join system_users su
on u.system_user_id = su.id
where p.parent_project_id IS NULL
UNION ALL
SELECT
p.site_id as site_id,
p.id as project_id,
p.name as project_name,
su.friendly_name as project_owner_friendly_name,
su.name as project_owner_system_name,
p.parent_project_id,
ph.project_name as parent_project_name,
CAST(ph.project_owner_friendly_name as varchar) as parent_project_owner_friendly_name,
CAST(ph.project_owner_system_name as varchar) as parent_project_owner_system_name,
ph.project_level+1 as project_level,
ph.top_level_project_name as top_level_project_name,
CAST(ph.project_path ||'/'||p.name as varchar(255)) as project_path,
p.controlled_permissions_enabled,
p.controlling_permissions_project_id,
p.nested_projects_permissions_included
from projects p
left join users u
on p.owner_id = u.id
left join system_users su
on u.system_user_id = su.id
inner join project_hierarchy ph
on ph.project_id = p.parent_project_id
)

select * from project_hierarchy

===ココマデ

管理用データレイアウト例

リポジトリDBを利用して以下のようなレイアウトのデータテーブルを作成します。テーブル名やレイアウト例は下記になります。(組織によってほしい項目が変わるかもしれません。まずはPrepBuilderの出力コンポーネントでExcel等に出力して、検証してみてください。)。出力項目が確定後にテーブルに書き出せばいいと思います。

テーブル名:Tableau Serverプロジェクト属性テーブル


おことわり


当記事のコンテンツについて、商用利用でない場合は許可なく転載して頂いて構いません。
転載の際は、当記事へのリンクを掲載し転載であることを明記してください。商用利用の場合は許可なく転載しないで下さい。
当記事のコンテンツについて、公開情報等から引用したものであり、かかる情報の正確性・適切性等については、これを保証するものではありません。
っておらず、また、これを保証するものではありません。

この記事が気に入ったらサポートをしてみませんか?