Sprucely.ioが描画するダッシュボードは、スタンドアロンのJavaScriptランタイムを使う場合でも、スタンドアロンのReactコンポーネントを使う場合でも、アカウントに保存されている場合でも、すべて同じJSON構造を共有します。ダッシュボード全体のスタイルを定義するconfigオブジェクトと、ウィジェットツリーを記述するdataオブジェクトです。本リファレンスでは、このJSONの仕様を、読み込み元となるデータセット形式や、列の組み合わせごとに選ぶべきチャートタイプとあわせて詳しく解説します。埋め込み方法についてはシンプルなダッシュボード統合の説明を参照してください。
ダッシュボードJSON
各ダッシュボードは、トップレベルに2つのキーを持つ単一のJSONオブジェクトです。ダッシュボード全体のスタイルを保持するconfigと、単一のダッシュボードルートから始まる型付きウィジェットノードのツリーであるdataです。各ノードはtypeフィールドを持ち、コンテナ型の場合はネストされたノードの配列であるchildrenを持ちます。
dash- ダッシュボードのルートです。ツリーの最上位に常にちょうど1つだけ存在します。dash_stacker_hor/dash_stacker_ver- 子要素を行または列に並べて配置します。dash_chart- チャートです。サポートされているチャートタイプのいずれかを指定します(詳細は後述)。dash_table- データテーブルです。dash_text- テキストブロックです。dash_image- アップロードされた画像です。dash_spacer- ウィジェット間に固定の空白を挿入します。
タイプに関わらず、すべてのウィジェットは同じ表示関連フィールドを受け付けます。
size- コンテナの主軸方向に対するウィジェットのサイズです。‘Auto’、‘<n>px’、’<n>%‘のいずれかを指定します。padding- 内側の余白です。例えば’10px’のように指定します(dash_spacerを除く)。backgroundColor- CSSカラーです。例えば’#FFFFFF’や’transparent’のように指定します。borderRadius/borderWidth- 角の丸みと枠線の太さです。例えば’10px’のように指定します。borderColor- 枠線に使用するCSSカラーです。shadow- trueまたはfalseです。ドロップシャドウを追加します。
チャートウィジェット
すべてのチャートは同じフィールドを共有していますが、x、y、d、rのうちどれを使うか、また各フィールドがどの列タイプを受け付けるかはチャートタイプによって異なります。サポートされている各チャートタイプについては、以下でそれぞれ個別のセクションを設け、共通の小さなサンプルデータセットから描画したライブ例とともに説明します。
datasetId- このチャートが読み込むデータセットです。データセットのnameと一致させる必要があります。chartType- area, bar, cell, dot, hexbin or line.title- チャートのタイトルです(任意)。dataFunction-dに適用する集計関数です。count (default), sum, average, min, max, median or stddev のいずれかを指定します。countを使用する場合はdを未設定のままにしてください。x- X軸に対応する列です(すべてのチャートタイプで必須)。y- Y軸に対応する列です(cell、dot、hexbinのみ。これら3つでは必須)。d- チャートの値・色の次元に集計される列です。r- 半径の次元に対応する列です(dotのみ。dotでは必須)。seasonX/seasonY- 時間列を周期的な単位でグループ化します。year, quarter, month, week, dayofyear, day, dayofweek, hour, minute or second のいずれかです。
次元の列は、宣言された型に基づいてカテゴリ型、時間型、連続型のいずれかに分類されます。詳細は後述のデータセットJSONのセクションを参照してください。dataFunctionがcountの場合、dの次元は未設定のままにします。カウントには値の列が不要だからです。それ以外の集計(sum, average, min, max, median or stddev)を使う場合はこれが必要です。
チャートタイプが必要とする次元は必ず指定してください。cell、dot、hexbinはyがないと描画できず、dotはさらにrがないと描画できません。いずれかが欠けたリクエストは拒否されるため、データセットに適した列がない場合は、その次元を必要としないチャートタイプを選んでください。area、bar、lineはxだけで描画でき、hexbinは半径の列なしで2つの次元を表現できます。
棒グラフ
xにはカテゴリ型、連続型、時間型のいずれかの列を指定できます。dは連続型である必要があり、dataFunctionがcount以外の場合にのみ使用されます。xが時間型の列である場合は、曜日などの周期的な単位にグループ化するためにseasonXを指定できます。yとrは使用されません。
折れ線グラフ
xには連続型または時間型の列を指定できます(カテゴリ型は不可)。dは連続型である必要があり、dataFunctionがcount以外の場合にのみ使用されます。季節性はサポートされていません。yとrは使用されません。
面グラフ
xには連続型または時間型の列を指定できます(カテゴリ型は不可)。dは連続型である必要があり、dataFunctionがcount以外の場合にのみ使用されます。季節性はサポートされていません。yとrは使用されません。
ヒートマップ
xとyはいずれもカテゴリ型の列、または季節性を有効にした時間型の列(xにはseasonX、yにはseasonY)である必要があります。dは連続型である必要があり、dataFunctionがcount以外の場合にのみ使用されます。seasonYを使用する場合、xが既にカテゴリ型の次元として解決されている必要があります。つまり、本来カテゴリ型の列であるか、seasonXが設定された時間型の列である必要があります。rは使用されません。
バブルチャート
xとyには連続型または時間型の列を指定できます。rとdはどちらも連続型である必要があり、カテゴリ型や時間型は使用できません。季節性はサポートされていません。バブルチャートは数百行程度までのデータセットで最も見やすくなります。
ヘックスビン
xとyにはいずれも連続型または時間型の列を指定できます(カテゴリ型は不可)。dは連続型である必要があり、dataFunctionがcount以外の場合にのみ使用されます。季節性はサポートされていません。rは使用されません。
その他のウィジェット
テーブル(dash_table)
datasetId- 表示するデータセットです。fontFamily- デフォルトはArial。Arial, Calibri, Cambria, Century Gothic, Courier New, Garamond, Helvetica, Consolas/Monaco (Monospace), Lucida Bright, Lucida Sans, Segoe UI, Tahoma, Verdana のいずれかを指定します。fontSize- デフォルトは12px。6-256pxまたは1-10vwの範囲で指定します。color- デフォルトはinheritです。bold/italic- trueまたはfalseで、デフォルトはfalseです。ratio- 幅と高さの比率で、0.125から16までの数値を指定します。
テキスト(dash_text)
text- 表示するテキストです。fontFamily/fontSize(デフォルトは3vw) /color/bold/italic- テーブルウィジェットと同様です。justifyContent/alignItems- ’0’は先頭、’1’は中央、’2’は末尾です。
画像(dash_image)
assetId- アップロードされた画像アセットです。objectFit- デフォルトはnone。none, contain, cover or fill のいずれかを指定します。
スペーサー(dash_spacer)
size- 必須項目です。デフォルトは100pxで、0-100%または30-1000pxの範囲で指定します。
スタッカー(dash_stacker_hor, dash_stacker_ver)
children- ネストされたウィジェットです。行(dash_stacker_hor)または列(dash_stacker_ver)に並べて配置されます。gap- デフォルトは’10px’。子要素間の間隔です。minHeight- スタッカーの最小の高さです。
データセットJSON
データセットは、name、型付きの列、行データを持つ単一のJSONオブジェクトです。
{
"name": "Orders",
"headers": ["region", "category", "amount", "quantity"],
"types": ["VARCHAR", "VARCHAR", "FLOAT", "INTEGER"],
"entries": [
["North", "Electronics", 120.50, 2],
["South", "Clothing", 89.95, 1],
["North", "Furniture", 432.00, 5],
["South", "Electronics", 74.50, 1]
]
}name- データセット名です。チャートやテーブルはdatasetIdフィールドを通じてこれを参照します。headers- 列名です。entries内の各行と同じ順序で並べます。types- 各ヘッダーに対応する列タイプです。詳細は後述の分類を参照してください。entries- 行データです。各行はヘッダーの順序に沿った値の配列です。
任意で、row_start、row_end、col_start、col_endを指定すると、entriesの中からゼロ始まりで両端を含む部分範囲を選択してインポートできます。より大きなテーブルから新しい行だけを追加する場合に便利です。これら4つはいずれもデフォルトで全範囲を対象とします。
{
"name": "Orders",
"headers": ["region", "amount"],
"types": ["VARCHAR", "FLOAT"],
"entries": [ ["North", 120.50], ["South", 89.95], ["North", 432.00], ["South", 74.50] ],
"row_start": 0,
"row_end": 1,
"col_start": 0,
"col_end": 1
}各列タイプはカテゴリ型、時間型、連続型のいずれかに分類され、これによりどのチャートの次元に使用できるかが決まります。詳細は前述のチャートウィジェットの各セクションを参照してください。
- カテゴリ型 -
BIT, BITSTRING, BOOLEAN, BOOL, LOGICAL, BLOB, BYTEA, BINARY, VARBINARY, UUID, VARCHAR, CHAR, BPCHAR, TEXT, STRING - 時間型 -
DATE, TIME, TIMESTAMP, DATETIME, TIMESTAMP WITH TIME ZONE, TIMESTAMPTZ - 連続型 - それ以外のすべての型です。例えば
INTEGER, FLOAT, DOUBLE, BIGINT, DECIMALなど。
チャート内の列参照(x、y、d、r)は、大文字と小文字を区別してヘッダー名と完全に一致させる必要があります。
スタイルとテーマのオーバーライド
ダッシュボード全体の配色はconfig.style.widgetで一度だけ設定し、個別にオーバーライドしていないすべてのウィジェットに適用されます。
color- デフォルトの文字色です。backgroundColor- デフォルトのダッシュボード背景色です。primaryColor- 前景・アクティブ系列の色です。ヘッダーやクロスフィルタ適用時の系列に使用されます。primaryColorSubtle- cell、dot、hexbinの各チャートで使用されるカラーグラデーションの低い側の色です。secondaryColor- 背景・未フィルタ系列の色です。
どのウィジェットも、自身のJSONノード上で直接、表示設定をオーバーライドできます。対象はbackgroundColor、color、padding、borderRadius、borderWidth、borderColor、shadowです。以下の例では、ダッシュボードの他の部分は共通テーマを維持したまま、1つのチャートだけ独自の色と角丸をオーバーライドしています。
{
"type": "dash_chart",
"datasetId": "Orders",
"chartType": "hexbin",
"x": "amount",
"y": "quantity",
"backgroundColor": "#F5F0FF",
"borderRadius": "12px",
"borderWidth": "1px",
"borderColor": "#6E2BDC",
"shadow": true
}完全な例
ヘッダー、横に並んだ2つのチャート、テーブルを組み合わせた小さなダッシュボードの例です。すべて1つのデータセットから読み込んでいます。
{
"config": {
"type": "dashboard",
"style": {
"widget": {
"color": "#000000",
"backgroundColor": "#FFFFFF",
"primaryColor": "#6E2BDC",
"primaryColorSubtle": "#E2D5F8",
"secondaryColor": "#CCCCCC"
}
}
},
"data": {
"type": "dash",
"children": [
{ "type": "dash_text", "text": "Orders Overview", "fontSize": "2vw", "justifyContent": "0" },
{
"type": "dash_stacker_hor",
"children": [
{ "type": "dash_chart", "datasetId": "Orders", "chartType": "bar", "x": "region", "dataFunction": "count" },
{ "type": "dash_chart", "datasetId": "Orders", "chartType": "cell", "x": "region", "y": "category", "dataFunction": "count" }
]
},
{ "type": "dash_table", "datasetId": "Orders" }
]
}
}