From 08df85664edd769a23ce4888bd54fd933252b7aa Mon Sep 17 00:00:00 2001 From: Edward Langley Date: Thu, 9 Apr 2026 00:19:00 -0700 Subject: [PATCH] feat: add examples/demo.csv and examples/demo.improv 40-row CSV with obviously-fake sales data (fictional companies like Acme Corp, Wonka Industries, Cyberdyne Systems). demo.improv generated via headless import with Profit formula and a default view showing Region+Product on rows, Date_Month+Measure on columns. Added the import command to the README quick-start section. Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitignore | 1 + README.md | 16 ++++ examples/demo.csv | 41 ++++++++++ examples/demo.improv | 185 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 243 insertions(+) create mode 100644 examples/demo.csv create mode 100644 examples/demo.improv diff --git a/.gitignore b/.gitignore index 8a432d5..a568457 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ bench/*.txt # Added by git-smart-commit *.patch *.improv +!examples/*.improv # Beads / Dolt files (added by bd init) .dolt/ diff --git a/README.md b/README.md index 0109566..69810dc 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,22 @@ Or import your own CSV: ./result/bin/improvise import path/to/data.csv ``` +The included `examples/demo.improv` was generated from `examples/demo.csv`: + +```sh +improvise import examples/demo.csv \ + --no-wizard \ + --category Region --category Product --category Customer \ + --measure Revenue --measure Cost \ + --time Date --extract Date:Month \ + --axis Region:row --axis Product:row \ + --axis Date_Month:column --axis Measure:column \ + --axis Customer:page --axis Date:none \ + --formula "Profit = Revenue - Cost" \ + --name "Acme Sales Demo" \ + -o examples/demo.improv +``` + ## Key bindings to try first | Key | Action | diff --git a/examples/demo.csv b/examples/demo.csv new file mode 100644 index 0000000..332d68a --- /dev/null +++ b/examples/demo.csv @@ -0,0 +1,41 @@ +Date,Region,Product,Customer,Revenue,Cost +2025-01-15,North,Widgets,Acme Corp,12000,7200 +2025-01-22,North,Widgets,Globex Inc,8500,5100 +2025-01-08,North,Gadgets,Acme Corp,6200,4340 +2025-01-30,North,Gadgets,Initech,4100,2870 +2025-01-12,North,Sprockets,Globex Inc,3400,2380 +2025-02-05,North,Widgets,Initech,11000,6600 +2025-02-18,North,Gadgets,Acme Corp,7300,5110 +2025-02-25,North,Sprockets,Globex Inc,2900,2030 +2025-03-10,North,Widgets,Acme Corp,13500,8100 +2025-03-19,North,Gadgets,Initech,5800,4060 +2025-01-09,South,Widgets,Soylent Ltd,9800,5880 +2025-01-20,South,Widgets,Umbrella Co,7200,4320 +2025-01-14,South,Gadgets,Soylent Ltd,5500,3850 +2025-01-28,South,Sprockets,Umbrella Co,2800,1960 +2025-02-03,South,Widgets,Soylent Ltd,10200,6120 +2025-02-15,South,Gadgets,Umbrella Co,6100,4270 +2025-02-22,South,Sprockets,Soylent Ltd,3100,2170 +2025-03-07,South,Widgets,Umbrella Co,8900,5340 +2025-03-18,South,Gadgets,Soylent Ltd,6800,4760 +2025-03-28,South,Sprockets,Umbrella Co,3500,2450 +2025-01-06,East,Widgets,Wonka Industries,14200,8520 +2025-01-17,East,Widgets,Stark Enterprises,11800,7080 +2025-01-23,East,Gadgets,Wonka Industries,8900,6230 +2025-01-31,East,Gadgets,Stark Enterprises,7400,5180 +2025-02-10,East,Widgets,Wonka Industries,15000,9000 +2025-02-20,East,Sprockets,Stark Enterprises,4200,2940 +2025-02-28,East,Gadgets,Wonka Industries,9200,6440 +2025-03-05,East,Widgets,Stark Enterprises,12500,7500 +2025-03-14,East,Sprockets,Wonka Industries,4800,3360 +2025-03-25,East,Gadgets,Stark Enterprises,8100,5670 +2025-01-11,West,Widgets,Oceanic Airlines,10500,6300 +2025-01-19,West,Gadgets,Cyberdyne Systems,6700,4690 +2025-01-27,West,Sprockets,Oceanic Airlines,3200,2240 +2025-02-06,West,Widgets,Cyberdyne Systems,11200,6720 +2025-02-14,West,Gadgets,Oceanic Airlines,7100,4970 +2025-02-24,West,Sprockets,Cyberdyne Systems,3600,2520 +2025-03-03,West,Widgets,Oceanic Airlines,12800,7680 +2025-03-12,West,Gadgets,Cyberdyne Systems,7500,5250 +2025-03-21,West,Sprockets,Oceanic Airlines,4000,2800 +2025-03-30,West,Widgets,Cyberdyne Systems,9800,5880 diff --git a/examples/demo.improv b/examples/demo.improv new file mode 100644 index 0000000..ce0e8a1 --- /dev/null +++ b/examples/demo.improv @@ -0,0 +1,185 @@ +# Acme Sales Demo + +## Category: _Index + +## Category: _Dim + +## Category: Customer +- Soylent Ltd +- Umbrella Co +- Acme Corp +- Stark Enterprises +- Globex Inc +- Cyberdyne Systems +- Initech +- Wonka Industries +- Oceanic Airlines + +## Category: Date +- 2025-01-23 +- 2025-01-14 +- 2025-02-03 +- 2025-03-19 +- 2025-01-08 +- 2025-02-05 +- 2025-02-25 +- 2025-03-18 +- 2025-01-27 +- 2025-03-03 +- 2025-01-12 +- 2025-01-22 +- 2025-03-10 +- 2025-02-10 +- 2025-02-28 +- 2025-03-25 +- 2025-01-11 +- 2025-01-20 +- 2025-03-05 +- 2025-01-06 +- 2025-02-18 +- 2025-02-22 +- 2025-02-06 +- 2025-02-14 +- 2025-01-09 +- 2025-03-07 +- 2025-03-21 +- 2025-01-31 +- 2025-01-30 +- 2025-02-20 +- 2025-01-19 +- 2025-01-15 +- 2025-03-14 +- 2025-02-24 +- 2025-01-28 +- 2025-03-12 +- 2025-02-15 +- 2025-03-30 +- 2025-01-17 +- 2025-03-28 + +## Category: Product +- Sprockets +- Widgets +- Gadgets + +## Category: Region +- North +- East +- West +- South + +## Category: Date_Month +- 2025-01 +- 2025-02 +- 2025-03 + +## Category: Measure +- Cost +- Revenue + +## Formulas +- Profit = Revenue - Cost [Measure] + +## Data +Customer=Acme Corp, Date=2025-01-08, Date_Month=2025-01, Measure=Cost, Product=Gadgets, Region=North = 4340 +Customer=Acme Corp, Date=2025-01-08, Date_Month=2025-01, Measure=Revenue, Product=Gadgets, Region=North = 6200 +Customer=Acme Corp, Date=2025-01-15, Date_Month=2025-01, Measure=Cost, Product=Widgets, Region=North = 7200 +Customer=Acme Corp, Date=2025-01-15, Date_Month=2025-01, Measure=Revenue, Product=Widgets, Region=North = 12000 +Customer=Acme Corp, Date=2025-02-18, Date_Month=2025-02, Measure=Cost, Product=Gadgets, Region=North = 5110 +Customer=Acme Corp, Date=2025-02-18, Date_Month=2025-02, Measure=Revenue, Product=Gadgets, Region=North = 7300 +Customer=Acme Corp, Date=2025-03-10, Date_Month=2025-03, Measure=Cost, Product=Widgets, Region=North = 8100 +Customer=Acme Corp, Date=2025-03-10, Date_Month=2025-03, Measure=Revenue, Product=Widgets, Region=North = 13500 +Customer=Cyberdyne Systems, Date=2025-01-19, Date_Month=2025-01, Measure=Cost, Product=Gadgets, Region=West = 4690 +Customer=Cyberdyne Systems, Date=2025-01-19, Date_Month=2025-01, Measure=Revenue, Product=Gadgets, Region=West = 6700 +Customer=Cyberdyne Systems, Date=2025-02-06, Date_Month=2025-02, Measure=Cost, Product=Widgets, Region=West = 6720 +Customer=Cyberdyne Systems, Date=2025-02-06, Date_Month=2025-02, Measure=Revenue, Product=Widgets, Region=West = 11200 +Customer=Cyberdyne Systems, Date=2025-02-24, Date_Month=2025-02, Measure=Cost, Product=Sprockets, Region=West = 2520 +Customer=Cyberdyne Systems, Date=2025-02-24, Date_Month=2025-02, Measure=Revenue, Product=Sprockets, Region=West = 3600 +Customer=Cyberdyne Systems, Date=2025-03-12, Date_Month=2025-03, Measure=Cost, Product=Gadgets, Region=West = 5250 +Customer=Cyberdyne Systems, Date=2025-03-12, Date_Month=2025-03, Measure=Revenue, Product=Gadgets, Region=West = 7500 +Customer=Cyberdyne Systems, Date=2025-03-30, Date_Month=2025-03, Measure=Cost, Product=Widgets, Region=West = 5880 +Customer=Cyberdyne Systems, Date=2025-03-30, Date_Month=2025-03, Measure=Revenue, Product=Widgets, Region=West = 9800 +Customer=Globex Inc, Date=2025-01-12, Date_Month=2025-01, Measure=Cost, Product=Sprockets, Region=North = 2380 +Customer=Globex Inc, Date=2025-01-12, Date_Month=2025-01, Measure=Revenue, Product=Sprockets, Region=North = 3400 +Customer=Globex Inc, Date=2025-01-22, Date_Month=2025-01, Measure=Cost, Product=Widgets, Region=North = 5100 +Customer=Globex Inc, Date=2025-01-22, Date_Month=2025-01, Measure=Revenue, Product=Widgets, Region=North = 8500 +Customer=Globex Inc, Date=2025-02-25, Date_Month=2025-02, Measure=Cost, Product=Sprockets, Region=North = 2030 +Customer=Globex Inc, Date=2025-02-25, Date_Month=2025-02, Measure=Revenue, Product=Sprockets, Region=North = 2900 +Customer=Initech, Date=2025-01-30, Date_Month=2025-01, Measure=Cost, Product=Gadgets, Region=North = 2870 +Customer=Initech, Date=2025-01-30, Date_Month=2025-01, Measure=Revenue, Product=Gadgets, Region=North = 4100 +Customer=Initech, Date=2025-02-05, Date_Month=2025-02, Measure=Cost, Product=Widgets, Region=North = 6600 +Customer=Initech, Date=2025-02-05, Date_Month=2025-02, Measure=Revenue, Product=Widgets, Region=North = 11000 +Customer=Initech, Date=2025-03-19, Date_Month=2025-03, Measure=Cost, Product=Gadgets, Region=North = 4060 +Customer=Initech, Date=2025-03-19, Date_Month=2025-03, Measure=Revenue, Product=Gadgets, Region=North = 5800 +Customer=Oceanic Airlines, Date=2025-01-11, Date_Month=2025-01, Measure=Cost, Product=Widgets, Region=West = 6300 +Customer=Oceanic Airlines, Date=2025-01-11, Date_Month=2025-01, Measure=Revenue, Product=Widgets, Region=West = 10500 +Customer=Oceanic Airlines, Date=2025-01-27, Date_Month=2025-01, Measure=Cost, Product=Sprockets, Region=West = 2240 +Customer=Oceanic Airlines, Date=2025-01-27, Date_Month=2025-01, Measure=Revenue, Product=Sprockets, Region=West = 3200 +Customer=Oceanic Airlines, Date=2025-02-14, Date_Month=2025-02, Measure=Cost, Product=Gadgets, Region=West = 4970 +Customer=Oceanic Airlines, Date=2025-02-14, Date_Month=2025-02, Measure=Revenue, Product=Gadgets, Region=West = 7100 +Customer=Oceanic Airlines, Date=2025-03-03, Date_Month=2025-03, Measure=Cost, Product=Widgets, Region=West = 7680 +Customer=Oceanic Airlines, Date=2025-03-03, Date_Month=2025-03, Measure=Revenue, Product=Widgets, Region=West = 12800 +Customer=Oceanic Airlines, Date=2025-03-21, Date_Month=2025-03, Measure=Cost, Product=Sprockets, Region=West = 2800 +Customer=Oceanic Airlines, Date=2025-03-21, Date_Month=2025-03, Measure=Revenue, Product=Sprockets, Region=West = 4000 +Customer=Soylent Ltd, Date=2025-01-09, Date_Month=2025-01, Measure=Cost, Product=Widgets, Region=South = 5880 +Customer=Soylent Ltd, Date=2025-01-09, Date_Month=2025-01, Measure=Revenue, Product=Widgets, Region=South = 9800 +Customer=Soylent Ltd, Date=2025-01-14, Date_Month=2025-01, Measure=Cost, Product=Gadgets, Region=South = 3850 +Customer=Soylent Ltd, Date=2025-01-14, Date_Month=2025-01, Measure=Revenue, Product=Gadgets, Region=South = 5500 +Customer=Soylent Ltd, Date=2025-02-03, Date_Month=2025-02, Measure=Cost, Product=Widgets, Region=South = 6120 +Customer=Soylent Ltd, Date=2025-02-03, Date_Month=2025-02, Measure=Revenue, Product=Widgets, Region=South = 10200 +Customer=Soylent Ltd, Date=2025-02-22, Date_Month=2025-02, Measure=Cost, Product=Sprockets, Region=South = 2170 +Customer=Soylent Ltd, Date=2025-02-22, Date_Month=2025-02, Measure=Revenue, Product=Sprockets, Region=South = 3100 +Customer=Soylent Ltd, Date=2025-03-18, Date_Month=2025-03, Measure=Cost, Product=Gadgets, Region=South = 4760 +Customer=Soylent Ltd, Date=2025-03-18, Date_Month=2025-03, Measure=Revenue, Product=Gadgets, Region=South = 6800 +Customer=Stark Enterprises, Date=2025-01-17, Date_Month=2025-01, Measure=Cost, Product=Widgets, Region=East = 7080 +Customer=Stark Enterprises, Date=2025-01-17, Date_Month=2025-01, Measure=Revenue, Product=Widgets, Region=East = 11800 +Customer=Stark Enterprises, Date=2025-01-31, Date_Month=2025-01, Measure=Cost, Product=Gadgets, Region=East = 5180 +Customer=Stark Enterprises, Date=2025-01-31, Date_Month=2025-01, Measure=Revenue, Product=Gadgets, Region=East = 7400 +Customer=Stark Enterprises, Date=2025-02-20, Date_Month=2025-02, Measure=Cost, Product=Sprockets, Region=East = 2940 +Customer=Stark Enterprises, Date=2025-02-20, Date_Month=2025-02, Measure=Revenue, Product=Sprockets, Region=East = 4200 +Customer=Stark Enterprises, Date=2025-03-05, Date_Month=2025-03, Measure=Cost, Product=Widgets, Region=East = 7500 +Customer=Stark Enterprises, Date=2025-03-05, Date_Month=2025-03, Measure=Revenue, Product=Widgets, Region=East = 12500 +Customer=Stark Enterprises, Date=2025-03-25, Date_Month=2025-03, Measure=Cost, Product=Gadgets, Region=East = 5670 +Customer=Stark Enterprises, Date=2025-03-25, Date_Month=2025-03, Measure=Revenue, Product=Gadgets, Region=East = 8100 +Customer=Umbrella Co, Date=2025-01-20, Date_Month=2025-01, Measure=Cost, Product=Widgets, Region=South = 4320 +Customer=Umbrella Co, Date=2025-01-20, Date_Month=2025-01, Measure=Revenue, Product=Widgets, Region=South = 7200 +Customer=Umbrella Co, Date=2025-01-28, Date_Month=2025-01, Measure=Cost, Product=Sprockets, Region=South = 1960 +Customer=Umbrella Co, Date=2025-01-28, Date_Month=2025-01, Measure=Revenue, Product=Sprockets, Region=South = 2800 +Customer=Umbrella Co, Date=2025-02-15, Date_Month=2025-02, Measure=Cost, Product=Gadgets, Region=South = 4270 +Customer=Umbrella Co, Date=2025-02-15, Date_Month=2025-02, Measure=Revenue, Product=Gadgets, Region=South = 6100 +Customer=Umbrella Co, Date=2025-03-07, Date_Month=2025-03, Measure=Cost, Product=Widgets, Region=South = 5340 +Customer=Umbrella Co, Date=2025-03-07, Date_Month=2025-03, Measure=Revenue, Product=Widgets, Region=South = 8900 +Customer=Umbrella Co, Date=2025-03-28, Date_Month=2025-03, Measure=Cost, Product=Sprockets, Region=South = 2450 +Customer=Umbrella Co, Date=2025-03-28, Date_Month=2025-03, Measure=Revenue, Product=Sprockets, Region=South = 3500 +Customer=Wonka Industries, Date=2025-01-06, Date_Month=2025-01, Measure=Cost, Product=Widgets, Region=East = 8520 +Customer=Wonka Industries, Date=2025-01-06, Date_Month=2025-01, Measure=Revenue, Product=Widgets, Region=East = 14200 +Customer=Wonka Industries, Date=2025-01-23, Date_Month=2025-01, Measure=Cost, Product=Gadgets, Region=East = 6230 +Customer=Wonka Industries, Date=2025-01-23, Date_Month=2025-01, Measure=Revenue, Product=Gadgets, Region=East = 8900 +Customer=Wonka Industries, Date=2025-02-10, Date_Month=2025-02, Measure=Cost, Product=Widgets, Region=East = 9000 +Customer=Wonka Industries, Date=2025-02-10, Date_Month=2025-02, Measure=Revenue, Product=Widgets, Region=East = 15000 +Customer=Wonka Industries, Date=2025-02-28, Date_Month=2025-02, Measure=Cost, Product=Gadgets, Region=East = 6440 +Customer=Wonka Industries, Date=2025-02-28, Date_Month=2025-02, Measure=Revenue, Product=Gadgets, Region=East = 9200 +Customer=Wonka Industries, Date=2025-03-14, Date_Month=2025-03, Measure=Cost, Product=Sprockets, Region=East = 3360 +Customer=Wonka Industries, Date=2025-03-14, Date_Month=2025-03, Measure=Revenue, Product=Sprockets, Region=East = 4800 + +## View: Default (active) +_Index: none +_Dim: none +Customer: page, Oceanic Airlines +Date: none +Product: row +Region: row +Date_Month: column +Measure: column +format: ,.0 + +## View: _Drill +_Index: row +_Dim: column +Customer: page, Oceanic Airlines +Date: none +Product: page, Widgets +Region: page, West +Date_Month: page, 2025-01 +Measure: page, Cost +format: ,.0