TECH BLOG

MENU

オンプレクラウド

Dr.Sum

Dr.Sum

 

BIツールでおなじみのドリルダウン。

大分類ごとの売上 → 大分類・中分類ごとの売上 → 大分類・中分類・小分類ごとの売上 のようにどんどんと細かい情報にしてデータ分析をする方法です。

この機能を使いたいのにデータが階層ごとになっていないからうまくできない、ということはございませんか?

この記事ではカラム内の文字列の中で特定の文字列で分割して、階層項目をつくるという内容です。

便利な技術なのでぜひご覧になってください。

 

階層テーブルでドリルダウンをする

 

このドリルダウンはホームページのURLを階層にして表示させています。pagePath1 → pagePath2 → pagePath3 と詳細にドリルダウンしていますね。

このドリルダウンを実現するためにはpagePath1、pagePath2、pagePath3という項目が必要です。

 

 

ひとつの項目にフルパスが入っている場合が多い

しかしこのように階層構造となっているテーブルはなかなかなく、下図のように1つの項目にフルパスで入っていることが多いです。

 

Page URLはスラッシュ(/)で区切られています。こちらをpagePath1、pagePath2・・・のように分解していきます。

 

それではデータを加工していきましょう。

今回はDS Scriptをつかってデータを加工します。

SQLで同様の処理を実現したい場合は、SQL編の記事をご参照ください。

 

 

元となるテーブル

 

今回のサンプルとなるテーブルはこちらです。[アクセスログ]というテーブルにしています。

 

こちらは[アクセスログb]というテーブルです。階層数とpagePath1~pagePath10までの項目があります。

こちらのテーブルにデータを入れます。つまり[アクセスログ]のデータを参照・加工して[アクセスログb]に挿入します。

 

もしひとつのテーブルの中で加工+更新をしたいのであれば

[アクセスログb]テーブルにPageURLとpageViewのデータが入っていて、UPDATEを使ってpagePath1からpagePath10の項目に更新をかける場合は以下の記事を参照ください。

 

 

 

 

DS Scriptをつかってデータ加工をする

今回使用するスクリプトはこちらです。

SET() {
    // 区切り文字
    $CONST_SEPARATOR := "/";
    // データベース名(引数が未指定の場合の値を指定)
    $VAR_DB_NAME := "work";
    // エクスポート元テーブル名(引数が未指定の場合の値を指定)
    $VAR_SRC_TABLE_NAME := "アクセスログ";
    // エクスポート先テーブル名(引数が未指定の場合の値を指定)
    $VAR_DEST_TABLE_NAME := "アクセスログb";
    }

CONNECT($VAR_DB_NAME) {
}

EXPORT($ENV_CURRENT_DB,
    $VAR_DEST_TABLE_NAME,
    $_EXPORT_MODE_TRUNCATE,
    $_ERROR_MODE_INTERRUPTED,
    $_TABLE_CREATE_MODE_NORMAL) {
        SELECT
            PageURL,
            LENGTH(PageURL) - LENGTH(REPLACE(PageURL, '${CONST_SEPARATOR}', '')) 階層数,
            CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL, '${CONST_SEPARATOR}', '')) >= 1 THEN '${CONST_SEPARATOR}' || SPLIT_PART(PageURL, '${CONST_SEPARATOR}', 2)
            ELSE ''
            END pagePath1,
            CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL, '${CONST_SEPARATOR}', '')) >= 2 THEN '${CONST_SEPARATOR}' || SPLIT_PART(PageURL, '${CONST_SEPARATOR}', 3)
            ELSE ''
            END pagePath2,
            CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL, '${CONST_SEPARATOR}', '')) >= 3 THEN '${CONST_SEPARATOR}' || SPLIT_PART(PageURL, '${CONST_SEPARATOR}', 4)
            ELSE ''
            END pagePath3,
            CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL, '${CONST_SEPARATOR}', '')) >= 4 THEN '${CONST_SEPARATOR}' || SPLIT_PART(PageURL, '${CONST_SEPARATOR}', 5)
            ELSE ''
            END pagePath4,
            CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL, '${CONST_SEPARATOR}', '')) >= 5 THEN '${CONST_SEPARATOR}' || SPLIT_PART(PageURL, '${CONST_SEPARATOR}', 6)
            ELSE ''
            END pagePath5,
            CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL, '${CONST_SEPARATOR}', '')) >= 6 THEN '${CONST_SEPARATOR}' || SPLIT_PART(PageURL, '${CONST_SEPARATOR}', 7)
            ELSE ''
            END pagePath6,
            CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL, '${CONST_SEPARATOR}', '')) >= 7 THEN '${CONST_SEPARATOR}' || SPLIT_PART(PageURL, '${CONST_SEPARATOR}', 8)
            ELSE ''
            END pagePath7,
            CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL, '${CONST_SEPARATOR}', '')) >= 8 THEN '${CONST_SEPARATOR}' || SPLIT_PART(PageURL, '${CONST_SEPARATOR}', 9)
            ELSE ''
            END pagePath8,
            CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL, '${CONST_SEPARATOR}', '')) >= 9 THEN '${CONST_SEPARATOR}' || SPLIT_PART(PageURL, '${CONST_SEPARATOR}', 10)
            ELSE ''
            END pagePath9,
            CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL, '${CONST_SEPARATOR}', '')) >= 10 THEN '${CONST_SEPARATOR}' || SPLIT_PART(PageURL, '${CONST_SEPARATOR}', 11)
            ELSE ''
            END pagePath10,
            pageView
        FROM ${VAR_SRC_TABLE_NAME};
    }

