Workout Wednesday pipeline
Workout Wednesday publishes a weekly Power BI challenge: a requirements page, a source dataset, and a screenshot of the target visualization. Same shape every week, so the build follows one repeatable pipeline.
Target flow: one challenge link in → a verified, published report out. Ask the user only what the challenge page doesn't answer.
0. Parse the challenge
- WebFetch the challenge link. Extract three things: the requirements (the numbered
list of what the solution must do), the data source link (usually an
.xlsx/.csvdownload or a public Power BI dataset), and the screenshot of the original viz. - Note the challenge author and week number — they belong in the project notes.
- Download the source data into the project folder (see layout below), not to a temp
directory. On Windows, never download to a POSIX
/tmppath — it won't be readable by later steps. - If the requirements are ambiguous (they often leave interaction behavior implicit), list your reading of them back to the user before building rather than guessing twice.
1. Project layout
Each challenge gets its own subdirectory under a Workout Wednesday parent:
<projects root>/Workout Wednesday/<Challenge Name>/
<Challenge Name>.Report/ PBIR report
<Challenge Name>.SemanticModel/ TMDL model
<Challenge Name>.pbip
data/ downloaded source files
scripts/ spec builders / data prep, if needed
notes.md requirements, challenge link, author credit
Scaffold by forking the closest existing WW project if one exists — the model is
usually a single flat table and the report a single page, so a fork gets you to "build the
visual" fastest. Otherwise use the reports:create-pbi-report skill, passing an
absolute report path to pbir new report (a previously-active report can otherwise
hijack a relative path — see the reports:pbir-cli skill).
The project must be enhanced PBIR — confirm
definition/pages/<page>/visuals/<visual>/visual.json files exist. The Deneb round-trip,
pbir validate, and verify-loop steps all operate on enhanced PBIR and do nothing useful
against PBIR-Legacy's single report.json.
2. Build
- Model: typically one flat table or a small star, loaded from the downloaded file.
Author TMDL directly per the
pbip:tmdlskill; thepbip:pbir-formatskill covers the visual JSON. If the challenge is date-driven, thesemantic-models:date-tableskill drops in a full date dimension rather than hand-rolling one. - Visuals: most WW challenges exist precisely because a native visual can't do it, so
expect Deneb — author the spec with
custom-visuals:deneb-visualsand usecustom-visuals:deneb-pbirto extract/patch/embed it invisual.jsonand offline-render it with sample data before ever opening Desktop. Native visuals go throughreports:pbir-cli. - Design round (optional): a mockup, then implement it with the delta-only rules in
reports:pbi-report-design(references/implementing-a-design.md). - Reconcile against the challenge source before calling it done. The recurring failure mode is a report that looks right and is wrong: colors mapped to the wrong categories, groupings that don't match the original, totals that don't tie out. Check each requirement off the list explicitly.
3. Verify
- Run
pbir validateafter any hand-editedvisual.json. - Run the
reports:pbi-verify-loopskill to refresh Desktop from disk, wait for the canvas to settle, and screenshot the page. Pass--compare <original-viz.png>to diff against the challenge's screenshot where the layouts are close enough for a pixel diff to mean anything. - Read the screenshot yourself, then have the user eyeball it. They decide when it matches the challenge — a low diff ratio doesn't.
4. Publish
pbir publish "<Challenge Name>.Report" "<Workspace>.Workspace/<Challenge Name>.Report" -f
This import path works independently of the fab schema-load issue noted in the
reports:pbir-cli skill. Confirm the report is live in the workspace before reporting
success — check it with fab ls "<Workspace>.Workspace" or open the service URL.
Wrap-up
Write the challenge link, author credit, requirements, and anything non-obvious about the
solution into the project's notes.md. Any new Deneb/Vega technique or gotcha that
generalizes beyond this one challenge belongs in the custom-visuals:deneb-pbir or
custom-visuals:deneb-visuals skill, not just the project notes.