En bref
Construisez des tableaux de dimension / recherche réutilisables pour un schéma d'étoiles — pays/région, fuseau horaire, monnaie, date, plan/produit et autres attributs descriptifs — sur les vues de stockage de données PostHog (HogQL) ou un projet dbt externe. Utiliser quand l'utilisateur veut modéliser des tables de dimension, des tables de recherche, un schéma d'étoiles, des dimensions conformes, ou veut enrichir des événements/revenus/usage avec le pays, la région, le fuseau horaire, le plan ou les attributs de monnaie sans répéter JOIN. Couvre l'approvisionnement des données de dimension (chargement, source d'entrepôt, ou dérive d'événements), la façonnant en une vue aliasée à une rangée par entité (facultativement matérialisée sur un calendrier lent puisque les dimensions changent rarement) et l'attachant aux faits via une personne sauvée ou rejoignant ainsi ses colonnes lues comme champs natifs. Règle clé : pour la monnaie, utilisez la conversion intégréeCurrency() au lieu d'une table de taux laminée à la main. Lisez d'abord la modélisation-logiciel-fondations; les dimensions ici sont réutilisées par les compétences de modélisation des revenus, conversion, activation et utilisation des produits.
Ce que ça fait
- Schéma d'étoile dans un écran
- La monnaie est déjà une dimension gérée — ne la construisez pas
- Règles avant le modèle
Pour qui, et un exemple
Personnes dont la tâche correspond: Construire des tables de recherche / dimension réutilisables pour un schéma d'étoiles — pays/région, fuseau horaire, monnaie, date, plan/produit, et d'autres attributs descriptifs — soit sur les vues PostHog data-warehouse (HogQL) soit sur un projet dbt externe.
Exemple de demande : « Tableaux des dimensions de modélisation (schéma étoile) : Construisez des tableaux de dimension / recherche réutilisables pour un schéma d'étoiles — pays/région, fuseau horaire, monnaie, date, plan/produit et autres at »
Construisez des tableaux de dimension / recherche réutilisables pour un schéma d'étoiles — pays/région, fuseau horaire, monnaie, date, plan/produit et autres attributs descriptifs — sur les vues de stockage de données PostHog (HogQL) ou un projet dbt externe. Exemple rédigé par iadujour.fr à partir du SKILL.md, non testé.
Installer
Claude Code : /plugin marketplace add PostHog/skills, puis /plugin install posthog-all@posthog-skills (README).
/plugin marketplace add PostHog/skills/plugin install posthog-all@posthog-skillsFonctionne avec
- Claude Code
Source : README : marketplace Claude Code `/plugin marketplace add PostHog/skills`. D’autres agents ne sont pas nommés.
Niveau : Intermédiaire
Suppose un projet déjà en place chez l’éditeur et les outils décrits dans le SKILL.md.
À savoir
Extrait du SKILL.md
La description d’origine, celle que l’agent lit pour décider de charger la skill (en anglais) :
Build reusable dimension / lookup tables for a star schema — country/region, timezone, currency, date, plan/product, and other descriptive attributes — on either PostHog data-warehouse views (HogQL) or an external dbt project. Use when the […]
Citée depuis le SKILL.md au commit 445764b . Le dossier contient aussi 6 fichiers annexes (references/).
Le SKILL.md compte 83 lignes et 6 sections principales :
- Star schema in one screen
- Currency is already a managed dimension — don't build it
- Rules before you model
- Build it
- File map
- Companions
Licence : MIT
Consultée le 13 novembre 2026 : fichier de licence du dépôt.
La licence autorise la reprise : le texte intégral du SKILL.md est reproduit ci-dessous, sans modification, avec sa mention de licence.
Texte intégral du SKILL.md
Reproduit sans modification depuis PostHog/skills (commit 445764b) , © PostHog, sous licence MIT (fichier de licence d’origine ).
Afficher le SKILL.md original (83 lignes, en anglais)
---
name: modeling-dimension-tables
description: >
Build reusable dimension / lookup tables for a star schema — country/region, timezone, currency, date,
plan/product, and other descriptive attributes — on either PostHog data-warehouse views (HogQL) or an
external dbt project. Use when the user wants to model dimension tables, lookup tables, a star schema,
conformed dimensions, or wants to enrich events/revenue/usage with country, region, timezone, plan, or
currency attributes without repeating JOINs. Covers sourcing the dimension data (upload, warehouse source,
or derive from events), shaping it into an aliased one-row-per-entity view (optionally materialized on a
slow schedule since dimensions change rarely), and attaching it to facts via a saved or person join so its
columns read as native fields. Key rule: for currency use the built-in convertCurrency() instead of a
hand-rolled rate table. Read modeling-warehouse-foundations first; dimensions here are reused by the
revenue, conversion, activation, and product-usage modeling skills.
---
# Modeling dimension tables (star schema)
Dimensions are the descriptive tables (`dim_country`, `dim_plan`, `dim_date`) that fact tables join to for
slicing. This skill builds them once, cleanly, so every other model reuses them instead of re-deriving
lookups. Read `modeling-warehouse-foundations` first (joins + `convertCurrency()` live there). Catalog of
common dimensions: [`references/dimension-catalog.md`](references/dimension-catalog.md); recipes in
[`references/posthog/`](references/posthog/) and [`references/dbt/`](references/dbt/).
## Star schema in one screen
**Facts** (events, charges, revenue items) are long, keyed, and additive. **Dimensions** are short, one row
per entity, descriptive. You model a dimension in three moves:
1. **Source it** — where does the dimension data come from?
- _Upload / seed_ a lookup (country→region, plan→tier) as a CSV (warehouse source or dbt seed).
- _Sync_ it from a system of record (your app DB, Stripe products) as a warehouse source.
- _Derive_ it from events (distinct countries seen, a plan property observed per person).
2. **Shape it** — an **aliased** `SELECT` with clean column names, **one row per entity** (dedupe hard).
Save as a view; **materialize** it on a **slow** `sync_frequency` (`7day`/`30day`) since dimensions change
rarely and are read constantly.
3. **Attach it** — a **saved join** (dimension → a fact table) or **person join** (dimension → persons) so
its columns appear as native fields in any query, filter, or breakdown. See foundations
`joins-and-dimensions.md`.
## Currency is already a managed dimension — don't build it
PostHog ships exchange rates behind `convertCurrency(from, to, amount, timestamp?)` (Open Exchange Rates,
historical-rate-correct). Use it directly for any money conversion. Only build a currency dimension yourself
in **dbt** (which has no equivalent), or if you need a rate provider PostHog doesn't offer.
## Rules before you model
1. **One row per entity, unique key.** A dimension with duplicate keys silently fan-outs every fact it joins.
Test uniqueness (PostHog: verify in the shaping query; dbt: `unique` + `not_null`).
2. **Drop NULL keys when you derive a dimension from events.** HogQL keeps a row whose property is
missing when the filter only compares it to `''`, so add `isNotNull(...)` as well. A NULL key becomes a
dimension row of its own and it matches nothing on the fact side.
3. **Alias to clean, stable names** — `country_code`, `region`, `plan_tier`. These names become the join
surface everything else depends on.
4. **Materialize static dimensions on a slow schedule**; don't leave a constantly-read lookup virtual.
5. **Register and certify.** Annotate the dimension and, if it's load-bearing, certify it in the catalog
(foundations `governance.md`) so other models discover it and don't build a rival copy.
6. **Prefer built-in currency** (`convertCurrency`) over a hand-rolled FX table on PostHog.
## Build it
**PostHog:** shape an aliased dimension view, then materialize + join. Recipes:
[`references/posthog/dim_country.sql`](references/posthog/dim_country.sql) (derive + enrich from events),
[`dim_plan.sql`](references/posthog/dim_plan.sql) (lookup/upload pattern).
**dbt:** conformed `dim_*` models with `unique`/`not_null`/`relationships` tests, plus a generated
`dim_date`. Recipes: [`references/dbt/`](references/dbt/).
## File map
| File | Read when |
| -------------------------------------------------------------------- | ----------------------------------------------------------- |
| [`references/dimension-catalog.md`](references/dimension-catalog.md) | Common dimensions, how to source each, and the natural key. |
| [`references/posthog/`](references/posthog/) | HogQL aliased-dimension view recipes. |
| [`references/dbt/`](references/dbt/) | dbt `dim_date` / `dim_country` + `schema.yml` tests. |
## Companions
`modeling-warehouse-foundations` (joins + currency), `setting-up-a-data-warehouse-source` /
`suggesting-data-imports` (sync/upload the source data), and the models that consume these dimensions:
`modeling-revenue-metrics`, `modeling-conversion-metrics`, `modeling-activation-metrics`,
`modeling-product-usage-metrics`.
Commentaires.
Un retour d’expérience, une question, une précision sur cette skill ? Les commentaires sont relus avant publication.
Commentaires publiés
Chargement des commentaires…
Laisser un commentaire
Charte de modération. Chaque commentaire est relu avant publication. Sont refusés : l’incitation à la haine, les propos injurieux ou discriminatoires, la publicité, le spam et les liens promotionnels, le hors-sujet et les données personnelles d’autrui.