创建连接到语义模型的应用

使用数据应用模板搭配 Fabric 语义模型连接器,构建分析型 Fabric 应用。 该模板提供可视化、格式化、数据网格和浏览器验证模式。 该连接器通过 Fabric Apps 客户端提供对语义模型的类型化委托访问。

开箱即用,使用模板创建的应用包括:

  • Fabric 身份验证。
  • 更高质量的 DAX(数据分析表达式)生成指南
  • 为分析应用设计的企业级可视化组件。
  • 数据网格、主题、格式和浏览器验证模式。

注释

目前,Rayfin CLI 是使用数据应用模板创建应用的官方支持方式。

为何使用数据应用模板?

没有这些内置功能,编码代理必须在每个会话中从零开始解决认证、DAX生成和可视化设计。 这可能导致:

  • 更多的失败和破碎或空洞的画面。
  • 图表行为不一致。
  • 开发和运行期间的不必要 DAX 查询。

该模板提供了可复用的模式,提升可靠性,产生更连贯且符合报告最佳实践的可视化,并减少查询开销。 该连接器标准化语义模型配置和运行时访问。

先决条件

  • Node.js 20 或更高版本。
  • 访问Fabric。
  • 具有参与者、成员或管理员权限的Fabric工作区。
  • 已在你的租户中启用的 Fabric 应用工作负载。 参见“创建你的第一个 Fabric 应用”。
  • 语义模型执行查询 REST API 租户设置已启用。
  • 在托管于 Fabric 或 Power BI 容量上的语义模型上构建和读取权限。
  • 语义模型的工作区ID和项目ID。

创建应用

从数据应用模板创建项目:

npm create @microsoft/rayfin@latest -- "<app-name>" --template dataapp --workspace <workspace-name>

用你的应用和 Fabric 工作区的名称替换 <app-name> 和 <workspace-name>。 然后打开新的项目文件夹:

cd <app-name>

添加语义模型连接器

如果你不知道语义模型的项目ID,可以在工作区中列出语义模型:

npx rayfin connector search --workspace-id <workspace-id> --type fabric-semanticmodel --json

将语义模型作为连接器添加:

npx rayfin connector add --type fabric-semanticmodel --workspace-id <workspace-id> --item-id <semantic-model-item-id> --name salesModel --operations executeQuery

命令:

  • 将连接器rayfin/rayfin.yml添加到 salesModel 。
  • 在 rayfin/connectors/salesModel/ 下创建其架构。
  • 输出适用于连接器软件包的版本匹配的 npm install 命令。

运行 CLI 输出的原样安装命令。

生成的配置类似于以下示例:

connectors:
  - name: salesModel
    type: fabric-semanticmodel
    config:
      workspaceId: "<workspace-id>"
      itemId: "<semantic-model-item-id>"
    auth:
      type: delegated
    version: "1"
    operations:
      - name: executeQuery

保留生成的 version 值。

将模板连接到语义模型

该模板包含可与连接器重复使用的分析组件和代理说明。 将其数据访问层配置为创建 ConnectorsRayfinClient 并注册语义模型运行时:

Important

使用连接器客户端进行语义模型查询。 如果支架包含另一个语义模型客户端,则替换对其的调用,而不是维护两个数据访问路径。

import { ConnectorsRayfinClient } from '@microsoft/rayfin-client';
import { fabricSemanticModel } from '@microsoft/rayfin-connector-fabric-semanticmodel';
import {
  connectorConfig,
  type SalesModelSchema,
} from '../../rayfin/connectors/salesModel/schema.js';

type AppConnectorsSchema = {
  salesModel: SalesModelSchema;
};

export const client = new ConnectorsRayfinClient<
  Record<string, never>,
  Record<string, never>,
  AppConnectorsSchema
>(
  {
    baseUrl: '<app-api-url>',
    publishableKey: '<publishable-key>',
    authStorage: true,
    connectors: {
      salesModel: connectorConfig,
    },
  },
  {
    salesModel: fabricSemanticModel(),
  }
);

使用你 Fabric Apps 项目中的 API URL 和可发布密钥。 保持模板现有的 Fabric 登录流程。

通过连接器提交DAX:

const result = await client.connectors.salesModel.executeQuery({
  query: 'EVALUATE TOPN(10, Sales)',
});

if (result.status === 'success') {
  console.log(result.table.columns, result.table.rows);
} else {
  console.error(result.error.category, result.error.message);
}

在你的语义模型中用一个表格替换 Sales 。 在将列和行传递给可视化之前,先检查返回状态。

有关更多连接器配置和安全指导,请参见“将 Fabric 应用连接到 Fabric 数据”。

用编码代理构建应用

