{{-- Tab: スタンダード --}}
{{-- Row 1: Group headers --}} {{-- スタンダード全体 — 4 cols: MRR累積 + 決済件数 + 日次売上 + 30日平均比. rowspan=2 vì nhóm này KHÔNG có hàng sub-group (新規/更新/解約). --}} {{-- 月払い — 7 cols: 新規3 + 更新3 + 解約1 (KHÔNG có nhóm 合計) --}} {{-- 年間一括払い — 7 cols: 新規3 + 更新3 + 解約1 (KHÔNG có nhóm 合計) --}} {{-- Tổng cột dữ liệu = 4 + 7 + 7 = 18. Dòng 平均 chỉ có 18 {{-- Row 2: Sub-group headers --}} {{-- 月払い sub-groups --}} {{-- 年間一括払い sub-groups --}} {{-- Row 3: Leaf column headers --}} {{-- スタンダード全体 subs --}} {{-- 新規: cột xanh dương --}} {{-- 月払い: 更新 --}} {{-- 月払い: 解約 --}} {{-- 年間一括払い: 新規 --}} {{-- 年間一括払い: 更新 --}} {{-- 年間一括払い: 解約 --}} {{-- Dòng 平均 PHẢI nằm TRONG , ngay dưới hàng sub-header — KHÔNG chuyển xuống cuối (đã xét và bác đề xuất của Redmine #40225): 1. Figma (screens/images/SCR-08-s3-monthly-a/b/c.png) vẽ 平均 ngay dưới header, TRÊN 12 dòng tháng, ở CẢ 3 tab; 合計 mới là dòng cuối (chỉ tab 全体). 2. Ràng buộc kỹ thuật: ở hàng trên phủ xuống chính dòng này, nên dòng 平均 cố tình THIẾU 1 {{-- スタンダード全体 — KHÔNG có ô MRR累積: header MRR累積 đã rowspan="2" phủ xuống đúng dòng này (giống tab 全体数値/プロ và Figma). Thêm ô ở đây sẽ dư 1 cell làm toàn bộ số liệu lệch sang phải 1 cột (Redmine #39508). --}} {{-- 月払い: 新規 --}} {{-- 月払い: 更新 --}} {{-- 月払い: 解約 --}} {{-- 年間一括払い: 新規 --}} {{-- 年間一括払い: 更新 --}} {{-- 年間一括払い: 解約 --}} {{-- スタンダード全体 --}} {{-- 月払い: 新規 --}} {{-- 月払い: 更新 --}} {{-- 月払い: 解約 --}} {{-- 年間一括払い: 新規 --}} {{-- 年間一括払い: 更新 --}} {{-- 年間一括払い: 解約 --}}
日付 スタンダード全体 月払い年間一括払い (ô nhãn 平均 bù cho ô MRR累積 đã bị rowspan phủ) và mỗi dòng tbody có 19 (thêm 日付). Lệch các con số này = bảng tràn/lệch cột (Redmine #39508). --}}
新規 更新 解約新規 更新 解約
MRR累積 決済件数 日次売上 30日平均比決済件数 決済額 30日平均比決済件数 決済額 30日平均比件数決済件数 決済額 30日平均比決済件数 決済額 30日平均比件数
MRR累積. rowspan KHÔNG vượt qua ranh giới thead/tbody ⇒ chuyển xuống tbody sẽ mất ô phủ, mọi số liệu lệch trái 1 cột — đúng bug #39508 đã fix. Muốn đổi vị trí thì phải ĐỒNG THỜI: bỏ rowspan="2" của MRR累積 + thêm lại ô MRR累積 cho dòng này (cho đủ số ô như dòng tháng). Chờ BA chốt trước. --}}
平均@{{ avgStandard.std_count }} @{{ avgStandard.std_daily_sales }} @{{ avgStandard.std_avg_ratio }} @{{ avgStandard.m_new_count }} @{{ avgStandard.m_new_amount }} @{{ avgStandard.m_new_avg_ratio }}@{{ avgStandard.m_renew_count }} @{{ avgStandard.m_renew_amount }} @{{ avgStandard.m_renew_avg_ratio }}@{{ avgStandard.m_cancel_num }}@{{ avgStandard.y_new_count }} @{{ avgStandard.y_new_amount }} @{{ avgStandard.y_new_avg_ratio }}@{{ avgStandard.y_renew_count }} @{{ avgStandard.y_renew_amount }} @{{ avgStandard.y_renew_avg_ratio }}@{{ avgStandard.y_cancel_num }}
@{{ row.month }}@{{ row.std_mrr }} @{{ row.std_count }} @{{ row.std_daily_sales }} @{{ row.std_avg_ratio }} @{{ row.m_new_count }} @{{ row.m_new_amount }} @{{ row.m_new_avg_ratio }}@{{ row.m_renew_count }} @{{ row.m_renew_amount }} @{{ row.m_renew_avg_ratio }}@{{ row.m_cancel_num }}@{{ row.y_new_count }} @{{ row.y_new_amount }} @{{ row.y_new_avg_ratio }}@{{ row.y_renew_count }} @{{ row.y_renew_amount }} @{{ row.y_renew_avg_ratio }}@{{ row.y_cancel_num }}