2

ユーザーにさらにデータを表示するために大まかな計算を基にしたい販売量 (基本的には店舗が生成している金額) のおおよその値を取得できる方法を探しています。

(オプションA)データベースに直接クエリを実行して結果をキャッシュできることはわかっていますが、Magentoはすでにそれを行っており、使用できる場所にキャッシュしていますか? (オプション B)、Magento のように生涯売上と平均売上の値をどこかに保存します。

ここでは、日次/週次/月次の売上高の平均、または平均注文額と日次/週次/月次の平均注文などのデータで十分です。

オプション A がここに行く唯一の方法である場合、このデータをどのように照会すればよいですか? 次のような例を見てきました。

  • Mage::getResourceModel('sales/order_collection')
  • Mage::getModel('sales/order')->getCollection()

私のニーズに対して、どちらがより高速で軽量ですか? また、それぞれの場合にクエリに使用できるパラメーターを理解できるように、それらを使用する詳細なまたはよく説明された例を実際に見ることができるリンクはありますか?


更新: 上記の 2 つの方法の違いを明確に理解していませんが、一方が他方よりも抽象化されており、おそらくもう一方を内部で使用していると思いますが、よくわかりません。とにかく、このコード スニペットでデータを取得していますが、日付範囲のデータをフィルター処理する際に問題があります。

<?php

require_once 'app/Mage.php';

#umask(0);

Mage::app('default');

$orderTotals = Mage::getModel( 'sales/order' )->getCollection()
->addAttributeToFilter( 'status', Mage_Sales_Model_Order::STATE_COMPLETE )
->addAttributeToFilter( 'status', 'complete' )
//->addAttributeToFilter( 'created_at', array( 'from'  => date( 'Y-m-d', strtotime( '-100 days' ) ) ) )
//->addAttributeToFilter( 'created_at', array( 'from' => date( 'Y-m-d', strtotime( '-100 days' ) ), 'to' => date( 'Y-m-d' ) ) )
->addAttributeToSelect( 'grand_total' )
->getColumnValues( 'grand_total' )
;

$totalSum = array_sum( $orderTotals );
$totalSum = Mage::helper( 'core' )->currency( $totalSum, true, false );

echo $totalSum . "\n";

更新: このコード スニペットは現在機能しています。範囲内の注文があったのですが、注文状況が「処理中」で見れませんでした。この質問からスニペットを取得しました。

上記の2つの方法の違いと、どちらを使用するのが良いかについての説明をまだ探していますか?

4

2 に答える 2

1

私のように誰かが Google 経由でここに来た場合に備えて、この質問は、私が欲しかったレポート ページを作成する動機になりました。私は通常、組み込みの MVC を使用せず (以下で詳しく説明します!)、代わりに var/export などにページを配置します。sales_flat_order*すべてのおよびsales_flat_invoice*テーブルを調べて、販売および出荷した製品を表すソリューションを見つけた後、最終的に以下のクエリを思いつきました。

Sales report for this week:

SELECT sfi.grand_total as 'total',sfii.base_row_total as 'sales', sfii.sku as 'sku', sfii.qty as 'qty', sfo.increment_id as 'order' 
FROM sales_flat_invoice_item sfii
LEFT JOIN sales_flat_invoice sfi ON sfii.parent_id = sfi.entity_id
LEFT JOIN sales_flat_order sfo ON sfi.order_id = sfo.entity_id
WHERE sfo.status = 'complete'
AND sfi.updated_at > "2013-06-01"

日付は先週の金曜日の深夜です。注: sfi.*SELECT に追加すると、合計に対して配送料と税金を再確認するための計算を行うことができます。問題sales_flat_orderは、 table が当座預金口座の現金を表していないことです。私たちは発生主義ではありません (そしておそらくほとんどの中小企業はそうではありません)。

レポート スクリプトでは、値のテーブルも作成し、Google Chartsを使用して見栄えを良くしています。以下のページはほぼ瞬時に読み込まれます。 上記のクエリから生成されたレポートのスクリーンショット

追加するために編集: 上記のクエリを作成しているときに、コレクションなどの適切な手段を使用して構築された以前の注文クエリ ツールが、明らかにできる理由もなく膨大な数の注文を見逃していることを発見しました。仕事を正しくやり遂げるための唯一の方法は、自分でやるしかないとますます感じています。

于 2013-06-05T16:50:54.010 に答える
0

@管理者 -> レポート -> 販売をご覧になりましたか

/app/code/core/Mage/Adminhtml/controllers/Report/SalesController.php

/app/code/core/Mage/Adminhtml/Block/Report/Sales/Sales/Grid.php

コレクション: 'sales/report_order_collection'

テーブル:

sales_bestsellers_aggregated_*

sales_order_aggregated_*

report_viewed_product_*

于 2012-12-01T20:04:55.327 に答える