PowerShell Üzerinde Power BI Kullanımı – Zamanlanmış Yenileme İşlemleri

PowerShell Üzerinde Power BI Kullanımı – Zamanlanmış Yenileme İşlemleri

Merhabalar, iyi günler.

Bugün Microsoft’un birbirinden bağımsız veri kaynaklarınızı tutarlı, görsel olarak sürükleyici ve etkileşimli öngörülere dönüştürmenizi sağlamak için birlikte çalışan yazılım hizmetlerinden, uygulamalardan ve bağlayıcılardan oluşan bir koleksiyonu olan Power BI’ın PowerShell üzerinde veri kaynağı özelliği olan Zamanlanmış Yenileme (Schedule Refresh) hakkında neler yapılabileceğine yönelik aktarımlarda bulunmaya çalışacağım.

Şimdiden iyi okumalar.

İlgili yazı içeriğine ulaşmak için lütfen tıklayınız...
Please click to access the related article content...

Kod dökümü için;
For code dump;

$PBIAdminUPN    = " ORGANIZASYON YONETICI KULLANICINIZ          "
$PBIAdminPW     = " ORGANIZASYON YONETICI KULLANICISI PAROLANIZ "
$SecurePassword = ConvertTo-SecureString $PBIAdminPW -AsPlainText -Force
$Credential     = New-Object System.Management.Automation.PSCredential($PBIAdminUPN,$SecurePassword)

$serverName                  = " SUNUCU ADINIZ     "
$databaseName                = " ILGILI VERITABANI "
$tableName                   = " ILGILI TABLO      "

$Connection                  = New-Object System.Data.SQLClient.SQLConnection
$Connection.ConnectionString = "server='$serverName';database='$databaseName';trusted_connection=true;"

$Connection.Open()

$Command             = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection  = $Connection

Connect-PowerBIServiceAccount -Credential $Credential

$Workspaces = Get-PowerBIWorkspace

foreach($workspace in $Workspaces)
{
$DataSets = Get-PowerBIDataset -WorkspaceId $workspace.Id | where {$_.isRefreshable -eq $true}    
    foreach($dataset in $DataSets)
    {
        $URI = "groups/" + $workspace.Id + "/datasets/" + $dataset.id + "/refreshSchedule"

        $Results = Invoke-PowerBIRestMethod -Url $URI -Method Get | ConvertFrom-Json
        if($Results.enabled -eq $true) {

            $LogDate1=Get-Date -Format "dddd MM/dd/yyyy HH:mm K"
            $Workspace1=$workspace.Id
            $Dataset1=$Dataset.Name
            $Days1=$Results.days
            $Times1=$Results.times
            $Enabled1=$Results.enabled
            $NotifyOption1=$Results.notifyOption
            $LocalTimeZone1=$Results.localTimeZoneId

                  $insertquery="
                  INSERT INTO 
                  $tableName
                  (
                   [LogDate]
                  ,[WorkspaceId]
                  ,[DatasetName]
                  ,[Days]
                  ,[Times]
                  ,[Enabled]
                  ,[NotifyOption]
                  ,[LocalTimeZoneId]
                  )
                  VALUES
                  (
                  '$LogDate1',
                  '$Workspace1',
                  '$Dataset1',
                  '$Days1',
                  '$Times1',
                  '$Enabled1',
                  '$NotifyOption1',
                  '$LocalTimeZone1'
                  )"
                  $Command.CommandText = $insertquery
                  $Command.ExecuteNonQuery()  
        }
    }
}
$Connection.Close()
USE [PowerBIServiceLog]
GO

/****** Object:  Table [dbo].[ScheduleRefresh]    Script Date: 31.03.2023 21:52:09 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[ScheduleRefresh](
    [LogDate] [nvarchar](50) NULL,
    [WorkspaceId] [nvarchar](250) NULL,
    [DatasetName] [nvarchar](250) NULL,
    [Days] [nvarchar](100) NULL,
    [Times] [nvarchar](50) NULL,
    [Enabled] [nvarchar](5) NULL,
    [NotifyOption] [nvarchar](50) NULL,
    [LocalTimeZoneId] [nvarchar](50) NULL
) ON [PRIMARY]
GO
using Microsoft.Identity.Client;
using Microsoft.PowerBI.Api;
using Microsoft.Rest;

class Program
{
    static async Task Main(string[] args)
    {
        string clientId = "CLIENT ID";
        string tenantId = "TENANT ID";

        string username = "USERNAME";
        string password = "PASSWORD";
        string authority = $"https://login.microsoftonline.com/{tenantId}";

        var app = PublicClientApplicationBuilder.Create(clientId)
            .WithAuthority(authority)
            .Build();

        var token = await app.AcquireTokenByUsernamePassword(new[] 
        { "https://analysis.windows.net/powerbi/api/.default" }, 
        username, password.ToString()).ExecuteAsync();
        var tokenCredentials = new TokenCredentials(token.AccessToken, "Bearer");

        using (var client = new PowerBIClient(
                                              new Uri("https://api.powerbi.com"),
                                              tokenCredentials)
                                              )
        {
            var workspaces = await client.Groups.GetGroupsAsync();

            foreach (var workspace in workspaces.Value)
            {
                var datasets = await client.Datasets.GetDatasetsInGroupAsync(workspace.Id);

                foreach (var dataset in datasets.Value)
                {
                  Console.WriteLine($"Refreshing {dataset.Name} in {workspace.Name}");
                  await client.Datasets.RefreshDatasetInGroupAsync(workspace.Id, dataset.Id);
                }
            }
        }
    }
}