Appearance
グラフチャート
概要
グラフチャート(template_type: 'GRAPH_CHART')では、ノード間の関係性をネットワーク図として表示するグラフや、フロー量を可視化するサンキーダイアグラムを描画できます。ソース(source)とターゲット(target)にディメンションを、重み(weight)にメトリクスを指定して、ソースとターゲットの組み合わせごとに重みを集計して描画します。
指定可能な描画タイプは次の通りです。
render_type | 描画タイプ | 備考 |
|---|---|---|
GRAPH | グラフ | ソースとターゲットの関係をノードとエッジで描画 |
SANKEY | サンキー | ソースからターゲットへのフロー量を帯の太さで描画 循環参照のない有向非巡回グラフ(DAG)が対象 |
事前にチャート設定についても確認してください。
設定例
ユーザのページ遷移の可視化
グラフの設定例
ユーザのページ遷移を、遷移元(from_page)と遷移先(to_page)、遷移回数(transition_count)を元にグラフで表示する場合、次のように設定します。
md
:::sql-block
```sql
SELECT
from_page,
to_page,
transition_count
FROM
page_transitions
```
```yaml {.chart}
chartSettings:
template_type: GRAPH_CHART
component_settings:
render_type: GRAPH
source:
- field: from_page
target:
- field: to_page
weight:
- field: transition_count
aggregator: SUM
```
:::- データソースのSQLの実行結果として出力されるカラムを、チャート設定内で参照します
- 以降の設定例では、データソースの定義は省略し、
chartSettingsの中身のみを記述しますが、チャート設定からは必ずデータソースのカラムを参照する必要があります
- 以降の設定例では、データソースの定義は省略し、
render_type: GRAPHを指定source/targetにそれぞれソース・ターゲットとなるディメンション(各1つのみ)を指定weightにエッジの重みとなるメトリクス(1つのみ・任意)を指定- 省略した場合は、行数(
COUNT(*))が重みとして利用されます
- 省略した場合は、行数(
上記の例では、次のようなSQLが生成され、チャート用のデータ加工が行われます。
sql
SELECT
from_page AS from_page___,
to_page AS to_page___,
SUM(IFNULL(transition_count, 0)) AS transition_count___sum
FROM
/* データソースのSQL */
GROUP BY
from_page___,
to_page___
LIMIT
1001サンキーの設定例
同じデータを render_type: SANKEY でサンキーダイアグラムとして表示する場合、次のように設定します。
yaml
template_type: GRAPH_CHART
component_settings:
render_type: SANKEY
source:
- field: from_page
target:
- field: to_page
weight:
- field: transition_count
aggregator: SUMrender_type: SANKEYを指定- サンキーは循環参照のない有向非巡回グラフ(DAG)が対象です
- 例えば、
A → B → Aのような循環がある場合は描画できずにエラーになります
- 例えば、
データ加工オプション
フレーム機能の利用
frame にディメンションを指定することで、その値ごとにチャートを分割して並べて表示できます。詳細はフレーム機能を参照してください。
render_type: SANKEYの場合、display_settings.frame.independent_scaleは指定できません
表示のカスタマイズ
グラフのカスタマイズ(グラフ)
render_type: GRAPH の場合、display_settings.layout_graph でグラフのレイアウトや見た目をカスタマイズできます。
ts
type LayoutGraphSettings = {
non_directional?: boolean; // ソースとターゲットの接続を双方向として扱う場合は true を指定
// (true の場合、A→B と B→A は1つのエッジに統合される)
node_size?: 'TOTAL' | 'IN' | 'OUT'; // ノードサイズの計算対象を指定。デフォルトは 'TOTAL'
// (non_directional: true の場合は無視されます)
// 'TOTAL': ソースとターゲットの値の合計
// 'OUT' : ソースの値の合計
// 'IN' : ターゲットの値の合計
node_size_calc_type?: 'LINEAR' | 'SQRT' | 'LOG'; // ノードサイズのスケーリング方法。デフォルトは 'SQRT'
node_size_range?: {
start: number; // ノードの最小サイズ(px) 1〜64 で指定。デフォルトは 6
end: number; // ノードの最大サイズ(px) 1〜64 で指定。デフォルトは 24
};
node_color_by_weight?: boolean; // ノードの色を重みと連動させる場合は true を指定
edge_width_calc_type?: 'LINEAR' | 'SQRT' | 'LOG'; // エッジ幅のスケーリング方法。デフォルトは 'SQRT'
edge_width_range?: {
start: number; // エッジの最小幅(px) 1〜32 で指定。デフォルトは 1
end: number; // エッジの最大幅(px) 1〜32 で指定。デフォルトは 6
};
repulsion?: number; // ノード間の反発力 100〜5000 で指定。デフォルトは 1000
gravity?: number; // 中心への引力 0〜1.0 で指定。デフォルトは 0.1
edge_length?: number; // 接続されたノード間の基準距離 10〜100 で指定。デフォルトは 30
};- ノードサイズ・エッジ幅は重みを元に算出されます
repulsion/gravity/edge_lengthは force-directed レイアウトのパラメータです
サンキーのカスタマイズ
render_type: SANKEY の場合、display_settings.layout_sankey でサンキーのレイアウトをカスタマイズできます。
ts
type LayoutSankeySettings = {
orient?: 'horizontal' | 'vertical'; // サンキーの方向。デフォルトは 'horizontal'
};ラベルの設定
display_settings.label で各ノードのラベル表示をカスタマイズできます。
ts
type GraphLabelSettings = {
hide?: boolean; // ラベル全体を非表示にする場合は true を指定
show_value?: boolean; // 値を表示する場合は true を指定
value_label_formatter?: FormatterSettings;
label_width?: number; // ラベルの最大幅(px)。デフォルトは 120
};value_label_formatterで値の書式を指定できます。詳細はフォーマッター設定を参照してください
その他の設定
- 次のカスタマイズについてはその他のチャート設定を参照してください
- テキスト設定(
display_settings.text)
- テキスト設定(
- フレーム表示時の設定(
display_settings.frame)についてはフレーム機能を参照してください
型定義
render_typeにより、描画タイプを指定します- 以下の型については、該当ドキュメントを参照してください
- 以下の型定義は対応するセクションを参照してください
LayoutGraphSettings: グラフのカスタマイズLayoutSankeySettings: サンキーのカスタマイズGraphLabelSettings: ラベルの設定
ts
type ChartSettings = {
template_type: 'GRAPH_CHART';
component_settings: ComponentSettingsCommon & {
render_type: 'GRAPH' | 'SANKEY';
source: [DimensionField];
target: [DimensionField];
weight?: [MetricsField]; // 省略した場合は COUNT(*) が利用されます
frame?: [DimensionField];
frame_layout?: FrameLayout;
};
display_settings?: {
text?: TextSettings;
frame?: FrameSettings; // SANKEY の場合 independent_scale は指定不可
layout_graph?: LayoutGraphSettings; // for GRAPH
layout_sankey?: LayoutSankeySettings; // for SANKEY
label?: GraphLabelSettings;
};
};