Skip to content
Back to skills

Decisions

ASecurity

**Date:** 2026-10-05 **Status:** decided by the owner **Affects:** the [PBIP builder proposal](../proposals/2026-10-05-pbip-builder-system-prompt.md), the `dax-reference` description, `evals/cases.yaml` ---

  • 3 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added October 24, 2026
ai-agentspythongogit

Security analysis

A100/100

Pro scans all 8 files and shows the line behind each finding

Scanned October 24, 2026

npx -y skills add CSalcedoDataBI/dax-for-agents --skill decisions --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Decisions?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Decisions
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/csalcedodatabi-decisions/badge)](https://www.skillsdirectory.com/skills/csalcedodatabi-decisions)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# No PBIP builder in this plugin — make the DAX skills fire inside one instead

**Date:** 2026-10-05
**Status:** decided by the owner
**Affects:** the [PBIP builder proposal](../proposals/2026-10-05-pbip-builder-system-prompt.md),
the `dax-reference` description, `evals/cases.yaml`

---

## What happened

With the plugin installed on claude.ai, the owner asked for a didactic Power BI project — a
`.pbip` showing `CALCULATE` at work. Claude built it **without touching the plugin**: no skill
fired. Asked how to improve, it proposed a system prompt for a "PBIP builder" agent: templates
for every `.pbip` / TMDL / PBIR file, a generate-with-one-Python-script workflow, validation with
`jsonschema` and `TmdlSerializer`, and a section of DAX best practices.

The question the owner asked was the right one: *if it builds the thing without the plugin, what
is the plugin for?*

## Why no skill fired — and why that was correct

The request was not a DAX question. It was a **project-authoring** request that happened to
contain DAX. Every description in this plugin is about the language — what a function does,
which one to pick, how a UDF is written — so the router had nothing to match against "build me a
PBIP", and it was right not to: none of the five skills knows how to lay out a `.SemanticModel`
folder.

What was missing is narrower. Somewhere inside that build Claude **wrote measures**, and at that
moment `dax-reference` should have been consulted. It was not, because its description only
answered *questions about* DAX, never *the act of writing* it as one step of something bigger.

## The decision

1. **The PBIP builder does not ship here.** This repository is the DAX language, and the
   [README](../../README.md#complements-not-competitors) says so twice: no modeling, no reports.
   PBIP / TMDL / PBIR authoring is already covered by
   [`data-goblin/power-bi-agentic-development`](https://github.com/data-goblin/power-bi-agentic-development)
   (`pbip`, `tmdl`, `pbir-format` skills) and by Microsoft's own Power BI authoring plugin. A
   third copy of the file templates, maintained by one person, would drift from the schemas
   faster than either of those.
2. **`dax-reference` fires when DAX is being written, not only asked about.** Its description now
   names the case: writing or reviewing measures, calculated columns or calculated tables,
   including inside a PBIP, a TMDL file or a report being built. A routing case guards it.
3. **The proposal stays in the repo, marked not adopted,** because it is the evidence for this
   decision and because the PBIP-format half of it is a fair checklist for whoever does build
   that skill — in a repo whose scope it fits.

## What the review of the proposal found

Most of the file-format content is consistent with what Power BI Desktop writes. The two
problems are in the part that *is* this repo's subject:

| Claim in the proposal | Verdict |
|---|---|
| "`FILTER(Tabla, ...)` as a `CALCULATE` filter is an antipattern when a column would do" — listed as something to *detect* before delivering | **Contradicted by this repo's own measurement.** [`lab/rendimiento`](../../lab/rendimiento/README.md) was built to prove `FILTER` over a whole table is expensive, and showed it is not: what costs is the context transition of a measure inside the iterator. The two forms can also return different results (expanded table vs one column), so this is a semantics choice, not a lint rule |
| Step 2: "check `examples/` of the plugin", and `schemas/`, `tools/` "the plugin already brings" | **None of the three exists.** An instruction to look in a folder that is not there is how an agent ends up inventing its contents. The runnable models this repo does have are in [`lab/`](../../lab/README.md) |

## What would change this

If a PBIP builder is ever wanted under this author's name, it is a **second plugin** — the
layout already allows it (see [INDEX conventions](../../INDEX.md#conventions), point 7) — with
its own scope line in its own README, and it should *call* `dax-reference` for every measure it
writes rather than carry its own DAX rules.

Files in this skill

  • 2026-08-10-dax-lib-catalog-only.md4.9 KB
  • 2026-08-11-generated-tree-single-swap.md2.9 KB
  • 2026-08-13-concept-count-34-not-61.md3.4 KB
  • 2026-08-17-sixteen-functions-without-category.md2 KB
  • 2026-08-25-english-as-the-repository-language.md9.8 KB
  • 2026-08-27-generated-is-frozen-at-323524c.md7.3 KB
  • 2026-10-05-no-pbip-builder-skill.md4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.