In this example, the inventory of various Zoo animals from different
City Zoos is maintained in a KVITable
, where each animal is
additionally classified by parameters such as Biome and Diet.
The KVITable
creation is somewhat lengthy due to the size of the
inventory; the SampleTables.hs file should be
consulted for the definition of the KVITable
zooTable
and
zooTable2
.
Rendering the data without any column stacking, but with multiple row groupings:
import Data.KVITable.Render.ASCII
render (defaultRenderConfig
{ sortKeyVals = True
, rowRepeat = False
, rowGroup = [ "Location", "Biome", "Category" ]
})
zooTable2
results in the following:
____ snip vv ____
| Location | Biome | Category | Diet | Name | Subtype | Count |
+-----------+----------+----------+-----------+---------+-------------+-------+
| LA | Jungle | Animal | Herbivore | Hippo | | 1 |
| |----------+----------+-----------+---------+-------------+-------+
| | Savannah | Animal | Carnivore | Lion | | 4 |
| | | | Herbivore | Giraffe | | 2 |
| | | | | Rhino | | 3 |
+-----------+----------+----------+-----------+---------+-------------+-------+
| Miami | Polar | Bird | Carnivore | Penguin | Gentoo | 20 |
| |----------+----------+-----------+---------+-------------+-------+
| | Savannah | Animal | Carnivore | Lion | | 2 |
| | | | Herbivore | Giraffe | Reticulated | 3 |
+-----------+----------+----------+-----------+---------+-------------+-------+
| New York | Savannah | Animal | Carnivore | Lion | | 3 |
+-----------+----------+----------+-----------+---------+-------------+-------+
| San Diego | Jungle | Animal | Omnivore | Bear | Sun | 1 |
| |----------+----------+-----------+---------+-------------+-------+
| | Plains | Animal | Omnivore | Bear | Black | 1 |
| | | | | | Brown | 1 |
| |----------+----------+-----------+---------+-------------+-------+
| | Polar | Animal | Omnivore | Bear | Polar | 1 |
| | |----------+-----------+---------+-------------+-------+
| | | Bird | Carnivore | Penguin | Emperor | 8 |
| | | | | | Gentoo | 2 |
| |----------+----------+-----------+---------+-------------+-------+
| | Savannah | Animal | Carnivore | Lion | | 9 |
+-----------+----------+----------+-----------+---------+-------------+-------+
____ snip ^^ ____
or in HTML (with CSS inherited from the Markdown configuration... imagine how much nicer this could be with your own CSS styling!):
Location |
Biome |
Category |
Diet |
Name |
Subtype |
Count |
---|---|---|---|---|---|---|
LA |
Jungle |
Animal |
Herbivore |
Hippo |
1 | |
Savannah |
Animal |
Carnivore |
Lion |
4 | ||
Herbivore |
Giraffe |
2 | ||||
Rhino |
3 | |||||
Miami |
Polar |
Bird |
Carnivore |
Penguin |
Gentoo |
20 |
Savannah |
Animal |
Carnivore |
Lion |
2 | ||
Herbivore |
Giraffe |
Reticulated |
3 | |||
New York |
Savannah |
Animal |
Carnivore |
Lion |
3 | |
San Diego |
Jungle |
Animal |
Omnivore |
Bear |
Sun |
1 |
Plains |
Animal |
Omnivore |
Bear |
Black |
1 | |
Brown |
1 | |||||
Polar |
Animal |
Omnivore |
Bear |
Polar |
1 | |
Bird |
Carnivore |
Penguin |
Emperor |
8 | ||
Gentoo |
2 | |||||
Savannah |
Animal |
Carnivore |
Lion |
9 |
Removing the "Subtype" field from the zoo table and then modifying the
rendering configuration to add column stacking on the "Name"
key
Val
s results in:
____ snip vv ____
| Location | Biome | Category | Diet | Bear | Giraffe | Hippo | Lion | Penguin | Rhino | <- Name
+-----------+----------+----------+-----------+------+---------+-------+------+---------+-------+
| LA | Jungle | Animal | Herbivore | | | 1 | | | |
| |----------+----------+-----------+------+---------+-------+------+---------+-------+
| | Savannah | Animal | Carnivore | | | | 4 | | |
| | | | Herbivore | | 2 | | | | 3 |
+-----------+----------+----------+-----------+------+---------+-------+------+---------+-------+
| Miami | Polar | Bird | Carnivore | | | | | 20 | |
| |----------+----------+-----------+------+---------+-------+------+---------+-------+
| | Savannah | Animal | Carnivore | | | | 2 | | |
| | | | Herbivore | | 3 | | | | |
+-----------+----------+----------+-----------+------+---------+-------+------+---------+-------+
| New York | Savannah | Animal | Carnivore | | | | 3 | | |
+-----------+----------+----------+-----------+------+---------+-------+------+---------+-------+
| San Diego | Jungle | Animal | Omnivore | 1 | | | | | |
| |----------+----------+-----------+------+---------+-------+------+---------+-------+
| | Plains | Animal | Omnivore | 2 | | | | | |
| |----------+----------+-----------+------+---------+-------+------+---------+-------+
| | Polar | Animal | Omnivore | 1 | | | | | |
| | |----------+-----------+------+---------+-------+------+---------+-------+
| | | Bird | Carnivore | | | | | 10 | |
| |----------+----------+-----------+------+---------+-------+------+---------+-------+
| | Savannah | Animal | Carnivore | | | | 9 | | |
+-----------+----------+----------+-----------+------+---------+-------+------+---------+-------+
____ snip ^^ ____
And as HTML:
Location |
Biome |
Category |
Diet |
Bear |
Giraffe |
Hippo |
Lion |
Penguin |
Rhino |
←Name |
---|---|---|---|---|---|---|---|---|---|---|
LA |
Jungle |
Animal |
Herbivore |
1 | ||||||
Savannah |
Animal |
Carnivore |
4 | |||||||
Herbivore |
2 | 3 | ||||||||
Miami |
Polar |
Bird |
Carnivore |
20 | ||||||
Savannah |
Animal |
Carnivore |
2 | |||||||
Herbivore |
3 | |||||||||
New York |
Savannah |
Animal |
Carnivore |
3 | ||||||
San Diego |
Jungle |
Animal |
Omnivore |
1 | ||||||
Plains |
Animal |
Omnivore |
2 | |||||||
Polar |
Animal |
Omnivore |
1 | |||||||
Bird |
Carnivore |
10 | ||||||||
Savannah |
Animal |
Carnivore |
9 |