教程:从 Jupyter 笔记本中提取并计算 Power BI 度量值

本教程演示如何使用 SemPy(预览版)计算语义模型(Power BI 数据集)中的度量值。

本教程介绍如何执行下列操作:

  • 通过语义链接的 Python 库 (SemPy) 的 Python 接口以编程方式评估 Power BI 度量值。
  • 熟悉 SemPy 的组件,它们有助于弥合 AI 和 BI 之间的差距。 这些核心组件包括:
    • FabricDataFrame - 一种类似 panda 的结构,通过其他语义信息进行了增强。
    • 可用于提取语义模型(包括原始数据、配置和度量值)的有用函数。

先决条件

  • 选择左侧导航窗格中的“工作区”,找到并选中自己的工作区。 此工作区将成为当前工作区。

  • 下载 Retail Analysis Sample PBIX.pbix 语义模型并将其上传到工作区。

在笔记本中继续操作

本教程随附 powerbi_measures_tutorial.ipynb 笔记本。

若要打开本教程随附的笔记本,请按照让系统为数据科学做好准备教程中的说明操作,将该笔记本导入到工作区。

或者,如果要从此页面复制并粘贴代码,则可以创建新的笔记本

在开始运行代码之前,请务必将湖屋连接到笔记本

设置笔记本

在本部分中,你将使用必要的模块和数据设置笔记本环境。

  1. 使用笔记本中的 %pip 内联安装功能从 PyPI 安装 SemPy

    %pip install semantic-link
    
  2. 导入稍后会用到的模块:

    import sempy.fabric as fabric
    
  3. 可以连接到 Power BI 工作区。 列出工作区中的语义模型:

    fabric.list_datasets()
    
  4. 加载语义模型。 本教程使用 Retail Analysis Sample PBIX 语义模型

    dataset = "Retail Analysis Sample PBIX"
    

列出工作区度量值

使用 SemPy 的 list_measures 函数列出语义模型中的度量值,如下所示:

fabric.list_measures(dataset)

评估度量值

在本部分中,你将使用 SemPy 的 evaluate_measure 函数以各种方式评估度量值。

评估原始度量值

在以下代码中,使用 SemPy 的 evaluate_measure 函数计算名为“平均销售面积大小”的预配置度量值。 可以在上一单元格的输出中看到此度量值的基本公式。

fabric.evaluate_measure(dataset, measure="Average Selling Area Size")

使用 groupby_columns 评估度量值

通过提供额外的参数 groupby_columns,可以按某些列对度量值输出进行分组:

fabric.evaluate_measure(dataset, measure="Average Selling Area Size", groupby_columns=["Store[Chain]", "Store[DistrictName]"])

在前面的代码中,你按语义模型中 Store 表的 ChainDistrictName 列进行了分组。

使用筛选器评估度量值

还可以使用 filters 参数为特定列指定结果可包含的特定值:

fabric.evaluate_measure(dataset, \
                        measure="Total Units Last Year", \
                        groupby_columns=["Store[Territory]"], \
                        filters={"Store[Territory]": ["PA", "TN", "VA"], "Store[Chain]": ["Lindseys"]})

在前面的代码中,Store 是表的名称,Territory 是列的名称,PA 是筛选器允许的值之一。

跨多个表评估度量值

可以根据跨语义模型中多个表的列对度量值进行分组。

fabric.evaluate_measure(dataset, measure="Total Units Last Year", groupby_columns=["Store[Territory]", "Sales[ItemID]"])

评估多个度量值

函数 evaluate_measure 允许你提供多个度量值的标识符,并在同一数据帧中输出计算值:

fabric.evaluate_measure(dataset, measure=["Average Selling Area Size", "Total Stores"], groupby_columns=["Store[Chain]", "Store[DistrictName]"])

使用 Power BI XMLA 连接器

默认语义模型客户端由 Power BI 的 REST API 提供支持。 如果使用此客户端运行查询时出现问题,可以使用 use_xmla=True 将后端切换到 Power BI 的 XMLA 接口。 对于使用 XMLA 的度量值计算,SemPy 参数保持不变。

fabric.evaluate_measure(dataset, \
                        measure=["Average Selling Area Size", "Total Stores"], \
                        groupby_columns=["Store[Chain]", "Store[DistrictName]"], \
                        filters={"Store[Territory]": ["PA", "TN", "VA"], "Store[Chain]": ["Lindseys"]}, \
                        use_xmla=True)

查看有关语义链接/SemPy 的其他教程: