Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ When these topics come up, reference the corresponding file in `docs/datafactory
| Query timeout, slow performance, chunking | `performance.md` |
| Output destinations, new tables, staging | `destinations.md` |
| Fast Copy, Action.Sequence, Modern Evaluator | `advanced.md` |
| Data visuals, dashboards, reports, charts, KPI cards | `data-visuals.md` |

For connection management (creating/listing connections, supported types, UI form), reference `docs/connection-management.md`.

Expand Down
2 changes: 2 additions & 0 deletions .github/skills/datafactory.architecture/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ DataFactory.MCP.Http/ — HTTP transport layer (AspNetCore)
DataFactory.MCP.Tests/ — Test suite (xUnit)
DataFactory.WindowsMCP/ — Windows-specific MCP implementation
claude-skills/ — Claude skill definitions (RAG pattern)
chatgpt-skills/ — ChatGPT instructions and knowledge files
docs/ — Feature documentation
evals/ — Evaluation test scenarios
```
Expand Down Expand Up @@ -89,3 +90,4 @@ For Data Factory / M language / Dataflow patterns, see `claude-skills/`:
- `datafactory-destinations.md` — Output destinations, DataDestination patterns
- `datafactory-performance.md` — Query tuning, chunking, query folding
- `datafactory-advanced.md` — Fast Copy, Action.Sequence, Modern Evaluator
- `datafactory-data-visuals.md` — Dataflow Gen2 Visual generation and validation
7 changes: 6 additions & 1 deletion .github/workflows/pr-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ jobs:
uses: actions/setup-dotnet@v4
with:
dotnet-version: "10.0.x"
include-prerelease: true

- name: 📦 Restore Dependencies
run: dotnet restore --configfile ../nuget.config
Expand Down Expand Up @@ -119,6 +118,12 @@ jobs:

