first commit
This commit is contained in:
164
minimax-xlsx/pivot.md
Normal file
164
minimax-xlsx/pivot.md
Normal file
@@ -0,0 +1,164 @@
|
||||
---
|
||||
name: pivot
|
||||
description: "Operational playbook for building PivotTables with the MiniMaxXlsx CLI. Treat this as the source of truth before invoking the pivot subcommand."
|
||||
---
|
||||
|
||||
# Pivot Operations Manual
|
||||
|
||||
Use this guide when a workbook needs grouped aggregation, cross-axis summaries, or interactive drilldown.
|
||||
|
||||
## 1) Decision Gate
|
||||
|
||||
Choose PivotTable mode when one or more conditions are true:
|
||||
|
||||
- The request explicitly asks for a pivot table
|
||||
- The dataset is large enough that formula-only summaries become hard to maintain
|
||||
- The user needs category-by-category totals, count splits, or two-dimensional breakdowns
|
||||
- The output must support manual filtering and regrouping inside Excel
|
||||
|
||||
Do not force PivotTable mode for trivial one-line totals. Use formulas for simple, static math.
|
||||
|
||||
## 2) Input Readiness Contract
|
||||
|
||||
Before running any pivot command, confirm:
|
||||
|
||||
- Header row exists and every header is unique
|
||||
- Source block has no merged cells
|
||||
- No blank row breaks inside the data block
|
||||
- Aggregation fields are numeric where required
|
||||
- Workbook formulas already passed structural checks
|
||||
|
||||
Recommended preflight sequence:
|
||||
|
||||
```bash
|
||||
./scripts/MiniMaxXlsx refcheck working.xlsx
|
||||
./scripts/MiniMaxXlsx info working.xlsx --pretty
|
||||
```
|
||||
|
||||
`info` output is authoritative. Never guess sheet names or ranges manually.
|
||||
|
||||
## 3) Seven-Checkpoint Flow
|
||||
|
||||
Follow this exact flow to avoid broken files:
|
||||
|
||||
1. **Assemble base workbook** with openpyxl (cover, raw data, helper sheets)
|
||||
2. **Save once** and run `refcheck`
|
||||
3. **Inspect metadata** using `info --pretty`
|
||||
4. **Draft pivot command** from inspected headers and ranges
|
||||
5. **Run pivot as final write operation**
|
||||
6. **Run structural validation** with `check`
|
||||
7. **Deliver without reopening output in openpyxl**
|
||||
|
||||
Why checkpoint 7 matters: a second openpyxl save can repackage XML relationships and invalidate pivot internals.
|
||||
|
||||
## 4) Command Surface
|
||||
|
||||
### Required arguments
|
||||
|
||||
| Argument | Meaning | Example |
|
||||
|---|---|---|
|
||||
| `input.xlsx` | Source workbook to read | `working.xlsx` |
|
||||
| `output.xlsx` | New workbook to generate | `deliverable.xlsx` |
|
||||
| `--source` | Full source range with sheet prefix | `"RevenueLog!B3:H920"` |
|
||||
| `--location` | Pivot anchor cell | `"PivotBoard!C4"` |
|
||||
| `--values` | Metric + reducer list | `"NetAmount:sum,OrderNo:count"` |
|
||||
|
||||
### Optional arguments
|
||||
|
||||
| Argument | Meaning | Example |
|
||||
|---|---|---|
|
||||
| `--rows` | Row grouping fields | `"Region,Channel"` |
|
||||
| `--cols` | Column grouping fields | `"Quarter"` |
|
||||
| `--filters` | Page filters | `"Year,Owner"` |
|
||||
| `--name` | Pivot object name | `"QuarterlyMix"` |
|
||||
| `--style` | Theme (`monochrome` / `finance`) | `"monochrome"` |
|
||||
| `--chart` | Companion chart (`bar` / `line` / `pie`) | `"line"` |
|
||||
|
||||
Supported reducers: `sum`, `count`, `avg`, `average`, `min`, `max`.
|
||||
|
||||
## 5) Parameter Assembly Pattern
|
||||
|
||||
Build parameters in this order to reduce mistakes:
|
||||
|
||||
1. `--location` (destination first)
|
||||
2. `--values` (what to aggregate)
|
||||
3. `--source` (where data comes from)
|
||||
4. `--rows` / `--cols` / `--filters` (how to slice)
|
||||
5. `--name` / `--style` / `--chart` (presentation)
|
||||
|
||||
This ordering is intentional: start from reporting target, then metric intent, then data origin.
|
||||
|
||||
## 6) Fresh Example Set
|
||||
|
||||
### Scenario A: Operations latency rollup
|
||||
|
||||
```bash
|
||||
./scripts/MiniMaxXlsx pivot \
|
||||
ops_raw.xlsx ops_pivot.xlsx \
|
||||
--location "OpsPivot!B5" \
|
||||
--values "LatencyMs:avg,RequestId:count" \
|
||||
--source "ApiEvents!A1:G1800" \
|
||||
--rows "Service,Cluster" \
|
||||
--filters "ReleaseTag" \
|
||||
--name "LatencyOverview" \
|
||||
--style "monochrome" \
|
||||
--chart "line"
|
||||
```
|
||||
|
||||
### Scenario B: Clinic visit mix by month
|
||||
|
||||
```bash
|
||||
./scripts/MiniMaxXlsx pivot \
|
||||
clinic_daily.xlsx clinic_report.xlsx \
|
||||
--location "VisitSummary!A4" \
|
||||
--values "VisitFee:sum,VisitId:count" \
|
||||
--source "VisitLog!A1:F2400" \
|
||||
--rows "Department" \
|
||||
--cols "VisitMonth" \
|
||||
--name "DeptVisitMix" \
|
||||
--style "finance" \
|
||||
--chart "bar"
|
||||
```
|
||||
|
||||
### Scenario C: Warehouse damage composition
|
||||
|
||||
```bash
|
||||
./scripts/MiniMaxXlsx pivot \
|
||||
warehouse_events.xlsx warehouse_dashboard.xlsx \
|
||||
--location "LossShare!D3" \
|
||||
--values "LossCost:sum" \
|
||||
--source "DamageRecords!A1:E460" \
|
||||
--rows "LossType" \
|
||||
--filters "Warehouse" \
|
||||
--name "LossStructure" \
|
||||
--chart "pie"
|
||||
```
|
||||
|
||||
## 7) Validation and Release Rule
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
./scripts/MiniMaxXlsx check deliverable.xlsx
|
||||
```
|
||||
|
||||
- Exit code `0`: release candidate
|
||||
- Non-zero: do not patch the xlsx in place; regenerate from corrected source flow
|
||||
|
||||
## 8) Failure Playbook
|
||||
|
||||
| Symptom | Likely Cause | Action |
|
||||
|---|---|---|
|
||||
| Pivot shows no records | Source range clipped | Re-run `info`, expand `--source` to full block |
|
||||
| "Field not found" | Header mismatch or typo | Copy header text directly from `info` output |
|
||||
| Validation fails on pivot nodes | Damaged pivot relationships | Rebuild from base workbook, run pivot once as final step |
|
||||
| CLI execution fails unexpectedly | Workbook locked by another app | Close Excel/WPS process and retry |
|
||||
|
||||
## 9) Hard Prohibitions
|
||||
|
||||
- Do not manually construct pivot XML
|
||||
- Do not run pivot before all openpyxl sheet edits are complete
|
||||
- Do not open and save pivot output with openpyxl
|
||||
- Do not deliver files that fail `check`
|
||||
|
||||
If any prohibition is violated, regenerate the workbook end-to-end.
|
||||
Reference in New Issue
Block a user