Power BI 与语义链接和 Microsoft Fabric 的连接

Power BI 连接是语义链接的核心。 在本文中,你将了解语义链接为 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 提供的功能包括从检索数据、度量值计算、执行 DAX 查询和元数据。

对于 Spark 3.4 及以上版本,使用 Fabric 时,语义链接在默认运行时中可用,无需安装。 如果使用的是 Spark 3.3 或更低版本,或者想要更新到最新版本的语义链接,则可以运行以下命令:

python %pip install -U semantic-link  

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

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

对 Spark 的支持(PySpark、Spark SQL、R、Scala)

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

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

将 Spark 配置为使用 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`

显示语义模型 Sales Dataset 中表 Customer 的数据:

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

可通过虚拟 _Metrics 表访问 Power BI 度量值,以使用多维 Power BI 桥接关系型 Spark SQL。 在以下示例中,Total RevenueRevenue BudgetSales Dataset 语义模型中定义的度量值,其余列是维度。 聚合函数(例如 AVG)在度量值中被忽略,它仅服务于 SQL 的一致性。

该连接器支持将计算从 Spark 表达式向下推送到 Power BI 引擎,例如 Customer[State] in ('CA', 'WA'),从而实现 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 操作是语义链接的一项强大功能,可用于通过语义模型中的度量值来扩充数据。 add_measure 操作仅在 SemPy Python 库中可用,不受 Spark 本机连接器支持。 有关 add_measure 方法的详细信息,请参阅 FabricDataFrame 类中的 add_measure

要使用 SemPy Python 库,首先需要通过在笔记本单元中执行此代码来在笔记本内核中安装它:

提示

以下代码示例假定你已手动创建了一个 FabricDataFrame,其中包含你想要通过语义模型中的度量值进行扩充的数据。

# %pip and import only needs to be done once per notebook
%pip install semantic-link
from sempy.fabric import 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 操作执行以下步骤:

  • 解析列名:FabricDataFrame 中的列名解析为 Power BI 维度。 将忽略无法在给定语义模型中解析的列名(请参阅支持的 DAX 语法)。
  • 使用解析的列名按列定义组
  • 按级别在组层面计算一个或多个度量值
  • 按 FabricDataFrame 中的现有行筛选结果。