Dashboard Week, Day 2: 80 Grams — Where Your Daily Fat Really Comes From

Dashboard Week is exactly what it sounds like: a fresh dataset every day, a tight time limit, and a finished, presentable dashboard by the end of it. Day 2 handed us food — and a database big enough to drown in.

The brief

The task was to use FooDB to build a single-screen visual aid that educates the general public about food. Nutrients, taste, content, enzymes, health effects — anything was fair game. The catch, and the thing actually being marked, was scope: FooDB is enormous, and the real challenge was deciding what to leave out so the whole thing fits on one 1920×1080 screen and tells one clear story rather than becoming a wall of data.

There were a few firm rules. It had to be genuinely interactive, but only through modern methods — click actions, image-button slicers, drill-downs, bookmarks. Traditional drop-down and list filters were banned. Build in Tableau or Power BI, present in ten minutes, and write it up as a blog post covering the plan, the challenges, the key findings and the surprises. I built in Tableau.

Where the data came from

The data comes from FooDB (foodb.ca), an open, freely available database of food constituents — chemistry, nutrients, flavours, and biology. I pulled the CSV download from their downloads page. It arrives not as one tidy file but as roughly eleven separate tables: Food, Content, Nutrient, Flavor, HealthEffect, Enzyme, Food Taxonomy, and a handful of ontology and reference tables.

The structure is essentially hub-and-spoke. Food is the hub — the master list of every food. Content is the giant fact table (millions of rows) that records the measured amount of every nutrient and compound in every food. Everything else is a lookup that hangs off one of those two. Understanding that shape before touching anything was the single most useful thing I did all day.

The plan: narrowing a huge database into one question

My first instinct was to map everything — nutrients, flavours, health effects, enzymes — and I quickly learned why that was a trap. Flavours, health effects and enzymes don't join directly to foods in FooDB; they attach to compounds through junction tables I hadn't downloaded. Chasing all of them would have eaten the whole day and produced a cluttered, unfocused screen.

So I narrowed, hard. I joined Food to Content, filtered down to the nutrient side of the data, and looked for a single question the public actually relates to. I landed on fat — specifically the idea that we're told to eat around 80 grams of fat a day. That became the frame for the whole dashboard: 80 grams is your daily budget — so where does that fat really come from?

Everything on the final screen serves that one question.

The challenges

The data was dirty in a sneaky way. Several of the food descriptions contained unescaped quotes and commas, which broke the CSV parsing — every column after the description shifted one to the side, quietly corrupting fields like food_group. It looked fine at a glance and was completely wrong underneath. Re-importing with the correct text qualifier snapped everything back into place, and only then was the group data trustworthy.

Units and aggregation nearly sank me. The content values are stored in milligrams per 100g, but my story needed grams, so a lot of charts were silently a thousand times too big until I built a clean grams field. Worse, each food has several rows (one per plant part, plus repeat measurements), so a naïve SUM stacked those together and produced impossible numbers. Switching to averages within each food — and being careful about level-of-detail calculations for the "how many foods hit the limit" figure — was where most of my debugging time went.

The interactivity had to carry the story, not just decorate it. With dropdowns off the table, I built the whole experience on click actions and Tableau set actions. Clicking a food group in the heatmap drills into the products inside it, and selecting products adds them to a "plate" that fills a stacked bar toward the 80-gram line. Set actions reward precision — using "add" rather than "assign" values and keeping the selection on clear is what turns a highlight into an accumulating plate-builder — so I set those up deliberately from the start rather than fighting them later.

Key findings

The headline is simple: fat isn't spread evenly across what we eat — it clusters. On the heatmap, the Fats-and-oils, Nuts and animal-product rows light up while fruits, vegetables and cereals barely register.

And when you rank foods by fat, the top of the list isn't steak or cheese — it's extracted oils and rendered fats: safflower, lard, tallow, rapeseed, cocoa butter. These don't merely contain fat; they essentially are fat. A hundred grams of safflower oil is a hundred grams of fat — a whole day's budget in a single pour.

The plate-builder makes this personal. Add a spoon of oil and a handful of nuts and you're already at your limit; you could eat a mountain of vegetables and barely move the bar.

The surprises

The biggest surprise was just how concentrated fat is — that a daily "budget" can be spent in a single 100-gram portion of a handful of products, while most of the food world is nowhere near it.

Two smaller ones stuck with me. First, that where a plant stores its oil is so consistent — it's the seed, the energy reserve for the next generation, and processing only concentrates it further. Second, a data surprise: many things you'd expect to be "nutrients," like vitamins, are actually filed as compounds in FooDB — a reminder that understanding a schema matters as much as understanding the subject.

Dashboard can be found here:

https://public.tableau.com/app/profile/mila.kholodii/viz/FoodDashboard_17876666023620/Wheredailyfatcomesfrom

Author:
Mila Kholodiy
Powered by The Information Lab
1st Floor, 25 Watling Street, London, EC4M 9BR
Subscribe
to our Newsletter
Get the lastest news about The Data School and application tips
Subscribe now
© 2026 The Information Lab