Chinh (lelouvincx) / Weekly Report - 2026-W21

Created Mon, 25 May 2026 00:00:00 +0000 Modified Mon, 25 May 2026 06:02:25 +0000
3397 Words

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-Sales POC w/ value parity to the cent; (3) migrate-power-bi agent 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.

  • DONE — End-to-end PBI POC: AW-Sales → Holistics (#P1, customer [[BuyCo]]) — closed May 18.

    • Source: AW-Sales.pbip semantic model + 3-page report (data → MotherDuck first).
    • Output: aw_sales.dataset.aml w/ 7 models (sales, date, customer, product, reseller, sales_order, sales_territory) + 8 relationships (3 active to date from OrderDateKey, DueDateKey, ShipDateKey — last two inactive role-playing), sales_order ↔ sales 1:1.
    • Decision: type: 'query' (not type: '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 column Product.Sorting = RELATED(...) → inline CASE dimension.
    • Dashboard: PBI 3-page report → single aw_sales_dashboard.page.aml w/ TabLayout. Slicers (Fiscal Year, Month) lifted to page-level FilterBlocks. 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).
  • DONE — Publish migrate-power-bi AI skill (#P1, customer [[BuyCo]]) — merged May 20.

    • PR: holistics/skills#10feat(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_aql via write-aql); never invent AML keys (use search_docs); holistics aml validate on 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 (no USERELATIONSHIP direct port).
    • Composes w/: develop-amql, write-aql, search-docs, visualize-data, working-in-development.
    • Refs: Ampcode (skill creation), Ampcode (publish).
  • 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_filterwhere; if(cond,a,b)case(when:, then:, else:); to_date_periodperiod_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 DAX ALL) + keep_grains (for ALLEXCEPT). Added caveat: running_total does not work w/ count_distinct.
      • AQL execution-order doc: new section in dax-to-aql.md explaining the 7-step pipeline so users can diagnose why metrics diverge from DAX under filter/window combos.
      • CLI/MCP rewire: SKILL.md mandates holistics aml validate + MCP tools (generate_aql, validate_aql, execute_aql) instead of hand-writing AQL.
      • Predicate fixes: is for equality, matches for date predicates (e.g., where(orders.created_at matches @2024)).
    • Then bumped to 0.1.1 (Ampcode bump). CODEOWNERS now @chinh-dm-holistics.
    • Refs: Ampcode (fix).
  • DONE — Onboarding call with [[BuyCo]] (#P1, customer [[BuyCo]]) — closed May 19.

  • 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_name vs account_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.md w/ tabbed landing (Looker, Power BI) so users coming from other BI tools have a single entry point. Banner image + per-tool link list; wired into sidebars.ts as the section root.
    • Refs: Ampcode.
  • 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 documents holistics auth <region> OAuth as Option A (recommended), API key as Option B. MCP step 4 documents holistics mcp CLI as Option A. Added workflow diagram.
    • Refs: Ampcode.
  • 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 unique user_id as foreign_id in embed token; (3) reference Identity Workspace docs. Noe will discuss internally + come back.
    • Tenant changes: added user_type dimension to public_users.model.aml (internal / external (embed)); exposed email, role, user_type, last_sign_in_at in datacubed_query_run_usage_monitoring dataset; added weekly trend chart, cycle-to-date utilization donut, and “Top Users” pivot to the monitoring dashboard. Will auto-populate w/ real IDs once foreign_id flows.
    • Refs: Ampcode (count), Ampcode (identity tracking) Slack.
  • WAITING — Support data question for [[TerryWhite Chemmart]] (#P1, [[Duty Support]]) — opened May 21.

    • Bug: relative_period returns wrong LY values when a date parameter is used as a filter inside a metric definition. Standard date-dim filters work; parameter-bound where(... 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 internal where, 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).
  • 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_customers filter to stg_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).
  • NOTE — Identity Resolution: TOGA case (DE-187) ([[Internal]]). 2 HubSpot companies map to one tenant SG-2163 via overlapping domains (togltechnology.com, togalimited.com). Root cause: itg_mappings__hubspot_tenant.sql tie-breaker arbitrary (order by hubspot_company_id asc) + not relationship-aware — both companies are parent/child (4018874875 is child of 10207389977), but hs_parent_company_id + hs_num_child_companies not extracted in staging/domain layers. Proposed 3-layer fix: (1) extract parent fields in stg_hubspot__companies.sql, (2) surface is_parent / is_child flags in dom_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 to holistics mcp subcommand → 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.sh shared library abstracting agent_setup + agent_run; scripts take --agent flag. Context-gap fix: pre-resolve external links (Amp threads, Slack, Notion) in shell layer + inject as pre-fetched markdown so any agent reads via Read tool — vendor-neutral. Long-term: nightly sync of Amp threads → R2 → MCP for native query. Refs: Ampcode.

  • Learning & Notes

  • LEARNING — Power BI Migration mechanics. .pbip does not auto-save as TMDL — Power BI Desktop only writes per-table .tmdl when pbip save-as format is explicitly enabled in preview settings. Without it: scaffold dirs (.platform, definition.pbism, empty definition/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 accountsPENDING 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-core to 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 docsdemoted 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-external closely.

  • Carry-over watch

    • ItemSinceWeeksAction
      DAT-576 MRR exchange rateW166Mon AM Linear memo. Unblocks DAT-524.
      DAT-524 Zoho test accountsW715PENDING DAT-576. Stop forcing — chained dependency now explicit.
      Local-dev demo videoW176Demoted P3. Anh Khai owns video; my side = social publish only.
      Wamly onboardingW184Monitor #holistics-wamly-external. No active push.
      H1 self-reflection + CVW193Lock W22 weekend. PR cycle approaching.
      Hide-conf-data POC BuyCoW211Monitor — Xairo says not critical, upstream-doable.
      Power BI playbookW20DONEClosed 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_period param-bound where → engine rewriter fix (TerryWhite); foreign_id propagation → 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.

  • Power BI migration deepening — to support the next migration after BuyCo:

  • Embedded analytics narrative (for [[Predictive Index]], [[Enhance Fitness]], BuyCo, Basata, Showbie pipeline):

  • Migration playbook structure (for the BI-migration playbook series, if a 2nd migration lands):

  • Agent / tooling:

  • Health & sustainability: