The top-100 experience
Keep the successful ranking presentation as a regression scenario, including ordering, metric definition, and all requested rows up to the limit.
A Copilot Studio agent with the Microsoft 365 Copilot channel configured, running inside M365 Copilot - not an Agent Builder agent. It uses model metadata to generate DAX, query Power BI as you, and explain results.
Observed response, not an independent numerical audit. Experimental starter: configure your own connection, model metadata and business definitions before publishing. This website is documentation, not a live agent.
Agent365. It is not the Microsoft product or an official product schema. Use this pattern with other compatible Power BI models by adapting the model context, queries, configuration, and permissions.A governed metadata snapshot supplies structure. The orchestrator is expected to author a new DAX table expression. Native runtime controls form a bounded execution envelope. Deployment of those pieces is not proof of successful orchestration.
Keep the successful ranking presentation as a regression scenario, including ordering, metric definition, and all requested rows up to the limit.
Generate new combinations of actual fields, measures, filters, and calculations. The input is a table expression, not every possible full DAX script.
Use real model names, explain filter context and time scope, and distinguish a query from a measure. Suggested code is not verified code.
Tested against a Power BI semantic model containing agents. The demonstration model includes agent inventory, creator/ownership and usage data, which is why the test questions ask about agents, creators and interactions. Copilot Studio queries that semantic model with DAX, not the report visuals. Other compatible models require their own metadata and business definitions.
These examples document the intended experience and evaluation criteria. Synthetic values are clearly marked; supported combinations and test status live in the source documentation.
Give me the top 100 agents by usage.
Illustrative output: Agents ranked by audited Interactions for the selected period. Return every available requested row up to 100 and state the date scope.
| Rank | Agent | Interactions |
|---|---|---|
| 1 | Service Desk Demo | 1,284 |
| 2 | Policy Finder Demo | 976 |
| 3 | Onboarding Demo | 811 |
Synthetic three-row excerpt only. Agent names and values are invented; this table is not test evidence.
Give me the top agents and their usage over the last 30 days.
Expected answer contract: retrieve relevant metadata, generate a ranking expression with paired date expressions using the trusted engine UTC anchor, and explain the actual requested scope. Do not substitute an all-history ranking.
Follow with "Add platform and region, apply these two filters, and calculate sessions per user." Those combinations should be authored from metadata rather than require a new metric template. Observe the actual generated expression before claiming success.
Explain how to rank agents by Interactions in DAX using this model. Explain filter context and do not run it yet.
A good response uses the actual approved schema, explains why the grouping and measure fit the question, and discusses date filters and tie handling.
EVALUATE
SUMMARIZECOLUMNS(
'Date'[YearMonth],
"Sessions", [Interaction Sessions]
)
ORDER BY 'Date'[YearMonth]
Model-grounded illustration, not executed as shown or captured from a live answer. The actual topic accepts a table expression and forms a bounded envelope; it does not accept this entire script as a tool argument.
This integration is read-only. Model authoring is not implied by DAX guidance.
Rank agents by customer satisfaction and include their owners' email addresses.
Expected behavior: establish whether an appropriate satisfaction metric exists and what it means. Do not quietly substitute usage for satisfaction. Identity fields follow actual metadata and the requesting user's permissions; the retired blanket demo ban is not a model limitation.
Clarify ambiguity or explain actual access failures rather than inventing fields. Publication requires the owner's approval; personal identities and tenant configuration remain redacted.
Actual published-channel prompts and responses. With the owner's approval, only people's names are covered in the result captures; agent names, usage figures and dates are unchanged. Composites are labeled and no replacement values are invented. Checks establish visible shape and consistency, not independently audited numerical accuracy.
Review the Agents semantic model and provide me the top 20 used agents and their creators.
Yes, these capabilities call Power BI. They live under Topics, with embedded connector actions. There is no dedicated top-100 tool and no new tool per question. Copilot Studio selects reusable topics and fills their technical inputs from the question and verified metadata.
Trigger: generative selection.
Validates the model alias, probes schema visibility as the requester, then returns the governed catalog or selected tables.
Inputs: modelAlias (String, blank defaults to primary), view (String: catalog/tables), tableNames (String: at most four verified names).
Output: metadata JSON in result, plus the shared status/visibility fields below.
Trigger: generative selection.
Requires the current-turn/user metadata gate, validates newly authored DAX and forms a bounded query. The embedded Power BI action executes it as the requesting user.
Inputs: the seven query parameters below.
Output: bounded row-envelope JSON in result, the final generatedDax and execution status.
Trigger: generative selection.
Uses the same expression contract, but compiles the proposed business query without executing it. The answer must label it unexecuted; metadata authorization may still probe Power BI.
Inputs: the same seven query parameters.
Output: proposed generatedDax and advice/status envelope, not business result rows.
OnError. Reports the actual error and stops rather than fabricating an answer. No declared task inputs or outputs. Full synthetic error topic.Connector: Power BI (shared_powerbi). Action: Run a query against a dataset. Operation ID: ExecuteDatasetQuery. These are the names to look for in Studio, not the custom topic names above. The connector executes DAX; Copilot Studio generates it.
| Topic | Actual connector action |
|---|---|
| Get model metadata | Run a query against a dataset: execute a schema-visibility probe, then return the prepared metadata snapshot. This is not a built-in metadata-discovery action. |
| Run generated DAX | Run a query against a dataset: execute the compiled business query. |
| Compile DAX advice | No connector action in this topic. Native Power Fx compiles the proposed query; the separate metadata topic may still probe Power BI. |
| Generated query error | No connector action. Native error handling reports and stops. |
| Action field | Query-topic setting |
|---|---|
Workspace (groupid) | Your authorized workspace, fixed configuration. |
Dataset (datasetid) | Your semantic model, fixed configuration. |
Query text (query) | Power Fx formula Topic.generatedDax (=Topic.generatedDax in native YAML). This is the complete compiled DAX query, not the raw tableExpression input. |
Impersonate user (impersonatedUserName) | Leave blank (=Blank() in YAML); execution uses the requesting user's connection. |
Output (firstTableRows) | Bind to Topic.RawRows. Preserve Any in the native output schema for arbitrary generated columns. |
In the native action source, retain serializerSettings: ={includeNulls:false} and requestTimeoutInMilliseconds: 30000. The metadata action instead uses its prepared probe query, Topic.ProbeRows and the numeric AccessProbe output schema.
Adding the connector alone does not recreate this agent. You also need the model-specific metadata, agent instructions, topic inputs, DAX compilation/validation and result handling. Follow the complete manual wiring guide and the linked native topic source. Microsoft's topic-tool steps · Power BI action reference.
The orchestrator fills these arguments; the user asks an ordinary business question. Workspace/model IDs and execution identity are trusted configuration, not model-authored inputs.
| Input | Type | Contract |
|---|---|---|
modelAlias | String | Blank defaults to primary; only the onboarded primary alias is supported. |
tableExpression | String | New DAX table expression, not a full EVALUATE/DEFINE/ORDER BY script; maximum 12,000 characters. |
columns | String | 1-16 distinct output aliases, comma-separated. |
sortBy | String | Declared aliases and asc/desc; remaining aliases break ties. |
limit | Number | Integer 1-100; default 20. |
startDateExpression | String | Optional scalar DAX date bound, paired with end. |
endDateExpression | String | Optional scalar DAX date bound, paired with start. Dates use UTC_TODAY, QUERY_START and QUERY_END. |
status, stage, probeResultStatus, resolvedModelAlias, error, result and generatedDax are Strings. connectorAttempted, connectorReturned and visibilityVerified are Booleans. Completion or a generated query alone does not prove execution, valid rows or semantic correctness.
ExecuteDatasetQuery receives Topic.generatedDax, uses Invoker mode and returns dynamic rows as Any. Null omission is explicit; rows are serialized directly. The workspace and semantic-model IDs are redacted, not replaced with fake settings.The primary snapshot contains 21 tables, 244 columns, 166 measure names, and 13 relationships. It is prepared metadata, not live per-turn definition discovery, complete business semantics, or verified conversational reasoning.
Metadata, dated ranking and creator follow-up are user-observed working. Other question shapes still need evaluation; structural controls are not a complete DAX parser, semantic proof or cost estimator.
Prepare current metadata and validate permissions and semantics. No new five-metric template is intended, but changing only a dataset ID is still not a verified onboarding process.
A model catalog, focused metadata retrieval, routing, schema refresh, and cross-model interpretation remain separate work. No model-count or concurrency ceiling has been measured.
A genuinely different model accepted three constant DAX queries. Its definition was retrieved automatically using the documented Fabric API: 78 tables, 694 columns, 17 measures, and 79 relationships, including hidden/generated objects.
This used existing read/write model permissions. No nonempty object descriptions were found; authored-instruction discovery remains unproven. The schema has not been wired into the agent, and this is not evidence of automatic business understanding or read-only-user metadata access.
Observed constant-query request times: 823 / 461 / 538 ms. Three sequential samples, not a benchmark, concurrency test, or complete-chat latency.
Offline/direct checks are authored fixtures. Actual caller traces established generated-query execution; later Studio and M365 responses succeeded. All displayed values are not independently audited; the earlier combined request and deferred repeated-value case remain unresolved. Missing declared fields mean DAX blank/null under the explicit null-omission policy. The rendered picker shows GPT-5 Reasoning (Preview); inference telemetry remains unverified. Current warnings concern preview-model suitability and absence of formal Studio evaluation.
RLS follows the actual execution identity and workspace role. Verify restricted users, Build permission, and the model's sensitive fields. Agent instructions do not enforce authorization.
No guarantee. The generic contract removes the five-metric mapping but still requires valid metadata, permissions, supported table-expression syntax and correct reasoning. Dated ranking and creator follow-up are user-observed working; the combined request and broader question coverage remain unverified. Exact measure implementations and automatic multi-model routing are not provided.
A Fabric data agent is not required for the connector/REST route. Power BI licensing still applies. Hosted Power BI MCP is a separate optional integration; its query-generation tool has Copilot entitlement requirements.
The M365 result screenshots are real, with owner-approved agent names, usage figures and dates unchanged. People's names are masked. Separately labeled illustrative tables use invented names and numbers; they are not test evidence. Original captures and tenant configuration remain private.
Download the unmanaged ZIP and import it through Power Apps or Copilot Studio Solutions. It creates a separate unpublished agent with no configured channels or bound Power BI connection.
Bind an end-user connection, prepare authorized model metadata and review your metric definitions, relationships, dates and permissions. Demo report instructions and private model data are not included.
Generate and deploy the configured topics using the supplied source. Validate important answers independently, then publish and configure your M365 Copilot channel. The ZIP stops before queries until configured.
Full synthetic topic YAML · Complete agent instructions · Package checksums
Start with the sanitized source, your own provisioned agent, and an approved model contract. Bind your own connection.
Read the licensing, Read/Build, tenant-setting, result-limit, and response-error requirements before deployment.
The connector runs DAX. Model discovery, interpretation, validation, and answer quality are separate responsibilities.
People's names are masked in real result screenshots; agent names, usage figures and dates remain visible with owner approval. Configuration captures redact private resource IDs and identities. Illustrations are labeled synthetic. The reviewed ZIP excludes credentials, tenant bindings and the demo model. No open-source license has been selected; public visibility does not grant additional reuse rights.