Sprucely title background

データ形式

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です。ドロップシャドウを追加します。

チャートウィジェット

すべてのチャートは同じフィールドを共有していますが、xydrのうちどれを使うか、また各フィールドがどの列タイプを受け付けるかはチャートタイプによって異なります。サポートされている各チャートタイプについては、以下でそれぞれ個別のセクションを設け、共通の小さなサンプルデータセットから描画したライブ例とともに説明します。

  • 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を指定できます。yrは使用されません。

折れ線グラフ

xには連続型または時間型の列を指定できます(カテゴリ型は不可)。dは連続型である必要があり、dataFunctionがcount以外の場合にのみ使用されます。季節性はサポートされていません。yrは使用されません。

面グラフ

xには連続型または時間型の列を指定できます(カテゴリ型は不可)。dは連続型である必要があり、dataFunctionがcount以外の場合にのみ使用されます。季節性はサポートされていません。yrは使用されません。

ヒートマップ

xyはいずれもカテゴリ型の列、または季節性を有効にした時間型の列(xにはseasonXyにはseasonY)である必要があります。dは連続型である必要があり、dataFunctionがcount以外の場合にのみ使用されます。seasonYを使用する場合、xが既にカテゴリ型の次元として解決されている必要があります。つまり、本来カテゴリ型の列であるか、seasonXが設定された時間型の列である必要があります。rは使用されません。

バブルチャート

xyには連続型または時間型の列を指定できます。rdはどちらも連続型である必要があり、カテゴリ型や時間型は使用できません。季節性はサポートされていません。バブルチャートは数百行程度までのデータセットで最も見やすくなります。

ヘックスビン

xyにはいずれも連続型または時間型の列を指定できます(カテゴリ型は不可)。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_startrow_endcol_startcol_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など。

チャート内の列参照(xydr)は、大文字と小文字を区別してヘッダー名と完全に一致させる必要があります。

スタイルとテーマのオーバーライド

ダッシュボード全体の配色はconfig.style.widgetで一度だけ設定し、個別にオーバーライドしていないすべてのウィジェットに適用されます。

  • color - デフォルトの文字色です。
  • backgroundColor - デフォルトのダッシュボード背景色です。
  • primaryColor - 前景・アクティブ系列の色です。ヘッダーやクロスフィルタ適用時の系列に使用されます。
  • primaryColorSubtle - cell、dot、hexbinの各チャートで使用されるカラーグラデーションの低い側の色です。
  • secondaryColor - 背景・未フィルタ系列の色です。

どのウィジェットも、自身のJSONノード上で直接、表示設定をオーバーライドできます。対象はbackgroundColorcolorpaddingborderRadiusborderWidthborderColorshadowです。以下の例では、ダッシュボードの他の部分は共通テーマを維持したまま、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" }
    ]
  }
}