[View full results](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})`;

await core.summary.addRaw(body).write();

if (context.payload.pull_request.head.repo.full_name !== context.payload.pull_request.base.repo.full_name) {
return;
}

// Find existing comment
const comments = await github.rest.issues.listComments({
owner: context.repo.owner,
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@ tmpclaude-*
**/McpApps/node_modules/
**/McpApps/dist/
**/build-output.txt
**/__pycache__/
*.pyc
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ Upload the skill files from the [`claude-skills/`](claude-skills/) folder to you
- `datafactory-performance.md` - Query optimization, timeouts, chunking
- `datafactory-destinations.md` - Output configuration, programmatic setup
- `datafactory-advanced.md` - Fast Copy, Action.Sequence, Modern Evaluator
- `datafactory-data-visuals.md` - Dataflow Gen2 Visual generation

### What's Covered

Expand All @@ -159,6 +160,7 @@ Upload the skill files from the [`claude-skills/`](claude-skills/) folder to you
| **Performance** | Query timeouts, chunking strategies, filter optimization, connector selection |
| **Destinations** | Lakehouse architecture, schema settings, programmatic destination configuration |
| **Advanced** | `Action.Sequence` for writes, Fast Copy, Modern Evaluator |
| **Data visuals** | Visualization documents, visual selection, validation, and limitations |

### Usage

Expand All @@ -180,9 +182,27 @@ Create a Custom GPT or use ChatGPT Projects with pre-built Data Factory knowledg
- `knowledge-performance.md` - Query optimization, timeouts
- `knowledge-destinations.md` - Output configuration
- `knowledge-advanced.md` - Fast Copy, Action.Sequence
- `knowledge-data-visuals.md` - Dataflow Gen2 Visual contract and workflow

See [`chatgpt-skills/README.md`](chatgpt-skills/README.md) for detailed setup options.

## Dataflow Gen2 Visual Builder (Optional)

Generate Dataflow Gen2 data visuals in Power Query M. **Visual** is the canonical
artifact name; dashboard, report, and chart are discovery synonyms.

| Client | Knowledge file |
|--------|----------------|
| Claude | [`claude-skills/datafactory-data-visuals.md`](claude-skills/datafactory-data-visuals.md) |
| ChatGPT | [`chatgpt-skills/knowledge-data-visuals.md`](chatgpt-skills/knowledge-data-visuals.md) |
| Repo agents | [`docs/datafactory/data-visuals.md`](docs/datafactory/data-visuals.md) |

To confirm both clients produce equivalent results, run the checklist in
[`evals/dataflow-visuals-parity.md`](evals/dataflow-visuals-parity.md).

These are client-side companion files. They are not included in the MCP NuGet
package, because installing an MCP server does not register skills with a client.

## Documentation

For complete documentation, see our **[Documentation Index](https://github.com/microsoft/DataFactory.MCP/blob/main/docs/index.md)**.
Expand Down
18 changes: 18 additions & 0 deletions chatgpt-skills/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ Operational tips and best practices for working with Microsoft Fabric Data Facto
- `knowledge-performance.md`
- `knowledge-destinations.md`
- `knowledge-advanced.md`
- `knowledge-data-visuals.md`
4. Under **Capabilities**, enable:
- ✅ Code Interpreter (for M code analysis)
5. Click **Create** → **Save**
Expand All @@ -41,6 +42,7 @@ Operational tips and best practices for working with Microsoft Fabric Data Facto
| `knowledge-performance.md` | Query optimization, timeouts, chunking |
| `knowledge-destinations.md` | Output configuration, programmatic setup |
| `knowledge-advanced.md` | Fast Copy, Action.Sequence, Modern Evaluator |
| `knowledge-data-visuals.md` | Dataflow Gen2 Visual contract, workflow, and limitations |

## What's Covered

Expand All @@ -66,6 +68,11 @@ Operational tips and best practices for working with Microsoft Fabric Data Facto
- Fast Copy (limited transforms, fast ingestion)
- Modern Evaluator (complex transforms, limited connectors)

### Data visuals
- Visualization document contract (flat five-column table)
- Closed PartType set and required properties
- Visual selection, validation, and Preview limitations

## Usage Examples

Once your GPT is created, you can ask:
Expand All @@ -75,6 +82,7 @@ Once your GPT is created, you can ask:
- "What's the difference between Fast Copy and Modern Evaluator?"
- "Help me write an M query to aggregate sales by month"
- "Explain Action.Sequence and when to use it"
- "Build a dashboard from my SalesData query"

## Comparison with Claude Skills

Expand All @@ -83,3 +91,13 @@ Once your GPT is created, you can ask:
| Format | Multiple .md files with YAML frontmatter | Instructions + Knowledge files |
| Loading | On-demand via RAG triggers | All knowledge available |
| Best for | Claude Projects | Custom GPTs or ChatGPT Projects |

## Dataflow Gen2 Visual builder

Visual requests are routed by `gpt-instructions.md`, which loads
`knowledge-data-visuals.md`. Visual is the canonical artifact name; dashboard,
report, and chart remain discovery synonyms.

Use the shared cases in `../evals/dataflow-visuals-parity.md` to run the same
prompts in ChatGPT and Claude and compare both outputs with one checklist. No
provider API keys are required.
9 changes: 9 additions & 0 deletions chatgpt-skills/gpt-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,14 @@ You are an expert assistant for Microsoft Fabric Data Factory, specializing in M
4. Offer to open the interactive form: resource `ui://datafactory/create-connection`
5. Use `list_connections` / `get_connection` to inspect existing connections

### When users ask for a visual, dashboard, report, chart, or KPI:
1. Load `knowledge-data-visuals.md`
2. Call the artifact a Visual or visualization document
3. Clarify business intent and ambiguous metric definitions
4. Generate the documented flat five-column Power Query M table
5. Validate hierarchy, property types, and exact chart-column mappings
6. Ask before persistent changes and validate the complete mashup before saving

## Response Style

- Be concise and practical
Expand Down Expand Up @@ -78,3 +86,4 @@ in
- Fast Copy only supports: combine files, select columns, change types, rename/remove columns
- For connection creation, always call `list_supported_connection_types` first to get correct parameters
- `gatewayId` is required for `OnPremisesGateway` and `VirtualNetworkGateway` connectivity types
- Data visuals are a Preview feature; structural validation does not prove successful Fabric rendering
56 changes: 56 additions & 0 deletions chatgpt-skills/knowledge-data-visuals.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Dataflow Gen2 Data Visuals

Use this knowledge for Dataflow Gen2 visual, visualization, dashboard, report,
chart, KPI, and visual-summary requests. **Visual** and **visualization document**
are canonical; the other terms are request synonyms.

Data visuals are in Preview. Return one flat Power Query M table whose exact
columns are `Name` (`nullable text`), `Parent` (`nullable text`), `PartType`
(`nullable text`), `Properties` (`nullable record`), and `Data` (`any`).

The closed PartType set is `Container`, `Card`, `Header`, `KpiCard`, `Table`,
`LineChart`, `AreaChart`, `BarChart`, `StackedBarChart`, `DonutChart`, and
`PieChart`. Never invent another value or use a nested record-tree contract.

## Contract

| PartType | Children | Required values |
| --- | --- | --- |
| `Container` | One or more | Optional `Direction` is `"row"` or `"column"` |
| `Card` | Exactly one | Text `Title` |
| `Header` | None | Text `Header`; optional text `FarText` |
| `KpiCard` | None | Text `Value`, text `Label`; optional text `Sub` |
| `Table` | None | Table in `Data` |
| `LineChart`, `AreaChart` | None | `XAxis`, numeric `YAxis`, table in `Data` |
| `BarChart`, `DonutChart`, `PieChart` | None | `Category`, numeric `Value`, table in `Data` |
| `StackedBarChart` | None | `Category`, numeric `Value`, `Series`, table in `Data` |

Exactly one row has `Parent = null`. Use unique non-null names, resolvable
parents, and acyclic relationships. Charts go inside cards. Chart properties
name exact columns in `Data`; a mismatch can silently render an `undefined`
bucket. Format KPI values as text.

Duplicate names don't raise an error, but any row parented to an ambiguous name
fails to render, so keep names unique.

## Workflow

1. Clarify objective, audience, measures, dimensions, time grain, filters,
targets, and exclusions. Confirm ambiguous definitions.
2. Inspect query definitions or metadata without sampling business values.
Prefer `get_dataflow_definition` when MCP tools are available. Never use
`Expression.Evaluate` or dynamically evaluate sibling query values.
3. Recommend a lightweight Visual and state assumptions.
4. Select required columns, filter invalid values, aggregate to visual grain,
sort explicitly, and cap categories before constructing the flat `#table`.
5. Begin with at most three data visuals, ten chart categories, and 50 detail
rows. Add complexity only after rendering succeeds.
6. Test with `execute_query` when possible. Ask before persistent changes. Use
`save_dataflow_definition` with `validateOnly = true` before saving because
a save replaces the complete mashup. After saving, restore required bindings
with `add_connection_to_dataflow` and validate them.

Visuals are static, appear only in the authoring canvas, do not become refresh
output, and can slow authoring when numerous or backed by large tables. Line and
area charts do not fill missing dates. Structural validation does not prove a
successful Fabric render.
7 changes: 6 additions & 1 deletion claude-skills/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: datafactory-tips
description: Operational tips and best practices for working with Microsoft Fabric Data Factory MCP tools. Use when executing queries, troubleshooting timeouts, creating dataflows end-to-end, or working with large datasets via the DataFactory.MCP tools.
description: Operational guidance for Microsoft Fabric Data Factory MCP tools. Use when executing queries, troubleshooting timeouts, creating dataflows, or building a Dataflow Gen2 visual, dashboard, report, chart, or KPI.
---

# Data Factory Tips
Expand Down Expand Up @@ -39,6 +39,10 @@ Operational knowledge for working with Microsoft Fabric Data Factory.
| Multi-source instant fail via API | Dirty dataflow or separate Lakehouse.Contents calls | `sources/multi-source.md` |
| `IsNewTarget = false` fails | Direct navigation on API-created dataflow | `destinations/dest-new-table.md` |
| Stale connections after revert | save_dataflow_definition doesn't remove connections | `datafactory-connections.md` (Troubleshooting) |
| Visual renders as a plain table | A required column is missing or renamed | `datafactory-data-visuals.md` |
| `Visual not recognized: "<value>"` | PartType outside the closed set | `datafactory-data-visuals.md` |
| Chart shows one `undefined` bucket | Property names a column missing from `Data` | `datafactory-data-visuals.md` |
| `must contain exactly one root row` | Zero or multiple rows with `Parent = null` | `datafactory-data-visuals.md` |

