Внедрение отчета с базой данных Azure Analysis Services (AAS)

Применимо к:✅ встроенная аналитика Power BI для ваших клиентов (App-owns-data)

В этой статье объясняется, как встроить отчет Power BI, использующий данные, хранящиеся в Azure Analysis Services (AAS), в сценарии «внедрение для ваших клиентов». Эта статья предназначена для независимых разработчиков программного обеспечения (ISV), которые хотят внедрить отчет с данными AAS независимо от того, реализует ли база данных безопасность на уровне строк (RLS).

Предварительные требования

Вам нужен отчет с динамическим подключением к базе данных AAS, с RLS или без нее.

Динамическая безопасность — RLS

Если вы хотите, чтобы отчет реализовал динамические RLS, используйте функцию customeData . Поскольку вы не можете переопределить фактически используемый идентификатор, мы рекомендуем создать новые роли с помощью customData. Вы также можете использовать роли с функциями username или userPrincipalName, если заменить их на customData.

Выполните следующие действия, чтобы создать новую роль и добавить customData функцию в роль.

  1. Создайте роль на сервере служб Analysis Services.

    Снимок экрана создания новой роли на сервере Analysis Services.

  2. В параметрах "Общие" укажите имя роли и задайте разрешения базы данных только для чтения.

    Снимок экрана: присвоение новой роли нового имени и настройка режима

  1. В настройках Membership добавьте пользователей, которые будут вызывать API Embed Token - Generate Token. Если вы используете субъект-службу, который не является администратором, добавьте это также.

    Снимок экрана добавления пользователей в новую роль на сервере Analysis Services.

  2. В параметрах фильтров строк задайте запрос DAX с помощью CUSTOMDATA() функции.

    Снимок экрана, на котором показано, как добавить функцию customData в запрос DAX в новой роли на сервере Служб Analysis Services.

Субъект-служба

Если вы используете субъект-службу для встраивания отчета, убедитесь, что эта субъект-служба является администратором сервера или участником роли AAS. Чтобы предоставить субъекту-службе права администратора AAS, см. статью Добавление субъекта-службы в роль администратора сервера. Чтобы добавить субъект-службу в качестве члена роли, перейдите к параметрам членства.

Используйте идентификатор объекта субъекта-службы в качестве имени пользователя (действующее удостоверение).

Миграция служб Analysis Service

Вы можете перейти из AAS в Power BI Premium , даже если у вас есть внедренный отчет AAS. Ваш встроенный отчет не перестанет работать во время миграции, если учетная запись, вызывающая API Embed Token - Generate Token, является участником или администратором рабочей области.

Примечание.

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

Создать токен внедрения

Используйте API Generate Token для создания токена внедрения, который переопределяет эффективную идентификацию.

Сведения, необходимые для создания токена внедрения, зависят от того, как вы подключены к Power BI (субъект-служба или основная учетная запись), а также от того, применяется ли к базе данных RLS.

Чтобы создать токен внедрения, укажите следующие сведения:

  • Имя пользователя (необязательно, если RLS не используется. Обязательно при использовании RLS) — имя пользователя должно совпадать с именем пользователя инициатора вызова API (в данном случае — UPN пользователя Master). Если база данных не использует RLS, а имя пользователя не указано, используются учетные данные главного пользователя.
  • Роль (требуется для RLS) — отчет отображает данные только в том случае, если фактический идентификатор входит в роль.

Пример:

Определите удостоверение пользователя и роли для одного из следующих трех сценариев:

  • Если RLS не реализована:

Вам не нужно указывать действующий идентификатор.

  • Если используется статический RLS:

        var rlsidentity = new EffectiveIdentity(  //If static RLS
           username: "username@contoso.com", 
           roles: new List<string>{ "MyRole" },
           datasets: new List<string>{ datasetId.ToString()}
        )
    
  • При использовании динамической RLS:

        var rlsidentity = new EffectiveIdentity(  // If dynamic RLS
           username: "username@contoso.com",
           roles: new List<string>{ "MyRoleWithCustomData" },
           customData: "SalesPersonA"
           datasets: new List<string>{ datasetId.ToString()}
        )
    

    Примечание.

    customData В токене внедрения не может быть больше 1024 символов.

Используйте фактические учетные данные для создания токена внедрения:

public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
{
    PowerBIClient pbiClient = this.GetPowerBIClient();
    // Create a request for getting an embed token for the rls identity defined above
       var tokenRequest = new GenerateTokenRequestV2(
        reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
        datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
        targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
        identities: new List<EffectiveIdentity> { rlsIdentity } // Only in cases of RLS
    );
    // Generate an embed token
    var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
    return embedToken;
}

Используйте маркер внедрения для внедрения отчета в приложение или веб-сайт. Данные в отчете фильтруются в соответствии с RLS, примененной в этом отчете.