[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69BRE8A85ESAFRTA255BHCF":3,"skill-same:01M69BRE8A85ESAFRTA255BHCF":78},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":40,"repositoryHtmlUrl":41,"repositoryHomepageUrl":6,"ownerHtmlUrl":42,"ownerBlogUrl":43,"ownerDescription":44,"updatedAt":45,"install":46,"resources":59},"01M69BRE8A85ESAFRTA255BHCF","fabric-sdk",null,"How to use @microsoft\u002Ffabric-app-data to connect web applications to Fabric data sources at runtime. Build browser-based apps that query semantic models via DAX using the FabricClient API.","microsoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69BQSJQPXFASHBVQPS3NH5G",1,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric\u002Fblob\u002Fmain\u002Fsrc\u002Fcaldova-insights\u002F.agents\u002Fskills\u002Ffabric-sdk\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[24,25,26,27,9,28,29,30,31],"sdk","fabric sdk","fabric","web","dax","connect","fabric data","semantic models","2026-11-10 10:12:30",false,"---\nname: fabric-sdk\ndescription: >\n  How to use @microsoft\u002Ffabric-app-data to connect web applications to Fabric data\n  sources at runtime. Build browser-based apps that query semantic models\n  via DAX using the FabricClient API.\n---\n\n# Fabric SDK Usage\n\n## Overview\n\n`@microsoft\u002Ffabric-app-data` lets web applications query Fabric semantic models at\nruntime. The SDK provides a `FabricClient` that handles querying, result\nparsing, caching, and error handling. Transport and authentication are\ndelegated to an `IFabricApiProxy` implementation, keeping the SDK\nenvironment-agnostic (browser, Node.js, Fabric extensions).\n\n## Quick Start\n\n```typescript\nimport { FabricClient } from \"@microsoft\u002Ffabric-app-data\";\n\nconst client = new FabricClient({\n  proxy,                               \u002F\u002F provided by host environment\n  semanticModels: {\n    sales: { workspaceId: \"...\", itemId: \"...\" },\n  },\n});\n\nconst result = await client.semanticModel(\"sales\").query(\n  \"EVALUATE SUMMARIZECOLUMNS(Product[Category], \\\"Total\\\", [Sales Amount])\"\n);\n\nif (result.status === \"success\") {\n  \u002F\u002F result.table.columns — [{name, dataType}]\n  \u002F\u002F result.table.rows    — unknown[][]\n} else {\n  \u002F\u002F result.error.category — \"api\" | \"query\" | \"overflow\" | \"network\" | \"unknown\"\n  \u002F\u002F result.error.message\n}\n```\n\n## Key Concepts\n\n### FabricClient Configuration\n\nThe `FabricClient` is constructed with a config object. The `proxy` and\nconnection details are typically provided by the host environment — your\ncode just needs to pass them through:\n\n```typescript\nnew FabricClient({\n  proxy,                               \u002F\u002F Provided by host environment\n  semanticModels: {                    \u002F\u002F Named connections\n    alias: { workspaceId, itemId },\n  },\n  cache: {                             \u002F\u002F Optional\n    enabled: true,                     \u002F\u002F Default: true\n    maxEntries: 64,                    \u002F\u002F Default: 64 (LRU eviction)\n  },\n});\n```\n\n- `workspaceId` can be a GUID or `\"me\"` for My Workspace items.\n\n### Managing Connections\n\nThe `FabricClient` accepts connection config as a plain object. How you\nmanage those IDs (environment variables, config files, codegen) is up to\nyour project. The only requirement is that `workspaceId` and `itemId`\nare provided for each named connection.\n\n```typescript\nconst client = new FabricClient({\n  proxy,\n  semanticModels: {\n    sales: { workspaceId: \"00c98f7c-...\", itemId: \"03f2dc11-...\" },\n  },\n});\n```\n\n### Querying\n\nThere is **one method** for DAX queries:\n\n```typescript\nconst result = await client.semanticModel(\"alias\").query(dax);\n\n\u002F\u002F To skip the cache:\nconst fresh = await client.semanticModel(\"alias\").query(dax, { bypassCache: true });\n```\n\n### Result Handling\n\n**Always check `result.status`** — queries never throw.\n\nEach query must contain exactly one `EVALUATE` statement. On success, the\nresult contains a single `table` with:\n- `columns`: `Array\u003C{ name: string, dataType: string }>` — column metadata\n- `rows`: `unknown[][]` — row-major array, values match column order by index\n\n```typescript\nconst result = await model.query(\"EVALUATE ...\");\n\nif (result.status === \"success\") {\n  \u002F\u002F result.table.columns = [{ name: \"Product[Name]\", dataType: \"String\" },\n  \u002F\u002F                          { name: \"[Sales]\", dataType: \"Int64\" }]\n  \u002F\u002F result.table.rows    = [[\"Widget\", 42], [\"Gadget\", 17]]\n  \u002F\u002F result.table.rows[0][0] → \"Widget\" (matches columns[0])\n  \u002F\u002F result.table.rows[0][1] → 42       (matches columns[1])\n} else {\n  console.error(result.error.message);\n  \u002F\u002F result.error.category: \"query\" (bad DAX), \"overflow\" (value too large),\n  \u002F\u002F                        \"api\" (HTTP error), \"network\" (connectivity), \"unknown\"\n}\n```\n\n### Caching\n\nResults are cached in memory by default (LRU, 64 entries).\n\n```typescript\nconst r1 = await model.query(\"EVALUATE T\");  \u002F\u002F r1.fromCache === false\nconst r2 = await model.query(\"EVALUATE T\");  \u002F\u002F r2.fromCache === true\n\n\u002F\u002F Check cache age\nif (r2.fromCache && r2.cachedAt) {\n  const ageMs = Date.now() - r2.cachedAt.getTime();\n}\n\n\u002F\u002F Force fresh result\nconst fresh = await model.query(\"EVALUATE T\", { bypassCache: true });\n\n\u002F\u002F Clear cache\nclient.clearCache();                          \u002F\u002F all sub-clients\nmodel.clearCache();                           \u002F\u002F this model only\n```\n\n**What gets cached:**\n- ✅ Success results\n- ✅ Query errors (bad DAX — won't fix itself)\n- ❌ API errors (401, 500 — transient)\n- ❌ Network errors (transient)\n\n### Error Categories\n\n| Category | Meaning | Cached? | Example |\n|----------|---------|---------|---------|\n| `query` | Invalid DAX syntax | Yes | `\"Syntax error at position 18\"` |\n| `overflow` | Integer\u002Fdecimal exceeds safe range | Yes | Value > MAX_SAFE_INTEGER |\n| `api` | HTTP error from Fabric | No | 401 Unauthorized, 500 Server Error |\n| `network` | Connection failure | No | DNS resolution, timeout |\n| `unknown` | Unexpected error | No | Parse failure |\n\n### Data Types and DateTime Semantics\n\nThe SDK converts all DAX data types to standard JS values:\n\n| DAX type | JS value type | Example |\n|----------|--------------|---------|\n| Integer (Int64) | `number` | `42` |\n| Double (Float64) | `number` | `3.14` |\n| Currency\u002FDecimal | `number` | `100.50` |\n| Boolean | `boolean` | `true` |\n| String | `string` | `\"hello\"` |\n| DateTime\u002FDate | `string` (ISO) | `\"2024-01-15T10:30:00.000\"` |\n| BLANK | `null` | `null` |\n\n**DateTime values** are returned as ISO 8601 strings **without a timezone\nsuffix** (no `Z`, no `±HH:MM`). This matches the semantics of Analysis\nServices semantic models, where datetimes are timezone-unaware.\n\n```typescript\n\u002F\u002F DateTime column values look like:\n\"2024-01-15T10:30:00.000\"   \u002F\u002F no timezone — interpret as-is\n\"2023-06-01T00:00:00.000\"\n```\n\nThis format is directly usable as a `temporal` type in charting libraries\nand ensures consistent display across all browser timezones. The JSON and\nArrow protocols both return the same format.\n\n**Integer overflow**: If an integer value exceeds `±Number.MAX_SAFE_INTEGER`\n(±9,007,199,254,740,991), the query returns an error with\n`category: \"overflow\"` rather than silently losing precision.\n\n## Common Patterns\n\n### Multiple Models\n\n```typescript\nconst client = new FabricClient({\n  proxy,\n  semanticModels: {\n    sales: { workspaceId: \"ws-1\", itemId: \"item-1\" },\n    inventory: { workspaceId: \"ws-2\", itemId: \"item-2\" },\n  },\n});\n\nconst salesResult = await client.semanticModel(\"sales\").query(\"EVALUATE ...\");\nconst invResult = await client.semanticModel(\"inventory\").query(\"EVALUATE ...\");\n```\n\n### My Workspace Items\n\n```typescript\nsemanticModels: {\n  myModel: { workspaceId: \"me\", itemId: \"...\" },\n}\n```\n\n### Disabling Cache\n\n```typescript\nnew FabricClient({\n  proxy,\n  cache: { enabled: false },\n  semanticModels: { ... },\n});\n```\n\n## Anti-Patterns\n\n- **Don't catch errors from `query()`** — it never throws. Check `result.status`.\n- **Don't hardcode endpoint URLs** — the proxy handles transport.\n- **Don't construct `SemanticModelClient` directly** — use `client.semanticModel(alias)`.\n- **Don't import from internal paths** — only import from `\"@microsoft\u002Ffabric-app-data\"`.\n\n## Type Reference\n\nAll types are exported from the `\"@microsoft\u002Ffabric-app-data\"` package entry point.\n\nKey types to import when needed:\n```typescript\nimport type {\n  FabricClientConfig,\n  FabricItemRef,\n  QueryResult,\n  CachedQueryResult,\n  QueryCacheOptions,\n  QueryTable,\n  QueryColumn,\n  QueryError,\n} from \"@microsoft\u002Ffabric-app-data\";\n```\n\nFor full type definitions, see `references\u002Ftypes.md` in this skill.\n","# Fabric SDK Usage\n\n## Overview\n\n`@microsoft\u002Ffabric-app-data` lets web applications query Fabric semantic models at\nruntime. The SDK provides a `FabricClient` that handles querying, result\nparsing, caching, and error handling. Transport and authentication are\ndelegated to an `IFabricApiProxy` implementation, keeping the SDK\nenvironment-agnostic (browser, Node.js, Fabric extensions).\n\n## Quick Start\n\n```typescript\nimport { FabricClient } from \"@microsoft\u002Ffabric-app-data\";\n\nconst client = new FabricClient({\n  proxy,                               \u002F\u002F provided by host environment\n  semanticModels: {\n    sales: { workspaceId: \"...\", itemId: \"...\" },\n  },\n});\n\nconst result = await client.semanticModel(\"sales\").query(\n  \"EVALUATE SUMMARIZECOLUMNS(Product[Category], \\\"Total\\\", [Sales Amount])\"\n);\n\nif (result.status === \"success\") {\n  \u002F\u002F result.table.columns — [{name, dataType}]\n  \u002F\u002F result.table.rows    — unknown[][]\n} else {\n  \u002F\u002F result.error.category — \"api\" | \"query\" | \"overflow\" | \"network\" | \"unknown\"\n  \u002F\u002F result.error.message\n}\n```\n\n## Key Concepts\n\n### FabricClient Configuration\n\nThe `FabricClient` is constructed with a config object. The `proxy` and\nconnection details are typically provided by the host environment — your\ncode just needs to pass them through:\n\n```typescript\nnew FabricClient({\n  proxy,                               \u002F\u002F Provided by host environment\n  semanticModels: {                    \u002F\u002F Named connections\n    alias: { workspaceId, itemId },\n  },\n  cache: {                             \u002F\u002F Optional\n    enabled: true,                     \u002F\u002F Default: true\n    maxEntries: 64,                    \u002F\u002F Default: 64 (LRU eviction)\n  },\n});\n```\n\n- `workspaceId` can be a GUID or `\"me\"` for My Workspace items.\n\n### Managing Connections\n\nThe `FabricClient` accepts connection config as a plain object. How you\nmanage those IDs (environment variables, config files, codegen) is up to\nyour project. The only requirement is that `workspaceId` and `itemId`\nare provided for each named connection.\n\n```typescript\nconst client = new FabricClient({\n  proxy,\n  semanticModels: {\n    sales: { workspaceId: \"00c98f7c-...\", itemId: \"03f2dc11-...\" },\n  },\n});\n```\n\n### Querying\n\nThere is **one method** for DAX queries:\n\n```typescript\nconst result = await client.semanticModel(\"alias\").query(dax);\n\n\u002F\u002F To skip the cache:\nconst fresh = await client.semanticModel(\"alias\").query(dax, { bypassCache: true });\n```\n\n### Result Handling\n\n**Always check `result.status`** — queries never throw.\n\nEach query must contain exactly one `EVALUATE` statement. On success, the\nresult contains a single `table` with:\n- `columns`: `Array\u003C{ name: string, dataType: string }>` — column metadata\n- `rows`: `unknown[][]` — row-major array, values match column order by index\n\n```typescript\nconst result = await model.query(\"EVALUATE ...\");\n\nif (result.status === \"success\") {\n  \u002F\u002F result.table.columns = [{ name: \"Product[Name]\", dataType: \"String\" },\n  \u002F\u002F                          { name: \"[Sales]\", dataType: \"Int64\" }]\n  \u002F\u002F result.table.rows    = [[\"Widget\", 42], [\"Gadget\", 17]]\n  \u002F\u002F result.table.rows[0][0] → \"Widget\" (matches columns[0])\n  \u002F\u002F result.table.rows[0][1] → 42       (matches columns[1])\n} else {\n  console.error(result.error.message);\n  \u002F\u002F result.error.category: \"query\" (bad DAX), \"overflow\" (value too large),\n  \u002F\u002F                        \"api\" (HTTP error), \"network\" (connectivity), \"unknown\"\n}\n```\n\n### Caching\n\nResults are cached in memory by default (LRU, 64 entries).\n\n```typescript\nconst r1 = await model.query(\"EVALUATE T\");  \u002F\u002F r1.fromCache === false\nconst r2 = await model.query(\"EVALUATE T\");  \u002F\u002F r2.fromCache === true\n\n\u002F\u002F Check cache age\nif (r2.fromCache && r2.cachedAt) {\n  const ageMs = Date.now() - r2.cachedAt.getTime();\n}\n\n\u002F\u002F Force fresh result\nconst fresh = await model.query(\"EVALUATE T\", { bypassCache: true });\n\n\u002F\u002F Clear cache\nclient.clearCache();                          \u002F\u002F all sub-clients\nmodel.clearCache();                           \u002F\u002F this model only\n```\n\n**What gets cached:**\n- ✅ Success results\n- ✅ Query errors (bad DAX — won't fix itself)\n- ❌ API errors (401, 500 — transient)\n- ❌ Network errors (transient)\n\n### Error Categories\n\n| Category | Meaning | Cached? | Example |\n|----------|---------|---------|---------|\n| `query` | Invalid DAX syntax | Yes | `\"Syntax error at position 18\"` |\n| `overflow` | Integer\u002Fdecimal exceeds safe range | Yes | Value > MAX_SAFE_INTEGER |\n| `api` | HTTP error from Fabric | No | 401 Unauthorized, 500 Server Error |\n| `network` | Connection failure | No | DNS resolution, timeout |\n| `unknown` | Unexpected error | No | Parse failure |\n\n### Data Types and DateTime Semantics\n\nThe SDK converts all DAX data types to standard JS values:\n\n| DAX type | JS value type | Example |\n|----------|--------------|---------|\n| Integer (Int64) | `number` | `42` |\n| Double (Float64) | `number` | `3.14` |\n| Currency\u002FDecimal | `number` | `100.50` |\n| Boolean | `boolean` | `true` |\n| String | `string` | `\"hello\"` |\n| DateTime\u002FDate | `string` (ISO) | `\"2024-01-15T10:30:00.000\"` |\n| BLANK | `null` | `null` |\n\n**DateTime values** are returned as ISO 8601 strings **without a timezone\nsuffix** (no `Z`, no `±HH:MM`). This matches the semantics of Analysis\nServices semantic models, where datetimes are timezone-unaware.\n\n```typescript\n\u002F\u002F DateTime column values look like:\n\"2024-01-15T10:30:00.000\"   \u002F\u002F no timezone — interpret as-is\n\"2023-06-01T00:00:00.000\"\n```\n\nThis format is directly usable as a `temporal` type in charting libraries\nand ensures consistent display across all browser timezones. The JSON and\nArrow protocols both return the same format.\n\n**Integer overflow**: If an integer value exceeds `±Number.MAX_SAFE_INTEGER`\n(±9,007,199,254,740,991), the query returns an error with\n`category: \"overflow\"` rather than silently losing precision.\n\n## Common Patterns\n\n### Multiple Models\n\n```typescript\nconst client = new FabricClient({\n  proxy,\n  semanticModels: {\n    sales: { workspaceId: \"ws-1\", itemId: \"item-1\" },\n    inventory: { workspaceId: \"ws-2\", itemId: \"item-2\" },\n  },\n});\n\nconst salesResult = await client.semanticModel(\"sales\").query(\"EVALUATE ...\");\nconst invResult = await client.semanticModel(\"inventory\").query(\"EVALUATE ...\");\n```\n\n### My Workspace Items\n\n```typescript\nsemanticModels: {\n  myModel: { workspaceId: \"me\", itemId: \"...\" },\n}\n```\n\n### Disabling Cache\n\n```typescript\nnew FabricClient({\n  proxy,\n  cache: { enabled: false },\n  semanticModels: { ... },\n});\n```\n\n## Anti-Patterns\n\n- **Don't catch errors from `query()`** — it never throws. Check `result.status`.\n- **Don't hardcode endpoint URLs** — the proxy handles transport.\n- **Don't construct `SemanticModelClient` directly** — use `client.semanticModel(alias)`.\n- **Don't import from internal paths** — only import from `\"@microsoft\u002Ffabric-app-data\"`.\n\n## Type Reference\n\nAll types are exported from the `\"@microsoft\u002Ffabric-app-data\"` package entry point.\n\nKey types to import when needed:\n```typescript\nimport type {\n  FabricClientConfig,\n  FabricItemRef,\n  QueryResult,\n  CachedQueryResult,\n  QueryCacheOptions,\n  QueryTable,\n  QueryColumn,\n  QueryError,\n} from \"@microsoft\u002Ffabric-app-data\";\n```\n\nFor full type definitions, see `references\u002Ftypes.md` in this skill.\n",{"name":5,"description":7},"main","aeb08ebbac1b387d865a7e1e2a4ada49c15c8e1c","src\u002Fcaldova-insights\u002F.agents\u002Fskills\u002Ffabric-sdk",3,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-10-31 17:06:11",{"source":8,"skillName":5,"commands":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add microsoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric --skill fabric-sdk",{"tool":52,"command":53},"bunx","bunx skills add microsoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric --skill fabric-sdk",{"tool":55,"command":56},"pnpm","pnpm dlx skills add microsoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric --skill fabric-sdk","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric\u002Fblob\u002Fmain\u002Fsrc\u002Fcaldova-insights\u002F.agents\u002Fskills\u002Ffabric-sdk\u002FSKILL.md",true,[60,66,70,74],{"path":61,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":64,"sourceHtmlUrl":65},"references\u002Fcustom-plugins.md","REFERENCE","参考文档",11781,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Fdistributed-training-accelerate\u002Freferences\u002Fcustom-plugins.md",{"path":67,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":68,"sourceHtmlUrl":69},"references\u002Fmegatron-integration.md",11252,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Fdistributed-training-accelerate\u002Freferences\u002Fmegatron-integration.md",{"path":71,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":72,"sourceHtmlUrl":73},"references\u002Fperformance.md",12569,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fai-research\u002Fdistributed-training-accelerate\u002Freferences\u002Fperformance.md",{"path":75,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Ftypes.md",1432,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric\u002Fblob\u002Fmain\u002Fsrc\u002Fcaldova-insights\u002F.agents\u002Fskills\u002Ffabric-sdk\u002Freferences\u002Ftypes.md",[79,89,98,117,141,161],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":86,"publishedAt":32},"01M69BRZ14S248Z74CA8DY6093","visuals","Use when user wants to incorporate charts, graphs, data grid,  or other visual representations of data into their project. Use VegaVisual and DataGrid components to create these visuals,  utilizing the shared DataTable input, formatting, theme, and interactivity. Covers the onInteraction selection\u002Fclick events host apps consume, named multi-table data input for layered overlays and reference lines, and Vega-Lite native selections.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric\u002Fblob\u002Fmain\u002Fsrc\u002Fcaldova-insights\u002F.agents\u002Fskills\u002Fvisuals\u002FSKILL.md",[85],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[81,87,88],"create","components",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":32},"01M69BRWBNYP40PTG12KPPPX69","schema-discovery","Explore Power BI semantic model schemas using DAX INFO functions. Progressive metadata discovery strategy, scope estimation, and narrowing techniques for tables, columns, measures, and relationships.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric\u002Fblob\u002Fmain\u002Fsrc\u002Fcaldova-insights\u002F.agents\u002Fskills\u002Fschema-discovery\u002FSKILL.md",[],[96,28,97],"schema discovery","power bi",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":32},"01M69BRSV74002PRWPKKRCA9WX","rayfin","Use when doing ANY task involving Rayfin — scaffolding, data models, decorators, auth, deployment, CLI commands, or client setup. Triggers: rayfin, rayfin init, rayfin up, rayfin login, RayfinClient, @entity, @role, @anonymous, @authenticated, @text, @uuid, @int, @decimal, @boolean, @date, @email, @set, @one, @many, DAB, Data API Builder, rayfin.yml, publishableKey, signUp, signIn, signOut, sendMagicLink, handleMagicLinkCallback, ensureSignedInWithFabric, Fabric SSO, Entra ID, rayfin up db apply, rayfin up staticapp deploy, schema.ts, OpaqueSession, onSessionChange, GraphQL select, GraphQL create, GraphQL update, GraphQL delete, findById, executePaginated, RLS policy, row-level security, claims.sub, claims.email, TC39 decorators, config generation, dialect, mssql, postgresql","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric\u002Fblob\u002Fmain\u002Fsrc\u002Fcaldova-insights\u002F.agents\u002Fskills\u002Frayfin\u002FSKILL.md",[],[100,105,106,107,108,109,110,87,111,112,26,113,114,115,116,9],"config","deploy","setup","entra id","init","deployment","delete","update","auth","cli","security","policy",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":135,"publishedAt":32},"01M69BRQ2PDHQH7Y33FK0MMY58","rayfin-functions","Use when writing Rayfin user-defined functions (UDFs), invoking functions from frontend code, or using functions CLI commands. Triggers: rayfin functions, udf.func, UserDataFunctions, RayfinContext, FabricContext, AppFunctionsSchema, functions init, dev functions apply, client.functions, invoke, func start, function_app.ts, types.ts, rayfin\u002Ffunctions\u002F, FunctionClient, FunctionsSchema, fabric-user-data-functions, functionsBaseUrl, VITE_RAYFIN_FUNCTIONS_URL, bootstrap.ts, rayfinClient.ts","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric\u002Fblob\u002Fmain\u002Fsrc\u002Fcaldova-insights\u002F.agents\u002Fskills\u002Frayfin-functions\u002FSKILL.md",[123,128,131,132],{"categoryNo":124,"categoryName":125,"taxonomyType":126,"taxonomyTypeDesc":127},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":129,"categoryName":130,"taxonomyType":126,"taxonomyTypeDesc":127},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":133,"categoryName":134,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000036","内容创作者",[100,136,109,137,138,114,9,139,26,140],"rayfin functions","frontend","writing","bootstrap","code",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":157,"publishedAt":32},"01M69BRM47M0TCHN0NRBJ9KBZW","query-design","Separates DAX data-fetching from TypeScript presentation. Guides when to use  DAX vs. TypeScript vs. Vega-Lite for aggregation, total rows, FORMAT(), SELECTCOLUMNS,  BLANK handling, filtering, multi-grain queries, cross-filtering and cross-highlight subset\u002Foverlay queries, and format strings.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric\u002Fblob\u002Fmain\u002Fsrc\u002Fcaldova-insights\u002F.agents\u002Fskills\u002Fquery-design\u002FSKILL.md",[147,150,153,156],{"categoryNo":148,"categoryName":149,"taxonomyType":126,"taxonomyTypeDesc":127},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":151,"categoryName":152,"taxonomyType":126,"taxonomyTypeDesc":127},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":154,"categoryName":155,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000032","设计师",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[158,159,160,28],"query design","design","typescript",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":170,"publishedAt":32},"01M69BRGNRDWA1YTRP2ZQAYEDN","playwright-cli","Automate browser interactions, test web pages and work with Playwright tests.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Ffrontiertour27-BRK390-building-ai-applications-with-microsoft-databases-and-fabric\u002Fblob\u002Fmain\u002Fsrc\u002Fcaldova-insights\u002F.agents\u002Fskills\u002Fplaywright-cli\u002FSKILL.md",[167],{"categoryNo":168,"categoryName":169,"taxonomyType":126,"taxonomyTypeDesc":127},"01JBSEEDCAT000000000000008","测试与质量",[171,172,114,173,27],"playwright","playwright cli","test"]