Поделиться через


Руководство: Нахождение связей в семантической модели с помощью семантической ссылки

В этом руководстве показано, как взаимодействовать с Power BI из записной книжки Jupyter и обнаруживать связи между таблицами с помощью библиотеки SemPy.

В этом руководстве описано, как:

  • Обнаружение связей в семантической модели (набор данных Power BI), используя библиотеку Python семантической ссылки (SemPy).
  • Используйте компоненты SemPy, поддерживающие интеграцию с Power BI и помогающие автоматизировать анализ качества данных. К этим компонентам относятся:
    • FabricDataFrame — структура, похожая на pandas, обогащенная дополнительной семантической информацией.
    • Функции для извлечения семантических моделей из рабочей области Fabric в ноутбук.
    • Функции, автоматизирующие оценку гипотез о функциональных зависимостях и определяющие нарушения связей в семантических моделях.

Необходимые условия

  • Получите подписку Microsoft Fabric. Или зарегистрируйтесь на бесплатную пробную Microsoft Fabric.

  • Войдите в Microsoft Fabric.

  • Используйте переключатель интерфейса в левой нижней части домашней страницы, чтобы перейти на Fabric.

    Снимок экрана меню переключателя опыта, в котором показано, где выбрать Data Science.

  • Выберите рабочую область в левой панели навигации, чтобы найти и выбрать вашу рабочую область. Эта рабочая область становится вашей текущей рабочей областью.

  • Скачайте из репозитория GitHub fabric-samples семантические модели Customer Profitability Sample.pbix и Customer Profitability Sample (auto).pbix и загрузите их в вашу рабочую область.

Следуйте инструкциям в записной книжке

Тетрадь powerbi_relationships_tutorial.ipynb сопровождает это руководство.

Настройка записной книжки

В этом разделе описана настройка среды записной книжки с необходимыми модулями и данными.

  1. Установите SemPy из PyPI с помощью функции встроенной установки %pip в ноутбуке.

    %pip install semantic-link
    
  2. Выполните необходимые импорты модулей SemPy, которые потребуются позже:

    import sempy.fabric as fabric
    
    from sempy.relationships import plot_relationship_metadata
    from sempy.relationships import find_relationships
    from sempy.fabric import list_relationship_violations
    
  3. Импорт pandas для применения параметра конфигурации, который помогает в форматировании выходных данных.

    import pandas as pd
    pd.set_option('display.max_colwidth', None)
    

Изучение семантических моделей

В этом руководстве используется стандартная семантическая модель рентабельности клиента на примере файла Sample.pbix . Описание семантической модели см. в примере рентабельности клиентов для Power BI.

  • Используйте функцию SemPy list_datasets для изучения семантических моделей в текущей рабочей области:

    fabric.list_datasets()
    

Для остальной части этой записной книжки используется две версии семантической модели рентабельности клиентов:

  • пример рентабельности клиента: семантическая модель, исходя из примеров Power BI с предопределенными связями таблиц
  • Пример рентабельности клиента (авто): те же данные, но взаимосвязи ограничены теми, которые Power BI будет автоматически определять.

Извлечение примера семантической модели с помощью предопределенной семантической модели

  1. Загрузите связи, которые предварительно определены и хранятся в семантической модели Customer Profitability Sample, с помощью функции list_relationships SemPy. Эта функция выводит список из табличной объектной модели:

    dataset = "Customer Profitability Sample"
    relationships = fabric.list_relationships(dataset)
    relationships
    
  2. Визуализировать DataFrame relationships в виде графа с помощью функции plot_relationship_metadata из SemPy.

    plot_relationship_metadata(relationships)
    

    снимок экрана, показывающий график связей между таблицами в семантической модели.

На этом графике показаны "эталонные данные" для связей между таблицами в этой семантической модели, что отражает, как они были определены в Power BI экспертом в предметной области.

Обнаружение комплементарных отношений

Если вы начали с отношений, которые Power BI обнаружил автоматически, у вас был бы меньший набор.

  1. Визуализация связей, которые Power BI автоматически определяется в семантической модели:

    dataset = "Customer Profitability Sample (auto)"
    autodetected = fabric.list_relationships(dataset)
    plot_relationship_metadata(autodetected)
    

    снимок экрана, показывающий связи, которые Power BI автоматически определяется в семантической модели.

    Автоопределение Power BI не обнаружило многие связи. Кроме того, две из автоматически определенных связей являются семантической ошибкой:

    • Executive[ID] —>Industry[ID]
    • BU[Executive_id] —>Industry[ID]
  2. Распечатайте отношения в виде таблицы.

    autodetected
    

    Неправильные связи с таблицей Industry отображаются в строках с индексом 3 и 4. Используйте эти сведения для удаления этих строк.

  3. Отмена неправильно определенных связей.

    autodetected.drop(index=[3,4], inplace=True)
    autodetected
    

    Теперь у вас есть правильные, но неполные отношения.

  4. Визуализация этих неполных связей с помощью plot_relationship_metadata:

    plot_relationship_metadata(autodetected)
    

    снимок экрана, показывающий визуализацию связей после удаления неправильных.

  5. Загрузите все таблицы из семантической модели, используя функции list_tables и read_table библиотеки SemPy.

    tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
    
    tables.keys()
    
  6. Найдите связи между таблицами, используя find_relationships, и просмотрите выходные данные журнала, чтобы узнать, как работает эта функция:

    suggested_relationships_all = find_relationships(
        tables,
        name_similarity_threshold=0.7,
        coverage_threshold=0.7,
        verbose=2
    )
    
  7. Визуализировать только что обнаруженные связи:

    plot_relationship_metadata(suggested_relationships_all)
    

    снимок экрана, показывающий визуализацию вновь обнаруженных связей.

    SemPy смог обнаружить все связи.

  8. Используйте параметр exclude, чтобы ограничить поиск дополнительными связями, которые ранее не были определены:

    additional_relationships = find_relationships(
        tables,
        exclude=autodetected,
        name_similarity_threshold=0.7,
        coverage_threshold=0.7
    )
    
    additional_relationships
    

Проверка связей

  1. Сначала загрузите данные из семантической модели Пример рентабельности клиента.

    dataset = "Customer Profitability Sample"
    tables = {table: fabric.read_table(dataset, table) for table in fabric.list_tables(dataset)['Name']}
    
    tables.keys()
    
  2. Проверьте перекрытие значений первичного и внешнего ключа с помощью функции list_relationship_violations. Укажите выходные данные функции list_relationships в качестве входных данных для list_relationship_violations:

    list_relationship_violations(tables, fabric.list_relationships(dataset))
    

    Нарушения связей предоставляют некоторые интересные сведения. Например, одно из семи значений в Fact[Product Key] отсутствует в Product[Product Key], и это отсутствующее значение — 50.

Исследовательский анализ данных — это захватывающий процесс, и очистка данных тоже. Всегда есть что-то, что данные скрывают, в зависимости от того, как вы на них смотрите, что вы хотите узнать, и т. д. Семантическая ссылка предоставляет новые средства, которые можно использовать для получения дополнительных возможностей с данными.

Ознакомьтесь с другими руководствами по семантической ссылке / SemPy: