从 Jupyter 笔记本中提取和计算 Power BI 度量值

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

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

  • 使用语义链接库 (SemPy) 的 Python 接口以编程方式评估 Power BI 度量值
  • 了解有助于桥接 AI 和 BI 的 SemPy 组件:
    • FabricDataFrame - 使用语义信息增强的 pandas 类结构
    • 获取语义模型的函数,包括原始数据、配置和度量值

先决条件

  • 在导航窗格中,选择 “工作区”,然后选择工作区将其设置为当前工作区。

  • 下载 零售分析示例 PBIX.pbix 语义模型并将其上传到工作区。

在笔记本中继续操作

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

设置笔记本

在本部分中,将设置笔记本环境。

  1. 在笔记本中使用%pip内联方式从 PyPI 安装SemPy

    %pip install semantic-link-sempy
    
  2. 导入稍后将使用的模块。

    import sempy.fabric as fabric
    
  3. 连接到 Power BI 工作区,并在工作区中列出语义模型。

    fabric.list_datasets()
    
  4. 加载语义模型。 在本教程中,你将使用零售分析示例语义模型。

    dataset = "Retail Analysis Sample"
    
    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[Chain]Store[DistrictName]

使用筛选器评估度量值

使用 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 函数允许你提供多个度量值标识符,并在单个 DataFrame值中返回计算值:

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 教程: