ララベルノヴァメトリクス


私たちのWebアプリケーションはLaravelによって供給されているので、我々は我々の管理者のためのカスタムダッシュボードを構築する必要はありませんので、ララヴィルノヴァをインストールする意味があります.NOVAは適切にセットアップされ、適切に設定されたときに、任意のモデルのためのフルクルーズを許可する管理者のダッシュボードです.それはかなり強力です、そして、私はそれと深さにあまり行きません、しかし、管理が望んでいる1つのものはあなたがログインするとき、ダッシュボードの「ウィジェット」のためです.それで、彼らへのウィジェットは彼らが要求するどんなタイプのデータも示す何かです.彼らはワードプレスの背景から来るので、ウィジェットです.すべてをこれをしなければならないプログラマーにとって、それはNOVAメトリックです.
“ノヴァメトリックはすぐにあなたのアプリケーションの主要なビジネス指標の洞察力を得ることができます.例えば、あなたは、1日あたりのアプリケーションに追加されたユーザーの合計数を表示するためにメトリックを定義するか、または毎週販売の量.”これはノヴァドキュメントから直接撮影され、計量の3種類がご利用いただけます.
  • value -単一の値を表示する
  • トレンド-ライングラフで時間をかけて値を表示します
  • パーティション-値の円グラフを表示する
    今日のポストのために、そして、管理からの多数の要求のために、私は値メトリックを使用しています.
  • 私の値のメトリックは多かれ少なかれ値を計算するために同じドロップダウン値を持ちます.我々は、毎月(Jan/2月/マー/etc ..)を思いつきましたそして、過去7日間.このことについての唯一の本当の警告は、来年に来るということです.それはそれである.
    <?php
    
    namespace App\Nova\Metrics;
    
    use App\Models\User;
    use Illuminate\Http\Request;
    use Laravel\Nova\Metrics\Value;
    
    class NewUsers extends Value
    {
        /**
         * Calculate the value of the metric.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return mixed
         */
        public function calculate(Request $request)
        {
            return $this->count($request, User::class);
        }
    
        /**
         * Get the ranges available for the metric.
         *
         * @return array
         */
        public function ranges()
        {
            return [
                30 => '30 Days',
                60 => '60 Days',
                365 => '365 Days',
                'TODAY' => 'Today',
                'MTD' => 'Month To Date',
                'QTD' => 'Quarter To Date',
                'YTD' => 'Year To Date',
            ];
        }
    
        /**
         * Get the URI key for the metric.
         *
         * @return string
         */
        public function uriKey()
        {
            return 'new-users';
        }
    }
    
    値メトリックを作成するとき、これは作成されるデフォルトクラスです.メトリックのタイトルとして表示されるものを変更したい場合は、name ()メソッドを追加できます.Calculateメソッドは、可能なメソッドのいずれかを呼び出し、値を返します.
    count ()
    result ()
    平均()
    umm ()
    max ()
    min ()
    そして、それらはすべて、あなたが時間範囲を取って、DBを照会して、値を得るのと同じように行動します.私はいくつかのより具体的な項目を照会するためにそれらを修正するつもりです、そして、私は私の質問/必要などんな追加の数学でも単一の価値を得ているので、結果を使用するだけです.私は私が作成している各メトリックの上に行くつもりはないが、私は深さのいずれかを私はそれらを使用するように選択を表示するに行くつもりです.
    私が追跡するよう求められた1つのメトリックはAverage Trip Cost . アイデアは、任意の予約は、かどうかを拒否/受け入れ、平均コストを取得することです.その予約がキャンセルされる場合でも、その期間範囲期間の間、予約はちょうどドラフトでなく、それを加えて、平均を得ます.
    これが私の範囲です.
        public function ranges()
        {
            return [
                '7'             => '7 Days',
                '01/01/2021'    => 'January 2021',
                '02/01/2021'    => 'February 2021',
                '03/01/2021'    => 'March 2021',
                '04/01/2021'    => 'April 2021',
                '05/01/2021'    => 'May 2021',
                '06/01/2021'    => 'June 2021',
                '07/01/2021'    => 'July 2021',
                '08/01/2021'    => 'August 2021',
                '09/01/2021'    => 'September 2021',
                '10/01/2021'    => 'October 2021',
                '11/01/2021'    => 'November 2021',
                '12/01/2021'    => 'December 2021',
            ];
        }
    
        public function calculate(NovaRequest $request)
        {
            $range = $this->getRange($request->range);
            $bookings = Booking::where('status', '!=', 'draft')
                ->whereDate('created_at', '>=', $range['start'])
                ->whereDate('created_at', '<=', $range['end'])
                ->get();
            $totalCost = 0;
            foreach ($bookings as $booking) {
                if ($booking->cost) {
                    $totalCost += $booking->cost;
                } else {
                    $totalCost = $booking->trip->cost + $totalCost;
                }
            }
            if ($bookings->count() < 1) {
                $average = 0;
            } else {
                $average = round(($totalCost / $bookings->count()) / 100, 2);
            }
            return $this->result($average)->format('0,0')->prefix('$');
        }
    
    あなたが私の計算方法で見ることができるように、私はこれを持ちます$this->getRange($request->range) メソッド.
    well $ request -> rangeは選択されたドロップダウンの値です(よくタイムゾーンが付属していますが、目的のためには必要ありません).
    では、Getrangeメソッドは何ですか?その特定の方法でよく、私は文字列値をとり、カーボンを使用して開始/終了日付を返すようにします.そこでここでは
        public function getRange(string $range)
        {
            if ($range == '7') {
                return [
                    'start' => now()->subDays(7),
                    'end'   => now()
                ];
            }
            return [
                'start' => Carbon::parse($range)->startOfMonth(),
                'end'   => Carbon::parse($range)->endOfMonth()
            ];
        }
    
    それで、それが過去7日の選択であるならばm/d/y フォーマットとそれは新しい炭素値を作ります.
    今、私は新しく作成された$range デフォルトは、メソッドを計算します.上記の計算から、私は私が得る$範囲を得た後、それを見ることができます$bookings それは範囲開始/終了の間に落ちるドラフトにありません.私はループを通して一緒にすべての合計を追加する必要があります.私が条件付き声明を持っている理由は、我々が最初にこれを構築したとき、我々はダム間違いをして、予約に旅行を添付しました(我々はまだそうします)、しかし、我々は旅行の予約コストを計算しました.それで、我々は良い小さい電話の後、学びました、そして、予約モデルに旅行費用を加えました.
    だから今、私たちは、予約の数でそれを分割し、我々は平均的な円周率の円周率を持っている合計を持っている!これは、我々が我々がちょうど0に平均をセットして、動かないならば、我々が予約をするならば、明らかです.ヘックyea人々.私たちはそれをやった!私はまた、それがよく見えるようにドル記号を追加するためにプレフィックスの組み込み方法を使用しました.下の写真をチェックしてください.



    だから私のようなカスタムクエリを使用しない場合は、実際には最後の値に過去の比較まで、しかし、私の目的管理のためのいくつかのクールなメトリックを持つことができる単一の値が大好きです.それはちょうどきれいに見えないにもかかわらず、それは彼らのためのスーパーfuncationalであり、私は基本的に任意のメートル法(ウィジェット)は、彼らが必要とされる計算を持っている限り、それを構築することができます.過去に私は個人的には、“視覚的な”アイテムと円グラフのような人々は良いタッチされているので、パーティションのメトリクスが一番好きだった.あなたがLaravelを使用していて、管理ダッシュボードを必要とするならば、Novaが提供するものを確かに見てください.あなたはHoenslyそれを打つことはできません、100ドルドルを支払うか、それが何であれ、そして生活のために無料で更新します.