PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]); // ---------- 対象月 ---------- // デフォルト:先月 $targetMonth = isset($_GET['month']) ? $_GET['month'] : date('Y-m', strtotime('first day of last month')); // 先月 $prevMonth = date('Y-m', strtotime($targetMonth . ' -1 month')); $labelThisMonth = date('Y年n月', strtotime($targetMonth . '-01')); $labelPrevMonth = date('Y年n月', strtotime($targetMonth . ' -1 month')); // ---------- 表示対象企業(順番固定) ---------- $displayCompanies = [ '株式会社フレスコ', '三菱地所ホーム', 'OPEC', 'GENERAL', '太平ハウス・ラボ', 'ジャーブネット', 'あさひハウジングセンター', '住友不動産ハウジング', 'イエタス', 'ワンズ・サポート・システム', 'ITC', '旭化成建材', 'WIT', '福工房', '株式会社高砂建設', '京阪電鉄不動産', 'よかタウン', '篠原商店' ]; // ---------- 企業ID → 企業名(ログイン用) ---------- $companyMap = [ 'Fresco'=>'株式会社フレスコ', 'MJHOME'=>'三菱地所ホーム', 'OPEC'=>'OPEC', 'GENERAL'=>'GENERAL', 'houselabo'=>'太平ハウス・ラボ', 'JAHBnet'=>'ジャーブネット', 'AHC'=>'あさひハウジングセンター', 'Sumitomo-rd'=>'住友不動産ハウジング', 'YETUS'=>'イエタス', 'ONESNET'=>'ワンズ・サポート・システム', 'ITC'=>'ITC', 'AKK'=>'旭化成建材', 'WI-TOKYO'=>'WIT', 'fukukobo'=>'福工房', 'takasago'=>'株式会社高砂建設', 'KEIHAN'=>'京阪電鉄不動産', 'yoka-town'=>'よかタウン', 'SHINOHARA'=>'篠原商店' ]; // ---------- GA ---------- $chartData = [ 'Resolution'=>['labels'=>[], 'data'=>[]], 'Browser'=>['labels'=>[], 'data'=>[]], 'OS'=>['labels'=>[], 'data'=>[]], ]; $limits = ['Resolution'=>8,'Browser'=>5,'OS'=>5]; try { // ※ DB接続は省略(既存の $pdo を使用) // ---------- ディスク使用量 ---------- $monthCur = $targetMonth; $monthPrev = date('Y-m', strtotime($monthCur.' -1 month')); $monthPrev2 = date('Y-m', strtotime($monthCur.' -2 month')); $sqlDisk = " SELECT cur.company_name, (cur.total_size_gb - IFNULL(prev.total_size_gb,0)) AS cur_size, (cur.file_count - IFNULL(prev.file_count,0)) AS cur_files, (prev.total_size_gb - IFNULL(prev2.total_size_gb,0)) AS prev_size, (prev.file_count - IFNULL(prev2.file_count,0)) AS prev_files, cur.total_size_gb AS total_size, cur.file_count AS total_files FROM company_file_usage cur LEFT JOIN company_file_usage prev ON cur.company_id = prev.company_id AND prev.target_month = :m1 LEFT JOIN company_file_usage prev2 ON cur.company_id = prev2.company_id AND prev2.target_month = :m0 WHERE cur.target_month = :m2 "; $stmt = $pdo->prepare($sqlDisk); $stmt->execute([':m0'=>$monthPrev2,':m1'=>$monthPrev,':m2'=>$monthCur]); $diskRows = $stmt->fetchAll(); // company_name をキーに $diskMap = []; foreach ($diskRows as $r) { $diskMap[$r['company_name']] = $r; } // ---------- ログイン回数 ---------- $sqlLogin = " SELECT company_id, SUM(CASE WHEN target_month=:m1 THEN login_ok_cnt ELSE 0 END) AS cur_ok, SUM(CASE WHEN target_month=:m1 THEN login_ng_cnt ELSE 0 END) AS cur_ng, SUM(CASE WHEN target_month=:m2 THEN login_ok_cnt ELSE 0 END) AS prev_ok, SUM(CASE WHEN target_month=:m2 THEN login_ng_cnt ELSE 0 END) AS prev_ng FROM company_login_stats WHERE target_month IN (:m1,:m2) GROUP BY company_id "; $stmt = $pdo->prepare($sqlLogin); $stmt->execute([':m1'=>$targetMonth,':m2'=>$prevMonth]); $loginRows = $stmt->fetchAll(); // 企業名キーに変換 $loginMap = []; foreach ($loginRows as $r) { if (isset($companyMap[$r['company_id']])) { $loginMap[$companyMap[$r['company_id']]] = $r; } } // ---------- GA ---------- $sqlGA = " SELECT category,label,active_users FROM ga4_monthly_report WHERE report_month=:month ORDER BY category,active_users DESC "; $stmt = $pdo->prepare($sqlGA); $stmt->execute([':month'=>$targetMonth]); $gaRows = $stmt->fetchAll(); foreach ($gaRows as $r) { $chartData[$r['category']]['labels'][] = $r['label']; $chartData[$r['category']]['data'][] = $r['active_users']; } foreach ($limits as $k=>$v) { $chartData[$k]['labels'] = array_slice($chartData[$k]['labels'],0,$v); $chartData[$k]['data'] = array_slice($chartData[$k]['data'],0,$v); } } catch (PDOException $e) { exit('DB Error: '.$e->getMessage()); } ?> <?= htmlspecialchars($labelThisMonth) ?> 月報

月報

① ディスク使用量

企業名 合計
利用量(GB)ファイル数 利用量(GB)ファイル数 利用量(GB)ファイル数

② ログイン回数

企業名
成功失敗成功失敗

③ Google Analytics