该脚手架包含供编程代理使用的指令和技能。 在你偏好的代理中打开项目,描述受众、问题、互动和应用的可视化内容。

例如,您可以:

  • 在 Visual Studio Code 中打开该项目,然后打开 GitHub 的 Copilot 对话助手 面板。
  • 在项目中打开一个终端,然后运行 copilot。

Visual Studio Code 中 GitHub Copilot 对话助手 界面的截图。

请以此提示作为起点:

Build an analytical Fabric app that uses the existing salesModel connector.

Before editing:
1. Read the repository instructions and skills.
2. Inspect rayfin/connectors/salesModel/schema.ts and the template's data-access,
   visualization, data grid, formatting, and validation patterns.
3. Query the semantic model metadata before writing DAX. Don't guess table,
   measure, or column names.

Requirements:
- Use ConnectorsRayfinClient and fabricSemanticModel() for semantic model access.
- Call client.connectors.salesModel.executeQuery() for DAX queries.
- Keep the existing Fabric sign-in flow. Don't add credentials, access tokens,
  another authentication flow, or direct calls to the Execute Queries REST API.
- Reuse query results where practical, and bound large result sets.
- Apply semantic model format strings consistently to cards, charts, tooltips,
  and data grids.
- Include loading, empty, and error states.
- Use the template's browser-validation workflow at desktop and mobile sizes.

Give me a short implementation plan, make the changes, run the existing build,
and report the results.

使用模板功能

数据应用模板包含可重复使用的分析应用模式。

Fabric 应用是标准的网页应用,所以你可以实现这些模式之外的功能。 模板中没有包含的功能可能需要更多的定制工程和验证。

视觉效果

该模板包含交叉高亮和预配置的基元:

  • 柱状图,包括垂直、水平、分组和堆叠布局。
  • 折线图,带有可选标记。
  • 区域图。
  • 散点图。
  • 派和甜甜圈图表。
  • 热力图。
  • 气泡图。
  • 瀑布图。
  • 用于KPI调用的单一值卡片。
  • 分层和复合视觉效果,如带数据标签的条形图和双轴折线图。

使用连接语义模型中存在的字段和度量。 不要用模拟数据替换失败的连接器查询。

你可以让你的编码代理生成其他视觉效果。 没有模板原语的可视化可能需要更多的迭代和验证。

数据网格功能

该模板包含一个具有以下预配置功能的数据网格:

  • 列头部源自语义模型元数据。
  • 通过格式字符串为每列应用数字和日期格式设置。
  • 排序。
  • 可滚动的行,并支持溢出处理。
  • 支持浅色和深色主题。
  • 自定义单元格渲染器:
    • 用于数值的数据条。
    • 布尔指示器。
    • 可点击的网址。
    • 带有灯箱覆盖层的图片单元。
    • 包含多个字段的单元格,例如在同一列中显示名称和角色。

你可以添加其他数据网格功能,但可能需要更多定制工程。

主题

给你的编码代理提供品牌或造型需求,比如色彩搭配、角落样式或字体。 该模板将共享样式集中在一个中心位置,以便所做的更改能够同步到卡片、按钮、图表、数据网格和工具提示。

集中式样式避免了颜色不匹配、字体不一致以及各组件单独样式时可能出现的布局差异。

格式字符串

为每个结果列仅定义一次格式。 该模板可以在图表轴、工具提示、数据标签、卡片和数据网格单元格间重用语义模型格式字符串。

例如,单个格式定义会使 1500.5 始终显示为 $1,500.50,并使 0.25 始终显示为 25%,无论这些值出现在何处。

浏览器验证

发布应用前,使用附带的Playwright浏览器验证流程,在真实浏览器中打开并检查:

  • 画面渲染正常。
  • 图表不会被截断或压缩。
  • 文字是可读的。
  • 数据网格处理溢出。
  • 加载状态、空状态和错误状态都是可用的。
  • 筛选、交叉高亮和数据格式设置均按预期工作。
  • 浏览器控制台没有出现任何意外错误。

该工作流程能在用户看到之前发现布局和渲染问题。 浏览器验证确认了前端行为。 分别与同时访问 Fabric 应用和语义模型的用户测试已部署的连接器。

部署并验证应用

部署应用和连接器配置:

npx rayfin up

从Fabric门户打开已部署的应用。 登录,运行每次用户交互,并与语义模型对比重要结果。

如果查询失败:

  • 确认 rayfin.yml 中的工作区和语义模型项 ID。
  • 确认“语义模型执行查询”REST API 租户设置已启用。
  • 确认用户对语义模型拥有构建和读取权限。
  • 验证 DAX 是否引用了现有的表、列和度量值。
  • 检查连接器结果的错误类别和提示。
  • 检查浏览器控制台是否有客户端错误。