Weekly Report — May 18 – May 23, 2026 (friday mode)
W21 (full week). Power BI migration theme dominated: (1) playbook published Mon → docs/conceptual-differences + docs/migrating-to-holistics; (2) end-to-end
AW-SalesPOC w/ value parity to the cent; (3)migrate-power-biagent plugin shipped via holistics/skills#10, then bug-fix follow-up #12, then bumped to 0.1.1. Mid-week: BuyCo + Basata onboarding calls closed, Enhance Fitness RFP assessed ($4.6K/mo proposal in flight), SLA data pull delivered to Xairo, 1-on-1 report written. Late week: 2 Docs PRs (docs#1639 OAuth+MCP, docs#1640 from-others landing), PatientsKnowBest answered, Datacubed embed user tracking delivered. New WAITING: TerryWhite Chemmart data question (pending anh Tan Huynh). DAT-576 MRR exchange rate still NOT STARTED — 5-week carry-over remains the open wound; 1-on-1 escalation done but no resolution yet captured.
Work
Presales
DONE — Power BI → Holistics playbook published (#P1, customer [[BuyCo]]) — closed May 18.
- Polished conceptual diagram from hand-sketch via Claude Design (HTML/CSS, structured + iterable) — picked over Google Stitch (image-gen, single-shot, hard to refine). Published to docs:
- docs: conceptual-differences — canonical artifact mapping (Power Query→Query Model, Table→Model, Semantic Model→Dataset, DAX Measure→AQL Metric, Calc Column→Dimension
definition: @sql/@aql, Report→Canvas Dashboard, Workspace→Module,.pbip→AMQL repo). - docs: migrating-to-holistics — 8-phase workflow w/ definitions-of-done.
- docs: conceptual-differences — canonical artifact mapping (Power Query→Query Model, Table→Model, Semantic Model→Dataset, DAX Measure→AQL Metric, Calc Column→Dimension
- Reviewers: anh Khai To + anh Huy. Slack announce Mon EOD.
- Refs: Ampcode (check PBI file), Notion: BuyCo Call Prep, Notion: PBI↔Holistics Conceptual Differences.
- Polished conceptual diagram from hand-sketch via Claude Design (HTML/CSS, structured + iterable) — picked over Google Stitch (image-gen, single-shot, hard to refine). Published to docs:
DONE — End-to-end PBI POC:
AW-Sales→ Holistics (#P1, customer [[BuyCo]]) — closed May 18.- Source:
AW-Sales.pbipsemantic model + 3-page report (data → MotherDuck first). - Output:
aw_sales.dataset.amlw/ 7 models (sales,date,customer,product,reseller,sales_order,sales_territory) + 8 relationships (3 active todatefromOrderDateKey,DueDateKey,ShipDateKey— last two inactive role-playing),sales_order ↔ sales1:1. - Decision:
type: 'query'(nottype: 'table') → normalize PBI’s"Sales Amount"-style cols to snake_case, avoid double-quoting in MotherDuck. - DAX → AQL pattern proven:
CALCULATE(SUM(Sales[Sales Amount]), USERELATIONSHIP(Sales[DueDateKey], 'Date'[DateKey]))→@aql sum(sales.sales_amount) | with_relationships(sales.due_date_key > date.date_key). Calc columnProduct.Sorting = RELATED(...)→ inlineCASEdimension. - Dashboard: PBI 3-page report → single
aw_sales_dashboard.page.amlw/TabLayout. Slicers (Fiscal Year, Month) lifted to page-levelFilterBlocks. Added Tab 4 (Top-10 reseller city pie). - Parity hit: Total Sales Amount 109,809,274.20 matches warehouse ground truth, identical for
sales_amount_by_due_date. Row count 121,253. - Refs: Ampcode (load data), Ampcode (code execution).
- Source:
DONE — Publish
migrate-power-biAI skill (#P1, customer [[BuyCo]]) — merged May 20.- PR: holistics/skills#10 —
feat(plugins.holistics-migrate-power-bi): add plugin and skill. Merged after anh Khai review. - Plugin layout (progressive disclosure):
SKILL.md(entry + hard rules) + 5 references (concept-mapping.md,tmdl-to-aml.md,dax-to-aql.md,migration-workflow.md,validation.md). Dual manifests (.claude-plugin/plugin.json+.cursor-plugin/plugin.json). - Hard rules: never hand-write AQL (use
generate_aqlviawrite-aql); never invent AML keys (usesearch_docs);holistics aml validateon every file; per-measure value parity (5–10 dim combos, diff zero-or-explained); land Excel/local sources in warehouse first; disable PBI “Auto date/time”; role-playing dims via named join aliases (noUSERELATIONSHIPdirect port). - Composes w/:
develop-amql,write-aql,search-docs,visualize-data,working-in-development. - Refs: Ampcode (skill creation), Ampcode (publish).
- PR: holistics/skills#10 —
DONE — Fix PBI-migrate skill wrong logic (#P1, [[AI]] / [[Presales]]) — merged May 22 (holistics/skills#12, +445/-252).
- Dogfooding revealed multiple AQL syntax errors + fictional function names in the v0.1 skill. Fixes:
- AQL syntax:
with_filter→where;if(cond,a,b)→case(when:, then:, else:);to_date_period→period_to_date;moving_average(doesn’t exist) →window_avg(metric, -2..0, order: <ts>);rank()→rank(order:, partition:);top()→top(n, <dim>, by: <metric>). - Missing DAX primitives: added
of_all(for DAXALL) +keep_grains(forALLEXCEPT). Added caveat:running_totaldoes not work w/count_distinct. - AQL execution-order doc: new section in
dax-to-aql.mdexplaining the 7-step pipeline so users can diagnose why metrics diverge from DAX under filter/window combos. - CLI/MCP rewire:
SKILL.mdmandatesholistics aml validate+ MCP tools (generate_aql,validate_aql,execute_aql) instead of hand-writing AQL. - Predicate fixes:
isfor equality,matchesfor date predicates (e.g.,where(orders.created_at matches @2024)).
- AQL syntax:
- Then bumped to 0.1.1 (Ampcode bump). CODEOWNERS now
@chinh-dm-holistics. - Refs: Ampcode (fix).
- Dogfooding revealed multiple AQL syntax errors + fictional function names in the v0.1 skill. Fixes:
DONE — Onboarding call with [[BuyCo]] (#P1, customer [[BuyCo]]) — closed May 19.
- Technical onboarding checklist: Notion: Shared Technical Onboarding — BuyCo.
- Hide-confidential-data POC kicked off post-call.
- Refs: Ampcode (call prep), Ampcode (POC).
DONE — Onboarding call 4 with [[Basata]] (#P1, customer [[Basata]]) — closed May 19.
DONE — Watch [[Enhance Fitness]] call + assess RFP (#P1, customer [[Enhance Fitness]]) — closed May 19.
- Profile: B2B SaaS, dashboards as their paid product (not internal BI). Replacing Power BI. Snowflake on AWS US, direct-query, 15-min freshness target, 300–1,000 concurrent embedded users at peak.
- Deal-breaker requirements: filter carryover across drill-throughs (incl. conceptual drill), multi-hop drill, host↔embed event communication, dynamic branding per tenant via RLS lookups, full white-label.
- Migration gap: Cube semantic layer + complex DAX. Need Cube → Holistics modeling + DAX → AQL (same skill landing this week).
- Recommended strategy: trim AI-drafted RFQ from ~70 → ~25–30 items, add “Why” column tying each requirement to an EF pain. POC scopes 3 dashboards.
- Commercial: ~$4,600/month Security Compliance Suite (50 internal + 500–1,500 embedded, US DC).
- Refs: Slack, Notion: EF RFQ Draft, Ampcode (RFP).
DONE — Pull Holistics response time + SLA data (#P1, customer [[BuyCo]]) — closed May 21.
- Xairo (BuyCo PM) asked: how does Holistics differentiate response vs resolution time + how often are SLAs met?
- Baseline from Zendesk via
itg_customer_support__ticket_metrics/mart_customer_support.tickets: median response ~9.8h, P90 ~61.1h, ~80% within 24h (calendar), ~93.7% within 72h, median resolution ~121h (~5d). - SLA targets defined: L1 1bd / L2 2bd / L3 3bd.
- Data gaps flagged: (a) no L1/L2/L3 severity tags in warehouse → can’t compute per-severity SLA; (b) dbt models use calendar hours, business-hour figures live in raw Zendesk JSON (
reply_time_in_minutes.business) → likely understates compliance. - Refs: Slack DM, Slack channel, Ampcode.
NOTE — [[Predictive Index]] initial demo call (#P2, [[Presales]], customer [[Predictive Index]]) — May 21.
- Profile: replacing Domo (5+ years). Stack: Snowflake + Databricks + Azure. Lean BI team (2: Crystal Wang analyst, Dan Cunningham oversight). Evaluating Holistics vs Tableau vs BaseDash.
- Embed use case: partner-network model — each partner manages ~10 clients; needs multi-tier data access (cross-client aggregate → per-client drill-down → own revenue). Currently Domo iframe inside Salesforce w/ SSO; the SSO “middle step” frequently breaks → multi-team troubleshooting pain.
- Hard requirements: RLS (partners see only owned data), portal-embed into Salesforce, self-service / Ask-AI inside embed, semantic-layer governance (consistency on
client_namevsaccount_name), Git version control, MCP support (they use Claude internally). - Next step: PI reviews Holistics embedding docs + success stories; trial/POC expected in ~2 weeks after their other-vendor calls.
- Refs: Ampcode, Slack.
TODO — Discuss narrative demo for Power BI migration (#P2, [[Presales]]) — captured May 20, surfaced again May 22. Slack thread w/ team. Refs: Slack.
TODO — Power BI to Holistics — Themes (#P2, [[Presales]]) — captured May 22. Theme-port layer for migrated dashboards (BuyCo follow-up theme).
Docs
DONE — Beautify from-others landing page (#P3, [[Docs]]) — merged May 22 (holistics/docs#1640, +53/-22).
- New
from-others/index.mdw/ tabbed landing (Looker, Power BI) so users coming from other BI tools have a single entry point. Banner image + per-tool link list; wired intosidebars.tsas the section root. - Refs: Ampcode.
- New
DONE — Update docs w/ CLI’s OAuth + CLI’s MCP (#P3, [[Docs]]) — merged May 21 (holistics/docs#1639, +107/-11).
- Updated
local-agentic-development: Auth step 3 documentsholistics auth <region>OAuth as Option A (recommended), API key as Option B. MCP step 4 documentsholistics mcpCLI as Option A. Added workflow diagram. - Refs: Ampcode.
- Updated
DONE — Review cross-metric calculation documents (#P2, [[Docs]]) — closed May 19.
TODO — Feedback - Publish via CLI? (captured May 18, [[Docs]] / [[Presales]]) — small feedback item for Khai To’s CLI surface.
TODO — Fix markdown files not found in docs.holistics.io (#P3, [[Docs]]) — captured May 22. Broken-link sweep.
Duty Support
DONE — Answer [[PatientsKnowBest]] (#P1, [[Duty Support]]) — closed May 21. Refs: Slack, Ampcode.
DONE — Track external users accessing embed dashboards of [[Datacubed]] (#P2, [[Duty Support]]) — closed May 23.
- Ask (Noe Ocampo): distinguish internal vs external users on embedded dashboards for adoption + licensing.
- BigQuery analysis (cycle Apr 20 – May 19): external (embed) = 28 users / 15,304 jobs (89.3%); internal (Datacubed staff) = 4 users / 1,768 jobs (10.3%). All external embed sessions have
foreign_id = NULL→ cannot map session → individual end-user because Datacubed isn’t passing identity in embed init. - Proposal sent: (1) explain Holistics privacy-by-design (anonymous
embed_<token>@holistics.io); (2) implementation = pass uniqueuser_idasforeign_idin embed token; (3) reference Identity Workspace docs. Noe will discuss internally + come back. - Tenant changes: added
user_typedimension topublic_users.model.aml(internal/external (embed)); exposedemail,role,user_type,last_sign_in_atindatacubed_query_run_usage_monitoringdataset; added weekly trend chart, cycle-to-date utilization donut, and “Top Users” pivot to the monitoring dashboard. Will auto-populate w/ real IDs onceforeign_idflows. - Refs: Ampcode (count), Ampcode (identity tracking) Slack.
WAITING — Support data question for [[TerryWhite Chemmart]] (#P1, [[Duty Support]]) — opened May 21.
- Bug:
relative_periodreturns wrong LY values when a date parameter is used as a filter inside a metric definition. Standard date-dim filters work; parameter-boundwhere(... in param)clauses are treated as literal-bound filters → resolved before the rewrite rule → engine doesn’t recognize them as shiftable. Result: LY subquery shifts the GROUP BY key (labels 2027) but fails to shift the WHERE range (still scans 2026) → empty LY columns + data leaking to 2027. - Workaround found: define LY as
base_metric | relative_period(...)w/o internalwhere, then filter at the explore level where TY metric is not null + param matches the desired period. Sidesteps the rewriter bug. Trade-off: LY subquery does a full table scan — perf concern at production scale. - Status: workaround validated; sent to anh Tan Huynh asking whether engine fix is feasible vs documenting a canonical AQL pattern. Reproduced CSV files attached.
- Refs: Slack, Ampcode (debug), Ampcode (conversation), Ampcode (reproduce csv).
- Bug:
Internal
DONE — Write 1-on-1 report (#P1, [[Internal]]) — closed May 20. Refs: Ampcode.
- Agenda prepared for Wed 1-on-1 w/ anh Triet:
- DAT-576 MRR exchange rate (5-week carry-over) — framed as prioritization question, not scheduling. 3 options: (a) re-scope to 1-week-effort version, (b) hand off to non-presales-loaded teammate, (c) formally de-prioritize until BuyCo closes.
- DAT-524 Zoho test accounts (14-week) — Arden confirmed missing co-names = test accounts (Quinn US test, Holistics SGD test). Fix trivial (~30 min: add
const_zoho_internal_customersfilter tostg_zoho__events). Decision: assign for immediate completion or formal drop. - Career / lane check-in — confirm intentionality of “solutions/presales hybrid” trajectory vs deeper IC engineering or tech-lead path. Signals: solo BuyCo onboarding call #4, PBI migration playbook (reusable solutions-engineering artifact), anh Thanh (Chief Eng) recognition on AI-assisted AQL building.
- Showbie loss synthesis — committed to share 1-page learning note (Looker-migration moat + security-risk perception, deal lost to Omni).
- Process proposals: (a) shared customer-status board (Notion/Linear) to centralize Slack-scattered context, (b) upstream personal heuristics (“dbt deprecation 3-phase rule”, “customer-comms recipe pattern”) into team docs, (c) make “Backlog Drops” a standing 1-on-1 agenda item to clear oldest items.
- Gap: thread captures the prep — post-meeting outcomes were not written back. W22 P1 = capture decisions in Linear (esp. DAT-576 + DAT-524).
- Agenda prepared for Wed 1-on-1 w/ anh Triet:
NOTE — Identity Resolution: TOGA case (DE-187) ([[Internal]]). 2 HubSpot companies map to one tenant
SG-2163via overlapping domains (togltechnology.com,togalimited.com). Root cause:itg_mappings__hubspot_tenant.sqltie-breaker arbitrary (order by hubspot_company_idasc) + not relationship-aware — both companies are parent/child (4018874875is child of10207389977), buths_parent_company_id+hs_num_child_companiesnot extracted in staging/domain layers. Proposed 3-layer fix: (1) extract parent fields instg_hubspot__companies.sql, (2) surfaceis_parent/is_childflags indom_hubspot__companies.sql, (3) parent-aware tie-break. Page:[Internal] Identity Resolution. Refs: Ampcode.NOT STARTED — DAT-576 MRR exchange rate (#P1, [[Internal]]) — 5-week carry-over (W16 → W21). 1-on-1 escalation slot on Wed May 20 used; awaiting decision capture (re-scope / hand-off / formal de-prioritization).
Personal / Tooling
DONE — Make sure amp loads latest holistics skills (#P2, [[Personal]]) — closed May 22. Skill cache refresh + version-pin fix so amp always picks up newest plugin marketplace state. Refs: Ampcode.
TODO — Amp plugin update since holistics cli supports
holistics mcp(#P2, [[Personal]]) — captured May 22. Plugin currently spawns its own MCP server; switch toholistics mcpsubcommand → fewer moving parts.PROPOSED — RFC-0004 PARA Method Adoption ([[Logseq]]). Diagnosis grounded in W21 evidence: DAT-576 6w / DAT-524 15w rot, 1-on-1 decision-capture gap, Datacubed/TerryWhite/PI context non-durability, skills#12 6 AQL bugs = AQL Cookbook gap. Migration W22→W24. W22 test case = DAT-576+DAT-524 as Project pages → if pages exist Mon AM, Linear comment writes itself.
IDEA — Support other coding agents for logseq automation ([[Logseq]]). Mapped agent-CLI eligibility for headless runs: amp ✅ (current), claude code ✅ (
claude -p, recommended for CI), opencode ⚠️ (no--allowedTools, restrictive perms), codex ✅ (codex exec, no thread URL). Proposed shape:automation/lib-agent.shshared library abstractingagent_setup+agent_run; scripts take--agentflag. Context-gap fix: pre-resolve external links (Amp threads, Slack, Notion) in shell layer + inject as pre-fetched markdown so any agent reads viaReadtool — vendor-neutral. Long-term: nightly sync of Amp threads → R2 → MCP for native query. Refs: Ampcode.Learning & Notes
LEARNING — Power BI Migration mechanics.
.pbipdoes not auto-save as TMDL — Power BI Desktop only writes per-table.tmdlwhenpbipsave-as format is explicitly enabled in preview settings. Without it: scaffold dirs (.platform,definition.pbism, emptydefinition/tables,definition/cultures) w/o serialization. Captured for future migrations.LEARNING — Claude Design > Google Stitch for structured diagrams. CD = HTML/CSS → inspectable, iterable, easy to narrate. Stitch = image-gen → one-shot, hard to refine. Default to CD for any conceptual artifact going to docs.
NOTE — Presales explainer-style exercise (May 18). Personal framework: act as the sales person → choose the diagram’s entry point → adjust visuals to make narration land smoother. Direct lesson from the PBI playbook diagram iteration.
NOTE — evilcharts.com/docs — Recharts + Shadcn chart kit. Reuse for [[Personal Finance]] website. Filed under [[Data Visualization]].
NOTE — Power BI playground showcase gallery — reference for Holistics showcase site.
NOTE — tryopendata.ai — every public dataset, unified queryable API. Good for data side projects.
NOTE — omnigraph.dev — lightweight self-hostable graph DB. Neo4j-alternative pattern.
NOTE — Huberman Lab — Sleep Hygiene — filed under [[Health Rules]]. Resource for when sleep issues arise.
Next Week
P1 — Must Do
[[Internal]] — DAT-576 MRR exchange rate (linear) — 6-week carry-over. Turn 1-on-1 outcome → written Linear decision (re-scope / hand-off / de-prioritize). Mon AM. Unblocks DAT-524.
[[Presales]] — Showbie loss synthesis — 1-on-1 commitment. 1-pager: Looker-migration moat + security-risk perception. 3rd re-commitment.
[[Teaching]] — Soạn roadmap Spark cho Yên — slipped W21 Sat. Block W22 weekend.
P2 — Should Do
[[Internal]] — DAT-524 exclude Zoho test accounts — PENDING DAT-576. Stays parked until MRR ships/closes.
[[Presales]] — Discuss narrative demo for Power BI migration — Slack thread open; book 30-min sync.
[[Presales]] — Power BI to Holistics — Themes — extend playbook w/ theme-port guidance.
[[Presales]] — Polish document embedding (backlog 69ccaad3-d8f1) — fold PI/Basata/Showbie data into “unified toolbox” framing. Evidence-only.
[[Internal]] — Continue Cross-Model Calculation (DAT-504) — re-eval after MRR.
[[Internal]] — Upgrade
dbt-coreto match prefect.[[Personal]] — Amp plugin update for
holistics mcp— switch to new CLI subcommand.[[Docs]] — Send auto-export dashboard PNG feedback to Khai To (draft in Backlog).
[[Logseq]] — Execute RFC-0004 W22 batch — Project/ namespace + first 5–6 pages (DAT-576/DAT-524 = forcing-function test).
P3 — Nice to Have
[[Docs]] — Add demo video for local dev docs — demoted P1→P3. Anh Khai (modeling) already prepared the video. My side = social-media publish only, no critical path.
[[Docs]] — Fix markdown files not found in docs.holistics.io — broken-link sweep.
[[Personal]] — Migrate other notes from Obsidian (in-progress).
[[Personal]] — Review and update [[Personal Context]].
[[Teaching]] — Set-based vs row-based thinking; viz resources; pudding.cool.
Monitor (no action — wait for external signal)
[[Presales]] — Hide-confidential-data POC for BuyCo — Xairo discussed w/ team → upstream-doable, not critical. Demoted off action list. Slack.
[[Presales]] — [[Predictive Index]] follow-up — Nam (sales) followed up. Wait for trial-start + onboarding-call booking.
[[Presales]] — [[Enhance Fitness]] RFP — Chukwudi (sales) followed up. Wait for trial-start + onboarding-call booking.
[[Presales]] — Wamly onboarding — wait for Wamly response. Monitor
#holistics-wamly-externalclosely.Carry-over watch
Item Since Weeks Action DAT-576 MRR exchange rate W16 6 Mon AM Linear memo. Unblocks DAT-524. DAT-524 Zoho test accounts W7 15 PENDING DAT-576. Stop forcing — chained dependency now explicit. Local-dev demo video W17 6 Demoted P3. Anh Khai owns video; my side = social publish only. Wamly onboarding W18 4 Monitor #holistics-wamly-external. No active push.H1 self-reflection + CV W19 3 Lock W22 weekend. PR cycle approaching. Hide-conf-data POC BuyCo W21 1 Monitor — Xairo says not critical, upstream-doable. Power BI playbook W20 DONE Closed W21.
Career & Personal Consulting
Workload mix (W21 observation). ~70% Presales (BuyCo deep-dive, EF RFP, Basata, PKB, Datacubed, TerryWhite, PBI skill iterations) / ~15% Docs (3 PRs landed) / ~10% Tooling (skill load fix, agent abstraction idea) / ~5% Internal (1-on-1 report, identity-resolution note). DAT-576 again = 0% engineering hours. This is the 5th week in a row presales legitimately outranked it — the pattern is the signal, not the failure.
Lane signal (from 1-on-1 prep). The agenda itself confirms drift toward solutions/presales hybrid: solo BuyCo onboarding call #4, reusable PBI playbook + skill, anh Thanh (Chief Eng) recognition for AI-assisted AQL. Decide explicitly whether to lean in or pull back toward IC engineering depth. Drifting unintentionally = worst outcome.
Start — close the 1-on-1 loop in writing. Thread captured prep; post-meeting outcomes never landed in Linear. The forcing function only works if the decision is written (DAT-576 + DAT-524 + Showbie note + customer-status-board proposal). Mon AM W22.
Start — Friday “ship-the-small-thing” batch as a habit. 3 docs PRs (docs#1639, docs#1640, skills#12) landed Fri W21. Pattern buys goodwill + clears residual queue. Keep.
Stop — silent re-baselining of multi-week carry-overs (DAT-576 = 5, DAT-524 = 14, local-dev demo = 5, Wamly = 3, H1 reflection = 2). Each must hit the “elevate + schedule OR formally move” rule. Anything dragged 5+ weeks straight is no longer a scheduling problem; it’s a prioritization problem to surface upward.
Stop — scope-creep on PBI skill mid-week. v0.1 → +12 fix (6 AQL function bugs surfaced) → v0.1.1 in 3 days is healthy iteration, but watch for “one more polish” stealing P1 oxygen from the hide-confidential-data POC. The fix PR was right; a v0.1.2 next week would be wrong.
Keep — pre-validate playbooks w/ real POC before customer call. AW-Sales parity-to-the-cent was the credibility moment. Diagrams alone wouldn’t have closed BuyCo’s evaluation matrix. Reuse for any future migration playbook (Cube → Holistics for EF, Domo → Holistics for PI).
Keep — customer asks become product-side data debts. SLA pull → severity tags + business-hours marts (BuyCo); identity resolution → parent-aware tie-break (TOGA);
relative_periodparam-boundwhere→ engine rewriter fix (TerryWhite);foreign_idpropagation → embed identity adoption (Datacubed). The pipeline from “support reply” to “engineering backlog” is the data-team flywheel — protect time for the capture, not just the answer.Personal/health watch. Captured Huberman sleep hygiene this week — likely sleep friction during heavy push weeks. Add to weekend recovery plan; do not let it become a P3 forever.
Recommended resources to learn
Power BI migration deepening — to support the next migration after BuyCo:
- Microsoft — Power BI Desktop projects (.pbip) — TMDL serialization mechanics; complements W21 LEARNING.
- TMDL view reference — first-party grammar for the
definition/tables/*.tmdlfiles the skill parses. - SQLBI — DAX patterns — canonical DAX → AQL translation reference; especially time-intelligence (most common
USERELATIONSHIPcases). - Keyword to track:
Power BI to <X> migrationblogs from Sigma, Omni, Looker, ThoughtSpot — competitive language for the playbook landing page.
Embedded analytics narrative (for [[Predictive Index]], [[Enhance Fitness]], BuyCo, Basata, Showbie pipeline):
- benn.substack — How do you make a chart — frame for the unified-toolbox positioning of the embed demo.
- Cube semantic layer docs — required reading before next Cube-replacement call (EF).
- Holistics docs — Embedded Analytics — re-read self before the Predictive Index call.
Migration playbook structure (for the BI-migration playbook series, if a 2nd migration lands):
- Sigma — Migrating from Power BI — direct competitor framing.
- dbt — Migration guides pattern — DoD-per-phase pattern; the W21 playbook already follows this; revisit for v2.
Agent / tooling:
- Anthropic — Claude Code — required for the multi-agent abstraction idea (
automation/lib-agent.sh). - OpenAI Codex CLI — for
codex execheadless usage. - evilcharts.com/docs — bookmarked; pair w/ shadcn charts when starting Personal Finance UI.
- Anthropic — Claude Code — required for the multi-agent abstraction idea (
Health & sustainability:
- Huberman Lab — Sleep Toolkit — companion to W21’s sleep-hygiene capture. Build into [[Health Rules]] before the H1 review crunch.