実際のサンプルプログラムはこちらからダウンロードできます。

SPLIT_URL_EXPORT.dhnをダウンロードする

 

上記のスクリプトを流すと、[アクセスログb]に以下のようにデータが入ります。

 

ちゃんと階層構造になりましたね。

この状態になればドリルダウンをすることが可能です。

 

ダウンロードしたdhnファイルを自社の環境に適用する方法

dhnファイルをダウンロードしたら、ファイルを開いて5行目と7行目と9行目のデータベース名とテーブル名を自社の環境のデータベースとテーブルに変更します。

そしてScript Editorを開き、左下のスクリプトファイルを右クリックし[アップロード]から該当のdhnファイルを取り込みます。

 

[実行]をしてみて、エラーが出ないことを確認したら、dhnファイルを保存しましょう。

これで自社環境でサンプルスクリプトを使用することができます。

DS Scriptをバッチから呼び出して自動化しよう

バッチでdhnファイルを呼び出し、DS Scriptを動かしましょう。

DS Scriptのバッチからの起動方法についてはこちらの記事を参照してください。

 

 

BIツールのパフォーマンスを最大限に活かすには、元データを使いやすい形に加工することも重要です。

SQLを理解して、データ加工の技術を身に着けていきましょう。

 

 

 

この記事にリアクションしてみませんか?

  • 分かりやすい (2)
  • 問題が解決した (0)
あなたのお役に立ててうれしいです!
プロフィールへ

Toru Sasahara

Dr.Sumのソースコード1行目から開発に携わり、四半世紀にわたってDr.Sumと共に歩んできました。 2022年からはDr.Sumの開発責任者とプロダクトエンゲージメント担当を兼務し、ユーザーが愛着を持ち、長く使い続けられる製品の開発に情熱を注いでいます。

Related article

Related article関連記事

Pick up

Pick upおすすめ記事

【まとめ】SVFCloud帳票をinvoiceAgentに連携する方法

  • #帳票作成・出力
  • #システム連携
  • #電帳法
  • #文書定義
  • #処理定義

2024.04.18

SVF

Dr.Sum Copilotをインストールしてみた【OpenAI】

  • #Copilot

2024.04.05

Dr.Sum

DS Scriptで必要なテーブルだけ再構築(リビルド)をしよう

  • #DS Script

2023.07.06

Dr.Sum

Ranking

Rankingランキング

1

Excelのデータを加工したい。~変換(横持ち⇔縦持ち)について~

  • #データ取り込み
  • #データ加工

2021.01.19

Dr.Sum

2

【あの頃に戻りたい】バックアップから任意のテーブルだけを戻す方法

  • #設定

2023.11.07

Dr.Sum

3

【DELETE-INSERT】特定期間のデータのみ洗い替えたい!【手動…

  • #データ取り込み
  • #SQL

2024.01.10

Dr.Sum

Info

Information

ウイングアーク1stからのお知らせ