Skip to main content

メトリクスとは

メトリクスは Cube の Record 型上のフィールドとして利用できる集計関数です。GraphQL クエリ内で直接統計を計算でき、後処理が不要になります。ディメンションフィールドとメトリクスフィールドを同時に選ぶと、選んだディメンションでグループ化し、各グループのメトリクスを計算します。 サポートされるメトリクス:

Record 型上のメトリクスフィールド

メトリクスは各 Cube の Record 型のトップレベルフィールドとして現れます。すべての Cube がすべてのメトリクスをサポートするわけではなく、Cube 定義によります。
メトリクスを使うには、フィールド選択に含めるだけです:
このクエリは DEX 取引をプロトコル名でグループ化し、各グループの件数を返します。

of パラメータ

sumavgminmaxuniq には、どのディメンションを集計するかを指定する of パラメータが必要です。of の値は Cube ごとに生成される列挙で、ディメンションパスの命名規則に従います。

例: DEX 別の買いボリューム合計

レスポンス:

count — 行のカウント

of なしの count は、各グループの行の総数を数えます(COUNT(*) に相当):
ディメンションフィールドと併用すると、グループごとの件数を返します:

uniq — ユニーク数

uniq は SQL の COUNT(DISTINCT column) に対応します。ディメンションのユニーク値の個数を数えるときに使います:
これは、本日 Solana で USDC を取引したユニークな買い手ウォレット数を返します。

selectWhere — HAVING 相当のフィルター

selectWhere は、SQL の HAVING に似て、集計結果に対するフィルターをかけます。グループ化と集計の後に適用され、メトリクスの値に基づいてグループを絞り込めます。
これは取引が100 件超だった DEX プロトコルのみを返し、それ未満のプロトコルは結果から除きます。
selectWhere の値は文字列で渡す必要があります(例: "100" であり 100 ではない)。内部では数値として解釈されます。
selectWhere で使える比較演算子:
既知の制限: selectWhere を使う場合、orderBy は暗黙の GROUP BY に含まれるディメンション(選択しているフィールド)または集計結果を参照する必要があります。GROUP BY に含まれないフィールド(例: Block_Time)で並べ替えるとデータベースエラーになります。

実践例: 上位トレーダー

本日のトークンについて、取引回数が多い上位 10 ウォレットを、買いボリューム合計とユニーク取引数とともに取得:
レスポンス:

複数メトリクスの併用

1 つのクエリで複数のメトリクスフィールドを選べます:
DEX ごとに、取引数、合計ボリューム、価格レンジ、ユニークトレーダー数を 1 クエリで取得できます。

メトリクスと事前集計 Cube の使い分け

よくある質問: DWD Cube でメトリクスを使うべきか、DWM/DWS Cube を直接問い合わせるべきか?
経験則: ユースケースを DWM/DWS がカバーするならそちらを使う — 事前集計でかなり高速です。事前構築 Cube がサポートしないカスタムグループ化や集計ロジックが必要なときだけ、メトリクス付き DWD にフォールバックします。

判断ガイド

Pairs(DWM)を使います。分ごとの open/high/low/close/volume が既に計算済みです。DEXTrades を自前で集計する必要はありません。
Tokens(DWM)を使います。分ごとの取引数、ボリューム、ユニークトレーダーが事前集計されています。
TokenHolders(DWS)を使います。保有者ごとの最新残高が事前計算されており、BalanceUpdates を集計するよりはるかに速いです。
Trade.Dex.ProtocolName でグループ化した DEXTradescount + sum(of: Trade_Buy_Amount) を使います。これ用の事前構築 Cube はないため、DWD メトリクスが適切です。
WalletTokenPnL(DWS)を使います。ウォレット–トークンペアごとの買い/売りボリュームと取引数が事前計算されています。

次のステップ

Data Cubes

25 の Cube とフィールド構造を確認します。

クエリ例

メトリクスと集計を使った実例クエリを見ます。