Liquid、JavaScriptなどに関する質問
ShopifyのGraphQL APIでバリアントごとの月次売り上げを集計する場合、どのようにするのが最適でしょうか。
NET売り上げを集計する場合、ordersを取得して、バリアントのSKUとrefundsが集計できれば良さそうだと思っているのですが、この集計方法だとordersの件数が増えたときにコストが足りなくなってしまいそうだと考えています。
query ($cursor: String) { orders(first: 250, after: $cursor, query: "updated_at:>2024-11-01 updated_at:<2024-1-01") { pageInfo { hasNextPage endCursor } nodes { id updatedAt lineItems(first: 250) { nodes { variant { sku price } name quantity } } refunds { refundLineItems(first: 250) { nodes { lineItem { variant { sku } } quantity } } } } } }
Graph QLでは一括クエリが存在しているとのことで、以下のように一括クエリにすれば良いかと考えたのですが
mutation { bulkOperationRunQuery( query: """ { orders(query: "updated_at:>2024-11-01 updated_at:<2024-1-01") { edges { node { id updatedAt lineItems(first: 250) { edges { node { variant { sku price } name quantity } } } refunds { refundLineItems(first: 250) { edges { node { lineItem { variant { sku } } quantity } } } } } } } } """ ) { bulkOperation { id status } userErrors { field message } } }
この場合、refundsのなかでさらにrefundsLineItemsを取ることができなくなってしまうようで、集計できなくなってしまいました。
"message": "リストフィールド内の接続フィールドを含むクエリは、現在サポートされていません。"
何か良い解決方法があればご教授いただければと思います。
解決済! ベストソリューションを見る。
成功
バリアントごとの月次売り上げを集計するという要件であれば、bulkOperationRunQueryを使う選択がよいと思います。
また、エラーはOrders.refundsの仕様上避けられませんので、Ordersのクエリ内でrefundsLineItemsを取得できないと思います。
解決方法ですが、上記の要件においてそもそもrefundsは必要でしょうか?
Orders.lineItems のcurrentQuantity は返品を考慮した数になっていたと思います。
成功
バリアントごとの月次売り上げを集計するという要件であれば、bulkOperationRunQueryを使う選択がよいと思います。
また、エラーはOrders.refundsの仕様上避けられませんので、Ordersのクエリ内でrefundsLineItemsを取得できないと思います。
解決方法ですが、上記の要件においてそもそもrefundsは必要でしょうか?
Orders.lineItems のcurrentQuantity は返品を考慮した数になっていたと思います。
なるほど、LineItemsの方に要件を満たすフィールドが入っているのですね。
今回の要件だとこれで問題なさそうです。ありがとうございます!