具有语义链接的 Power BI 连接

Power BI 连接是 Microsoft Fabric 中语义链接的核心。 本文介绍了语义链接为 Python pandas和 Apache Spark 生态系统用户提供到语义模型的连接的方式。

语义模型通常代表了高数据标准,这是上游数据处理和优化的结果。 业务分析师可以:

  • 将域知识和业务逻辑编码为 Power BI 度量值。
  • 使用语义模型创建 Power BI 报表。
  • 使用这些报表来推动业务决策。

当使用相同语义模型的数据科学家试图在不同的代码环境或语言中复制业务逻辑时,可能会导致严重错误。 语义链接在 Microsoft Fabric 体验中弥合了语义模型与 Synapse 数据科学之间的差距,为业务分析师和数据科学家提供了一种无缝协作的方式,并减少了数据不匹配。

语义链接提供与以下资源的连接:

  • Python pandas 生态系统(通过 SemPy Python 库)。
  • 语义模型采用支持 PySpark、Spark SQL、R、Scala 的 Spark 本机连接器

通过 SemPy Python 库为 pandas 用户提供数据连接

SemPy Python 库是语义链接功能的一部分,它服务于 pandas 用户。 SemPy 功能包括从检索数据、度量值计算执行 Data Analysis Expressions (DAX) 查询以及元数据。

  • 对于 Spark 3.4 及以上版本,使用 Fabric 时,语义链接在默认运行时中可用,无需安装。

  • 对于 Spark 3.3 或更低版本,请运行以下命令,如需更新到最新版本的语义链接,也可运行此命令:

    %pip install -U semantic-link
    

SemPy 还使用从 Power BI 数据源传播的添加的元数据来扩展 pandas DataFrame。 此元数据包括:

  • Power BI 数据类别:
    • 地理:地址、地点、城市
    • URL:Web URL、图像 URL
    • 条码
  • 表之间的关系
  • 层次结构

语义链接 Spark 本机连接器使 Spark 用户能够访问 Power BI 表和度量值。 该连接器与语言无关,支持 PySpark、Spark SQL、R、Scala。

若要使用 Spark 本机连接器,可将语义模型表示为 Spark 命名空间,以透明方式将 Power BI 表公开为 Spark 表。

以下命令会将 Spark 配置为使用适用于 Spark SQL 的 Power BI Spark 本机连接器:

spark.conf.set("spark.sql.catalog.pbi", "com.microsoft.azure.synapse.ml.powerbi.PowerBICatalog")

# Optionally, configure the workspace using its ID
# Resolve workspace name to ID using fabric.resolve_workspace_id("My workspace")
# Replace 00000000-0000-0000-0000-000000000000 with your own workspace ID
# spark.conf.set("spark.sql.catalog.pbi.workspace, "00000000-0000-0000-0000-000000000000")

以下命令列出名为 Sales Dataset 的语义模型中的所有表:

%%sql
SHOW TABLES FROM pbi.`Sales Dataset`

以下命令显示语义模型 CustomerSales Dataset 表中的数据:

%%sql
SELECT * FROM pbi.`Sales Dataset`.Customer

可通过虚拟 _Metrics 表访问 Power BI 度量值,以使用多维 Power BI 桥接关系型 Spark SQL。 在以下示例中,Total RevenueRevenue BudgetSales Dataset 语义模型中定义的度量值,其他列是维度。 类似 AVG 的聚合函数在度量中被忽略,并且仅用于提供与 SQL 的一致性。

连接器支持将计算(如 Customer[State] in ('CA', 'WA'))从 Spark 表达式向下推送到 Power BI 引擎,从而支持使用 Power BI 优化引擎。

SELECT
    `Customer[Country/Region]`,
    `Industry[Industry]`,
    AVG(`Total Revenue`),
    AVG(`Revenue Budget`)
FROM
    pbi.`Sales Dataset`.`_Metrics`
WHERE
    `Customer[State]` in ('CA', 'WA')
GROUP BY
    `Customer[Country/Region]`,
    `Industry[Industry]`

使用 Power BI 度量值增强数据

add_measure 操作是语义链接的一项强大功能,可用于通过语义模型中的度量值来扩充数据。 此操作仅在 SemPy Python 库中可用,在 Spark 本机连接器中不受支持。 有关 add_measure 方法的详细信息,请参阅 FabricDataFrame 类文档中的 add_measure

若要使用 SemPy Python 库,请在笔记本单元格中运行以下代码,将其安装在笔记本内核中:

# %pip and import only needs to be done once per notebook
%pip install semantic-link
from sempy.fabric import FabricDataFrame

下面的代码示例假设你有一个现有 FabricDataFrame,其中包含你想要通过语义模型中的度量值进行扩充的数据。

df = FabricDataFrame({
        "Sales Agent": ["Agent 1", "Agent 1", "Agent 2"],
        "Customer[Country/Region]": ["US", "GB", "US"],
        "Industry[Industry]": ["Services", "CPG", "Manufacturing"],
    }
)

joined_df = df.add_measure(["Total Revenue", "Total Budget"], dataset="Sales Dataset")

add_measure 方法执行以下步骤:

  1. 将 FabricDataFrame 中的列名解析为 Power BI 维度。 该操作将忽略无法在给定语义模型中解析的任何列名。 有关详细信息,请参阅支持的 DAX 语法
  2. 使用解析的列名定义 group by 列。
  3. group by 级别计算一个或多个度量值。
  4. 按 FabricDataFrame 中的现有行筛选结果。