I denne quickstart autentificerer du dig til Power BI, udfører en DAX-forespørgsel mod en semantisk model og deserialiserer Arrow-svaret til en lokal datastruktur.
Forudsætninger
- Et Power BI-arbejdsområde med mindst én semantisk model.
-
Bygge- og læsetilladelser på den semantiske model.
- En Microsoft Entra-appregistrering (eller brug interaktiv autentificering til test).
PowerShell 7.4 eller nyere.
Installer modulet MSAL.PS :
Install-Module -Name MSAL.PS -Scope CurrentUser
1 - Autentificér
Erhverv en bærertoken med scopet https://analysis.windows.net/powerbi/api/.default .
from msal import PublicClientApplication
client_id = "YOUR_APP_CLIENT_ID"
authority = "https://login.microsoftonline.com/YOUR_TENANT_ID"
scopes = ["https://analysis.windows.net/powerbi/api/.default"]
app = PublicClientApplication(client_id, authority=authority)
result = app.acquire_token_interactive(scopes=scopes)
access_token = result["access_token"]
using Microsoft.Identity.Client;
var clientId = "YOUR_APP_CLIENT_ID";
var tenantId = "YOUR_TENANT_ID";
var scopes = new[] { "https://analysis.windows.net/powerbi/api/.default" };
var app = PublicClientApplicationBuilder
.Create(clientId)
.WithAuthority(AzureCloudInstance.AzurePublic, tenantId)
.WithRedirectUri("http://localhost")
.Build();
var result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
var accessToken = result.AccessToken;
$clientId = "YOUR_APP_CLIENT_ID"
$tenantId = "YOUR_TENANT_ID"
$scopes = @("https://analysis.windows.net/powerbi/api/.default")
$token = Get-MsalToken -ClientId $clientId -TenantId $tenantId -Scopes $scopes -Interactive
$accessToken = $token.AccessToken
2 - Udfør en DAX-forespørgsel
Send en POST-anmodning til Execute Queries Arrow-endpointet med en simpel EVALUATE sætning.
import io
import pyarrow as pa
import requests
group_id = "YOUR_WORKSPACE_ID"
dataset_id = "YOUR_DATASET_ID"
url = (f"https://api.powerbi.com/v1.0/myorg/groups/{group_id}"
f"/datasets/{dataset_id}/executeDaxQueries")
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json",
}
body = {"query": "EVALUATE TOPN(5, 'DimProduct')"}
response = requests.post(url, headers=headers, json=body)
response.raise_for_status()
reader = pa.ipc.open_stream(io.BytesIO(response.content))
table = reader.read_all()
df = table.to_pandas()
print(df)
using System.Net.Http.Headers;
using Apache.Arrow;
using Apache.Arrow.Ipc;
var groupId = "YOUR_WORKSPACE_ID";
var datasetId = "YOUR_DATASET_ID";
var url = $"https://api.powerbi.com/v1.0/myorg/groups/{groupId}"
+ $"/datasets/{datasetId}/executeDaxQueries";
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", accessToken);
var body = new StringContent(
"""{"query": "EVALUATE TOPN(5, 'DimProduct')"}""",
System.Text.Encoding.UTF8,
"application/json");
var response = await client.PostAsync(url, body);
response.EnsureSuccessStatusCode();
using var stream = await response.Content.ReadAsStreamAsync();
using var reader = new ArrowStreamReader(stream);
var batch = await reader.ReadNextRecordBatchAsync();
Console.WriteLine($"Rows: {batch.Length}, Columns: {batch.ColumnCount}");
$groupId = "YOUR_WORKSPACE_ID"
$datasetId = "YOUR_DATASET_ID"
$url = "https://api.powerbi.com/v1.0/myorg/groups/$groupId" +
"/datasets/$datasetId/executeDaxQueries"
$headers = @{
"Authorization" = "Bearer $accessToken"
"Content-Type" = "application/json"
}
$body = @{ query = "EVALUATE TOPN(5, 'DimProduct')" } | ConvertTo-Json
$response = Invoke-WebRequest -Uri $url -Method Post -Headers $headers -Body $body
# Save the binary Arrow stream to a file for inspection
$arrowFile = "result.arrow"
[System.IO.File]::WriteAllBytes($arrowFile, $response.Content)
Write-Host "Arrow stream saved to $arrowFile ($($response.Content.Length) bytes)"
3 - Inspicer resultaterne
# Print the Arrow schema (column names and types)
print(table.schema)
# Show the first few rows as a pandas DataFrame
print(df.head())
# Access a specific column
print(table.column("ProductName").to_pylist()[:5])
// Print the schema (column names and types)
for (var i = 0; i < batch.Schema.FieldsList.Count; i++)
{
var field = batch.Schema.FieldsList[i];
Console.WriteLine($" {field.Name}: {field.DataType}");
}
// Print the first row's values
for (var i = 0; i < batch.ColumnCount; i++)
{
var column = batch.Column(i);
Console.Write($"{batch.Schema.FieldsList[i].Name}=");
Console.Write(column.GetType().GetMethod("GetValue")?.Invoke(column, new object[] { 0 }));
Console.Write(" ");
}
# Use Python with pyarrow to read the saved Arrow file
python -c @"
import pyarrow as pa
reader = pa.ipc.open_stream('result.arrow')
table = reader.read_all()
print(table.schema)
print(table.to_pandas().head())
"@
Ryd op i ressourcer
Hvis du har oprettet en Microsoft Entra-appregistrering udelukkende til test, skal du gå til Azure-portalen og slette den. Adgangstokene udløber automatisk og behøver ikke manuel tilbagekaldelse.
Relateret indhold