Σε αυτήν τη γρήγορη εκκίνηση, πραγματοποιείτε έλεγχο ταυτότητας στο Power BI, εκτελείτε ένα ερώτημα DAX σε ένα μοντέλο σημασιολογίας και αποσειριοποιείτε την απόκριση βέλους σε μια τοπική δομή δεδομένων.
Προαπαιτούμενα στοιχεία
- Ένας χώρος εργασίας Power BI με τουλάχιστον ένα μοντέλο σημασιολογίας.
-
Δικαιώματα δόμησης και ανάγνωσης στο μοντέλο σημασιολογίας.
- Μια καταχώρηση εφαρμογής Microsoft Entra (ή χρησιμοποιήστε αλληλεπιδραστικό έλεγχο ταυτότητας για δοκιμή).
PowerShell 7.4 ή νεότερη έκδοση.
Εγκαταστήστε τη MSAL.PS μονάδα:
Install-Module -Name MSAL.PS -Scope CurrentUser
1 - Έλεγχος ταυτότητας
Αποκτήστε ένα διακριτικό κομιστή με το 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 - Εκτέλεση ερωτήματος DAX
Στείλτε μια αίτηση POST στο τελικό σημείο βέλους εκτέλεσης ερωτημάτων με μια απλή EVALUATE πρόταση.
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 - Επιθεωρήστε τα αποτελέσματα
# 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())
"@
Εκκαθάριση των πόρων
Εάν δημιουργήσατε μια εγγραφή εφαρμογής Microsoft Entra αποκλειστικά για δοκιμή, μεταβείτε στην πύλη Azure και διαγράψτε την. Τα διακριτικά πρόσβασης λήγουν αυτόματα και δεν χρειάζονται μη αυτόματη ανάκληση.
Σχετικό περιεχόμενο