[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69A82GP92W8F5N31YA3N4MJ":3,"skill-same:01M69A82GP92W8F5N31YA3N4MJ":63},{"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":18,"publishedAt":25,"linkOnly":26,"markdownContent":27,"markdownBody":28,"frontMatter":29,"refName":30,"commitSha":31,"skillDirectory":32,"forksCount":33,"repositoryHtmlUrl":34,"repositoryHomepageUrl":6,"ownerHtmlUrl":35,"ownerBlogUrl":36,"ownerDescription":37,"updatedAt":38,"install":39,"resources":52},"01M69A82GP92W8F5N31YA3N4MJ","power-bi-model-review",null,"Use this skill whenever the user shares a Power BI or Analysis Services semantic model (a TMDL export, a BIM\u002FJSON model definition, or a pasted list of tables, relationships, and measures) and asks for a model review, a performance check, or help fixing DAX, before writing or correcting any DAX measure for that model.","microsoft\u002Fcat-agent-skills","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69A1AHE1MABT7GVP5143M5Z",103,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcat-agent-skills\u002Fblob\u002Fmain\u002Fsubmissions\u002Fpower-bi-model-review\u002FSKILL.md",[],[19,20,21,22,23,24],"review","power bi model review","writing","performance","analysis services","dax","2026-11-10 10:12:30",false,"---\nname: power-bi-model-review\ndescription: >-\n  Use this skill whenever the user shares a Power BI or Analysis Services\n  semantic model (a TMDL export, a BIM\u002FJSON model definition, or a pasted\n  list of tables, relationships, and measures) and asks for a model review,\n  a performance check, or help fixing DAX, before writing or correcting any\n  DAX measure for that model.\n---\n\nReview the semantic model structure and DAX, report findings by category, and\npropose corrected DAX where relevant.\n\n## Instructions\n\n1. Get the model definition. Accept a TMDL folder\u002Fexport, a `.bim`\u002FJSON model\n   definition, or a pasted description of tables, columns, relationships, and\n   measures. If given only a screenshot or vague description, ask for the\n   relationships and measure list directly. A review needs the actual\n   expressions, not a summary of them.\n\n2. State this limit up front, in the first response: this is a **static review\n   of the model definition**. It cannot connect to the live model, cannot see\n   data volumes or cardinality, and cannot measure real query performance.\n   Findings about likely performance impact are structural inference, not\n   profiling results, so say so.\n\n3. Check the model against each category below. Skip a category cleanly if the\n   model doesn't contain what it checks (e.g. no bi-directional relationships\n   to review).\n\n4. Report findings grouped by category, worst-impact first:\n\n   | Category | Object | Issue | Fix |\n   | --- | --- | --- | --- |\n   | Relationships | Sales to Customer | Bi-directional, both dimension tables | Set to single-direction; use `CROSSFILTER(..., BOTH)` inside the one measure that needs it |\n\n   For any DAX fix, show the corrected expression in full, not a diff.\n\n5. On request, rewrite the flagged DAX or produce a prioritized backlog the\n   user can hand to whoever maintains the model.\n\n## Review categories\n\n**Relationships**\n- Bi-directional relationships between two dimension tables, or wherever a\n  single-direction relationship plus a `CROSSFILTER(..., BOTH)` inside the one\n  measure that needs it would give the same answer with less filter-context\n  ambiguity across the rest of the model.\n- Many-to-many relationships without a documented reason.\n- Inactive relationships with no `USERELATIONSHIP` reference anywhere in the\n  model's measures. That's dead weight.\n- Missing or inconsistent relationship cardinality (e.g. many-to-many where\n  one-to-many is intended).\n\n**Calculated columns that should be measures**\n- A calculated column doing row-by-row aggregation logic that a measure would\n  compute at query time instead. It costs storage and compression for no benefit.\n- A calculated column duplicating a value already derivable via a measure or a\n  Power Query step upstream.\n\n**Date handling**\n- No dedicated date table, or a date table not marked as a date table.\n- Time-intelligence functions (`TOTALYTD`, `SAMEPERIODLASTYEAR`, etc.) applied\n  against a column that isn't contiguous or isn't a proper date column.\n- Role-playing date scenarios (order date vs. ship date) handled by duplicating\n  measures instead of duplicating the date table.\n\n**Naming and formatting**\n- Table, column, or measure names that are cryptic (`T1`, `CustNo`, `Amt`)\n  instead of self-explanatory.\n- Inconsistent data types for the same concept across tables (a date stored as\n  text in one table, a real date in another).\n- Missing or inconsistent format strings on the same kind of measure (currency,\n  percentage).\n- No descriptions on key measures. Harmless for report authors, but it also\n  means Copilot in Power BI can't ground answers on that measure correctly.\n\n**Star schema shape**\n- Fact tables mixed with dimension attributes in the same table (snowflake or\n  fully flat design where a star schema would simplify filtering).\n- Missing surrogate keys or relationships built on unstable natural keys.\n\n**DAX correctness and clarity**\n- `CALCULATE` with filter arguments that silently override intended context.\n- Iterators (`SUMX`, `FILTER`) used where a plain aggregation would do.\n- Division without `DIVIDE()`, risking divide-by-zero errors.\n- Measures that reimplement logic another measure already provides. That's a\n  correctness risk if the two drift.\n\n## Guardrails\n\n- Never claim to have measured performance. Frame everything as \"based on the\n  model definition\" or \"typically causes.\"\n- Never invent table row counts, data volumes, or refresh times not given by\n  the user.\n- Note whichever storage mode applies (Import, DirectQuery, Composite,\n  Direct Lake) if it's stated or evident, since it changes what actually\n  matters: a bi-directional relationship is cheap in one mode and expensive\n  in another.\n\n## Tone\n\nDirect, structural. State the issue, the why, and the fix. Skip the theory\nlecture unless asked.\n","Review the semantic model structure and DAX, report findings by category, and\npropose corrected DAX where relevant.\n\n## Instructions\n\n1. Get the model definition. Accept a TMDL folder\u002Fexport, a `.bim`\u002FJSON model\n   definition, or a pasted description of tables, columns, relationships, and\n   measures. If given only a screenshot or vague description, ask for the\n   relationships and measure list directly. A review needs the actual\n   expressions, not a summary of them.\n\n2. State this limit up front, in the first response: this is a **static review\n   of the model definition**. It cannot connect to the live model, cannot see\n   data volumes or cardinality, and cannot measure real query performance.\n   Findings about likely performance impact are structural inference, not\n   profiling results, so say so.\n\n3. Check the model against each category below. Skip a category cleanly if the\n   model doesn't contain what it checks (e.g. no bi-directional relationships\n   to review).\n\n4. Report findings grouped by category, worst-impact first:\n\n   | Category | Object | Issue | Fix |\n   | --- | --- | --- | --- |\n   | Relationships | Sales to Customer | Bi-directional, both dimension tables | Set to single-direction; use `CROSSFILTER(..., BOTH)` inside the one measure that needs it |\n\n   For any DAX fix, show the corrected expression in full, not a diff.\n\n5. On request, rewrite the flagged DAX or produce a prioritized backlog the\n   user can hand to whoever maintains the model.\n\n## Review categories\n\n**Relationships**\n- Bi-directional relationships between two dimension tables, or wherever a\n  single-direction relationship plus a `CROSSFILTER(..., BOTH)` inside the one\n  measure that needs it would give the same answer with less filter-context\n  ambiguity across the rest of the model.\n- Many-to-many relationships without a documented reason.\n- Inactive relationships with no `USERELATIONSHIP` reference anywhere in the\n  model's measures. That's dead weight.\n- Missing or inconsistent relationship cardinality (e.g. many-to-many where\n  one-to-many is intended).\n\n**Calculated columns that should be measures**\n- A calculated column doing row-by-row aggregation logic that a measure would\n  compute at query time instead. It costs storage and compression for no benefit.\n- A calculated column duplicating a value already derivable via a measure or a\n  Power Query step upstream.\n\n**Date handling**\n- No dedicated date table, or a date table not marked as a date table.\n- Time-intelligence functions (`TOTALYTD`, `SAMEPERIODLASTYEAR`, etc.) applied\n  against a column that isn't contiguous or isn't a proper date column.\n- Role-playing date scenarios (order date vs. ship date) handled by duplicating\n  measures instead of duplicating the date table.\n\n**Naming and formatting**\n- Table, column, or measure names that are cryptic (`T1`, `CustNo`, `Amt`)\n  instead of self-explanatory.\n- Inconsistent data types for the same concept across tables (a date stored as\n  text in one table, a real date in another).\n- Missing or inconsistent format strings on the same kind of measure (currency,\n  percentage).\n- No descriptions on key measures. Harmless for report authors, but it also\n  means Copilot in Power BI can't ground answers on that measure correctly.\n\n**Star schema shape**\n- Fact tables mixed with dimension attributes in the same table (snowflake or\n  fully flat design where a star schema would simplify filtering).\n- Missing surrogate keys or relationships built on unstable natural keys.\n\n**DAX correctness and clarity**\n- `CALCULATE` with filter arguments that silently override intended context.\n- Iterators (`SUMX`, `FILTER`) used where a plain aggregation would do.\n- Division without `DIVIDE()`, risking divide-by-zero errors.\n- Measures that reimplement logic another measure already provides. That's a\n  correctness risk if the two drift.\n\n## Guardrails\n\n- Never claim to have measured performance. Frame everything as \"based on the\n  model definition\" or \"typically causes.\"\n- Never invent table row counts, data volumes, or refresh times not given by\n  the user.\n- Note whichever storage mode applies (Import, DirectQuery, Composite,\n  Direct Lake) if it's stated or evident, since it changes what actually\n  matters: a bi-directional relationship is cheap in one mode and expensive\n  in another.\n\n## Tone\n\nDirect, structural. State the issue, the why, and the fix. Skip the theory\nlecture unless asked.\n",{"name":5,"description":7},"main","3678d23ad8fb8d098c428302a98044ac9514d5a1","submissions\u002Fpower-bi-model-review",119,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcat-agent-skills","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-12 02:57:14",{"source":8,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add microsoft\u002Fcat-agent-skills --skill power-bi-model-review",{"tool":45,"command":46},"bunx","bunx skills add microsoft\u002Fcat-agent-skills --skill power-bi-model-review",{"tool":48,"command":49},"pnpm","pnpm dlx skills add microsoft\u002Fcat-agent-skills --skill power-bi-model-review","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcat-agent-skills\u002Fblob\u002Fmain\u002Fsubmissions\u002Fpower-bi-model-review\u002FSKILL.md",true,[53,59],{"path":54,"resourceType":55,"resourceTypeDesc":56,"sizeBytes":57,"sourceHtmlUrl":58},"metadata.json","REFERENCE","参考文档",544,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcat-agent-skills\u002Fblob\u002Fmain\u002Fsubmissions\u002Fpower-bi-model-review\u002Fmetadata.json",{"path":60,"resourceType":55,"resourceTypeDesc":56,"sizeBytes":61,"sourceHtmlUrl":62},"README.md",1985,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcat-agent-skills\u002Fblob\u002Fmain\u002Fsubmissions\u002Fpower-bi-model-review\u002FREADME.md",[64,90,115,152,170,186],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":25},"01M6X3P09R8SJH3QJGMTAA5N90","stakeholder-and-decision-map","Mines customer interactions to identify stakeholders, infer their likely roles and engagement, map the decision process, and highlight who or what may be missing. Use when asked to \"map a deal's buying group\", identify influential or missing stakeholders, \"assess who has gone quiet\", or \"explain how the customer will decide\". Do not use for phased engagement plans, contact sequences, choosing or drafting outreach to the single next contact, seller or team performance reviews, or contacting, scheduling, or changing records.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcat-agent-skills\u002Fblob\u002Fmain\u002Fsubmissions\u002Fstakeholder-and-decision-map\u002FSKILL.md",[],[71,72,73,74,22,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89],"decision","map","decision map","stakeholder and decision map","customer","team","how","decide","do","next","infer","missing","records","assess","reviews","for","single","when","sequences",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":25},"01M6X3NRES2XSZQCH015WD4JN6","sales-progress-update","Creates or refreshes a sales progress update for a manager or team about work done, deal movement, pending outcomes, supported forecast position, and help needed. Use when asked to \"create my weekly sales update\", \"refresh my sales progress deck\", \"report my forecast position\", \"where do I stand against my quarter forecast\", or \"catch my manager up on committed deals\". Do NOT use for non-sales project updates, a since-date deal change digest, momentum or blocker analysis, meeting prep, or outreach drafting.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcat-agent-skills\u002Fblob\u002Fmain\u002Fsubmissions\u002Fsales-progress-update\u002FSKILL.md",[],[97,98,99,100,101,102,103,104,76,105,106,107,108,109,110,111,112,113,114,88],"update","sales","progress","sales progress update","change","create","meeting prep","analysis","work","up","done","digest","project","my","updates","manager","weekly","catch",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":134,"publishedAt":25},"01M6X3MSDTB1E5H6DQAFAY41YP","submission-assemble","Put the checked CSR or 510(k) sections together in template order with a reviewer-facing open-items register, as a draft package for human sign-off. Use when the user asks \"assemble the CSR draft\", \"put the module together for review\", \"build the review package with the open items on top\", \"compile the 510(k) sections in order\" or \"package this up for the submission lead\". Do NOT use for assembling an unchecked draft - use consistency-check instead. Do NOT use for loading protocol, SAP or TLF sources - use source-ingest instead. Do NOT use for compiling general documents or slide decks - use the built-in docx or pptx skill instead. Do NOT use for filing or submitting to a regulator - use the sponsor's validated gateway, operated by a human, instead. Guardrail: draft for human approval only (L1); status is draft_clean or draft_open_items, never submitted.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcat-agent-skills\u002Fblob\u002Fmain\u002Fsubmissions\u002Freg-submission-authoring\u002Fsubmission-assemble\u002FSKILL.md",[121,126,129],{"categoryNo":122,"categoryName":123,"taxonomyType":124,"taxonomyTypeDesc":125},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",{"categoryNo":127,"categoryName":128,"taxonomyType":124,"taxonomyTypeDesc":125},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":130,"categoryName":131,"taxonomyType":132,"taxonomyTypeDesc":133},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[135,136,137,138,139,21,140,141,142,143,144,145,106,146,147,148,149,150,151,88],"assemble","submission","submission assemble","docx","pptx","documents","healthcare","open","reviewer","never","only","clean","guardrail","slide decks","sources","filing","loading",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":158,"publishedAt":25},"01M6X3MM9TVWDQ716QGNV4DS25","source-ingest","Pull every number, date and population definition out of a study's protocol, SAP, TLF tables, investigator brochure and prior approved text into one cited fact map, keyed per config\u002Ffield-dictionary.json, before any CSR or 510(k) section is written. Use when the user asks \"here's the locked TLF set and SAP, set up the CSR\", \"load the protocol and tables before we start drafting\", \"what figures do we have from the database lock?\", \"pull the disposition counts out of Table 14.1.1\" or \"ingest the IB for the 510(k)\". Do NOT use for drafting or assembling submission sections - use section-draft or submission-assemble instead. Do NOT use for reconciling a patient's medications - use the discharge-care-transition plugin instead. Guardrail: reads and cites sources only; never estimates, rounds or invents a fact.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcat-agent-skills\u002Fblob\u002Fmain\u002Fsubmissions\u002Freg-submission-authoring\u002Fsource-ingest\u002FSKILL.md",[],[159,160,161,162,163,104,141,164,144,145,106,72,165,147,149,166,167,168,169,88],"source ingest","ingest","source","database","SET","text","patient","number","lock","definition","transition",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":177,"publishedAt":25},"01M6X3M7ZH5ZNEHP56BQ74HAJR","section-plan","Work out which sections a CSR or 510(k) requires, from the templates in config, check each one against the cited fact map, and name what is missing before a word is drafted. Use when the user asks \"what do we still need before we can draft the CSR?\", \"which sections are ready to start?\", \"what's blocking the performance data section?\", \"do we have everything for the synopsis?\" or \"map our tables to the E3 structure\". Do NOT use for writing section language - use section-draft instead. Do NOT use for cross-checking a finished draft - use consistency-check instead. Do NOT use for outlining general Word documents or business reports - use the built-in docx skill instead. Only structures with a template in config are supported. Guardrail: plans only; never marks a section ready on a missing fact and never invents a structure.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcat-agent-skills\u002Fblob\u002Fmain\u002Fsubmissions\u002Freg-submission-authoring\u002Fsection-plan\u002FSKILL.md",[176],{"categoryNo":122,"categoryName":123,"taxonomyType":124,"taxonomyTypeDesc":125},[178,179,180,138,21,22,140,104,141,105,144,145,181,182,183,72,147,184,185,88],"plan","section","section plan","ready","reports","structure","word documents","which",{"skillNo":187,"name":188,"nameZh":6,"description":189,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":190,"categories":191,"keywords":192,"publishedAt":25},"01M6X3M0V1MJNCR653ES9XGVMS","section-draft","Write or revise the language for one planned CSR or 510(k) section - synopsis, efficacy, safety, discussion, device description - using only figures already in the cited fact map, each with its TLF or SAP citation. Use when the user asks \"draft the Synopsis from our locked tables\", \"write up safety from Table 14.3.1\", \"give me a first pass at the discussion\", \"draft the device description for the 510(k)\" or \"tighten the wording of the Discussion section\". Do NOT use for supplying a number not already in source_facts - use source-ingest instead. Do NOT use for verifying a draft's figures - use consistency-check instead. Do NOT use for appeal letters, clinical notes or discharge summaries - use the matching HLS plugin instead. Guardrail: drafts for human approval only (L1); never asserts an unsourced number or harmonises two figures.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcat-agent-skills\u002Fblob\u002Fmain\u002Fsubmissions\u002Freg-submission-authoring\u002Fsection-draft\u002FSKILL.md",[],[193,179,194,21,195,141,196,144,145,106,197,72,198,199,200,147,201,166,202,88],"draft","section draft","notes","write","me","human","life","clinical","drafts","at"]