## Knowledge Files

Expand All @@ -49,6 +53,7 @@ Operational knowledge for working with Microsoft Fabric Data Factory.
| `datafactory-performance.md` | Query timeouts, chunking, query folding, connector selection |
| `datafactory-advanced.md` | Fast Copy limits, Action.Sequence, Modern Evaluator |
| `datafactory-pipelines.md` | Pipeline creation, Dataflow activities, chaining, scheduling |
| `datafactory-data-visuals.md` | Dataflow Gen2 Visual, dashboard, report, chart, and KPI generation |

### Destination Files (read only the one you need)

Expand Down
66 changes: 66 additions & 0 deletions claude-skills/datafactory-data-visuals.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Dataflow Gen2 Data Visuals

Use this knowledge when a user asks for a Dataflow Gen2 visual, visualization,
dashboard, report, chart, KPI, or visual summary. Call the generated artifact a
**Visual** or **visualization document**; the other terms are request synonyms.

Data visuals are a Preview feature. A Visual is a flat Power Query M table with
these exact columns and types:

```powerquery-m
type table [
Name = nullable text,
Parent = nullable text,
PartType = nullable text,
Properties = nullable record,
Data = any
]
```

Only these PartTypes exist: `Container`, `Card`, `Header`, `KpiCard`, `Table`,
`LineChart`, `AreaChart`, `BarChart`, `StackedBarChart`, `DonutChart`, and
`PieChart`.

## Contract

| PartType | Children | Required values |
| --- | --- | --- |
| `Container` | One or more | Optional `Direction` is `"row"` or `"column"` |
| `Card` | Exactly one | Text `Title` |
| `Header` | None | Text `Header`; optional text `FarText` |
| `KpiCard` | None | Text `Value`, text `Label`; optional text `Sub` |
| `Table` | None | Table in `Data` |
| `LineChart`, `AreaChart` | None | `XAxis`, numeric `YAxis`, table in `Data` |
| `BarChart`, `DonutChart`, `PieChart` | None | `Category`, numeric `Value`, table in `Data` |
| `StackedBarChart` | None | `Category`, numeric `Value`, `Series`, table in `Data` |

Exactly one row has `Parent = null`. Every `Name` is unique and non-null. Every
other `Parent` resolves to a `Name`, and relationships are acyclic. Charts go
inside cards. Chart properties contain exact column names from their `Data`
table; a bad name can silently produce one `undefined` bucket. KPI values are
formatted as text.

Duplicate names don't raise an error, but any row parented to an ambiguous name
fails to render, so keep names unique.

## Workflow

1. Clarify objective, audience, measures, dimensions, time grain, filters,
targets, and exclusions. Confirm ambiguous definitions.
2. Inspect query definitions or metadata without sampling business values.
Prefer `get_dataflow_definition` when MCP tools are available. Never use
`Expression.Evaluate` or dynamically evaluate sibling query values.
3. Recommend a lightweight Visual and state assumptions.
4. Select required columns, filter invalid values, aggregate to visual grain,
sort explicitly, and cap categories before building the flat `#table`.
5. Start with at most three data visuals, ten chart categories, and 50 detail
rows. Add complexity only after rendering succeeds.
6. Test nonpersistently with `execute_query` when possible. Ask before changing
a dataflow. Use `save_dataflow_definition` with `validateOnly = true` before
saving because a save replaces the complete mashup. After saving, restore
required bindings with `add_connection_to_dataflow` and validate them.

Visuals are static, render only in the authoring canvas, do not become refresh
output, and can slow authoring when numerous or backed by large tables. Line and
area charts do not fill missing dates. Structural validation cannot prove that
Fabric rendered the Visual successfully.
Loading
Loading