For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/ja/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/ja/llms-full.txt, and this page is available as Markdown at https://docs.dataplatform.ovh.net/ja/sdk/api-qb-transformers.md.
  • 🇯🇵 日本語
  • Analytics Manager クエリ用のトランスフォーマーを作成する

    Warning

    再作業が保留中で、納期はありません。 Front App SDK (ReactJS) と Front API SDK (NodeJS) の両方が置き換えられます。このページは現在のリリースを文書化し、置き換えが出荷されるまで正確であり、維持されます。これに対して書かれたコードは引き続き動作します。

    トランスフォーマーは、クエリが Analytics Manager に送信される直前に、クエリを拡張して変更します。

    デフォルトのフローでは、デフォルトのトランスフォーマーは API のクエリモジュール (/forepaas/qb) によって呼び出され、クエリのフィルターとスケールに ダイナミックパラメータの値を注入するために使用されます。

    典型的なユースケース

    トランスフォーマーがどのように動作し、作成できるかをよりよく理解するために、データプロジェクトでよく見られる例を使用しましょう。

    例えば、表示されるデータのほとんどが同じdate属性でフィルタリングされているとします。しかし、一部のテーブルにはdate属性ではなく、代わりにprevious_date属性があると想像してください。 デフォルトの動作では、このテーブルに対するクエリはこのクエリ用のテーブルが見つかりませんエラーを返します。

    これを解決するには、カスタムトランスフォーマーが必要です。


    カスタムトランスフォーマーを作成する

    カスタムエンドポイントと同様に、新しいトランスフォーマーを作成するには、特定のディレクトリ:/src/qb/transformersにファイルを追加する必要があります。

    クエリの各部分に対して3種類のトランスフォーマーが利用可能です:

    • filter: filter.jsファイルを作成できます
    • data: data.jsファイルを作成できます
    • scale: scale.jsファイルを作成できます

    上記のケースでは、./forepaas/qb/transformers/filter.jsからデフォルトのものをコピーして./src/qb/transformers/filter.jsを作成します

    ./src/qb/transformers/filter.js

    module.exports = {
      default:(query,{reference,value})=>{
        if(value === null) return Promise.resolve(query)
        if(!Array.isArray(value)) value = (value||"").split(';')
        query.filter = query.filter || {}
    
        if (reference.search(/^range_/) !== -1) {
          let rangeref = reference.replace(/^range_/, '')
          query.filter[rangeref] = query.filter[rangeref] || {}
          if(Array.isArray(value)) value = value[0]
          if(value) query.filter[rangeref].between = value.split(',')
          return Promise.resolve(query)
        }
    
        query.filter[reference] = query.filter[reference] || {}
        query.filter[reference].in = query.filter[reference].in || []
        query.filter[reference].in = query.filter[reference].in.concat(value)
        return Promise.resolve(query)
      }
    }

    トランスフォーマーは、少なくとも1つのdefaultメソッドを持つオブジェクトです。 このメソッドには、次のパラメータが渡されます:

    • query: 関数によって変更された完全なクエリ
    • reference: Front Appでダイナミックパラメータの構成で定義されたもの
    • value: Front Appによって渡された値

    この関数は、クエリと共に渡された各ダイナミックパラメータに対して呼び出されます。

    この時点で、Front API は同じ動作を維持し、デフォルトのものではなく、このカスタムトランスフォーマーを通過します。


    Front App を構成する

    これを踏まえて、通常のリクエストを見てみましょう。 ここにはチャートの構成があります:

    {
      ...
      "chart": {
        "requestId": "xyz123-xyz123-xyz123-xyz123-xyz123",
        "dynamic-parameters": [
          "datepicker"
        ]
      },
      ...
    }

    生成されたHTTPSリクエストは、次のボディを持つ/qb/query/xyz123-xyz123-xyz123-xyz123-xyz123エンドポイントへのPOST呼び出しです:

    {
      "dynamic_parameters": [
        {
          "type": "filter",
          "transform": "default",
          "value": [
            "1582502400,1582588799"
          ],
          "params": [],
          "reference": "range_date"
        }
      ]
    }

    必要な機能を得るためには、2つの点のみを変更する必要があります:

    • default: カスタム値、例えばchangeRefに変更する必要があります
    • params: カスタムトランスフォーマーがそれを使用できるようにprevious_dateを含める必要があります。

    dynamic-parameters構成により、これらの変更の両方を行うことができます。 チャートの構成に戻り、トランスフォーマーの種類は|を使用して設定され、params:を使用して設定されます。

    {
      ...
      "chart": {
        "requestId": "xyz123-xyz123-xyz123-xyz123-xyz123",
        "dynamic-parameters": [
          "datepicker|changeRef:range_previous_date"
        ]
      },
      ...
    }

    そして、POSTボディは次のようになります:

    {
      "dynamic_parameters": [
        {
          "type": "filter",
          "transform": "changeRef",
          "value": [
            "1582502400,1582588799"
          ],
          "params": ["rnge_previous_date"],
          "reference": "range_date"
        }
      ]
    }

    これで、filterトランスフォーマーでそれを処理する必要があります。


    トランスフォーマーをカスタマイズする

    オブジェクトにdefaultと同じ入力を取るchangeRefという新しいメソッドを実装する必要があります。上記のparams配列。

    module.exports = {
      ...
      changeRef: (query, { reference, value, params }) => {}
    }

    この場合、defaultメソッドを因数分解するのに適しています。そのため、changeRefreferenceに対して異なるルールを使用してそれを呼び出すことで実装できます。

    したがって、完全な/src/qb/transformers/filter.jsは次のようになります:

    const defaultTransformer = (query, { reference, value }) => {
      if (value === null) return Promise.resolve(query)
      if (!Array.isArray(value)) value = (value || "").split(';')
      query.filter = query.filter || {}
    
    
      if (reference.search(/^range_/) !== -1) {
        let rangeref = reference.replace(/^range_/, '')
        query.filter[rangeref] = query.filter[rangeref] || {}
        if (Array.isArray(value)) value = value[0]
        if (value) query.filter[rangeref].between = value.split(',')
        return Promise.resolve(query)
      }
    
      query.filter[reference] = query.filter[reference] || {}
      query.filter[reference].in = query.filter[reference].in || []
      query.filter[reference].in = query.filter[reference].in.concat(value)
      return Promise.resolve(query)
    }
    
    module.exports = {
      default: defaultTransformer,
      changeRef: (query, { reference, value, params }) => {
        return defaultTransformer(query, {
          reference: params[0] || reference,
          value
        })
      }
    }

    changeRefメソッドはdefaultTransformer関数を呼び出し、referenceを変更します。


    変換を確認する

    最後のステップは、クエリがchangeRefオプションを使用していることを確認することです。最終的に、チャートによって送信されるクエリのボディは次のようになります:

    {
      "filter": {
        "previous_date": {
          "between": ["1582502400","1582588799"]
        }
      }
    }

    💡 これらの技術をfilterscale、またはdataFront App のダイナミックパラメータと組み合わせて使用することで、アプリを徹底的にカスタマイズできます!

    さらに詳しく知る

    ソリューションを実装するためのトレーニングや技術サポートが必要な場合は、営業担当者にお問い合わせください、またはこのリンクをクリックして、プロフェッショナルサービスの専門家に見積もりを依頼し、プロジェクトのカスタム分析を依頼してください。

    質問をする、フィードバックを送信する、およびData Platformを構築しているチームと直接交流するには、専用のDiscordチャネルにアクセスしてください。

    OVHcloudサービスについてサポートが必要な場合は、ヘルプセンターでリクエストを作成してください。

    ユーザーコミュニティに参加してください。