Как передать учетные данные для источников данных при развертывании табличной модели? - PullRequest
0 голосов
/ 10 октября 2018

Проблема: при развертывании табличной модели с помощью мастера развертывания.Работает нормально.Но наши проблемы заключаются в том, что у нас есть 20 источников данных, и во время развертывания мы должны предоставить учетные данные 20 раз, так как он запрашивает учетные данные для каждого источника данных.Что очень больно.Вот почему мы хотим автоматизировать развертывание.

Подход: я следовал этой статье https://notesfromthelifeboat.com/post/analysis-services-1-deployment/, и я могу развернуть табличную модель без ошибок, но когда я обновляю модель.Сбой с ошибкой ниже

Не удалось сохранить изменения на сервере.Возвращенная ошибка: 'Ошибка OLE DB или ODBC:

The credentials provided for the File source are invalid. (Source at \\share\acaidatatempshare\data\lumeneventpropertiesexport.tsv.).
OLE DB or ODBC error: The command has been canceled..
OLE DB or ODBC error: The command has been canceled..
OLE DB or ODBC error: The command has been canceled..

Мой источник данных - файл tsv, а ниже - раздел источника данных файла model.bim.Как вы можете видеть, он не сохраняет пароль для crendential в файле model.bim, asdatabase или xmla.

….
….
      {
        "type": "structured",
        "name": "File/\\\\Share\\AcaiDataTempShare\\Data\\LumenEventPropertiesExport tsv",
        "connectionDetails": {
          "protocol": "file",
          "address": {
            "path": "\\\\share\\AcaiDataTempShare\\Data\\LumenEventPropertiesExport.tsv"
          },
          "authentication": null,
          "query": null
        },
        "credential": {
          "AuthenticationKind": "Windows",
          "kind": "File",
          "path": "\\\\Share\\acaidatatempshare\\data\\lumeneventpropertiesexport.tsv",
          "Username": "domain\\username"
        },
        "contextExpression": [
          "let",
          "    #\"0001\" = Csv.Document(..., [Delimiter = \"#(tab)\", Columns = 3, Encoding = 1252, QuoteStyle = QuoteStyle.None]),",
          "    #\"0002\" = Table.TransformColumnTypes(#\"0001\", {{\"Column1\", type text}, {\"Column2\", type text}, {\"Column3\", type text}})",
         "in",
          "    #\"0002\""
        ]
      },
…..
…..

Как программно передать учетные данные для источников данных во время развертывания?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Вот последний сценарий, который я в итоге создал.

# Get tools path
$msBuildPath = Get-MSBuildToPath
$Microsoft_AnalysisServices_Deployment_Exe_Path = Get-Microsoft_AnalysisServices_Deployment_Exe_Path

# BUild smproj 
& $msBuildPath $projPath "/p:Configuration=validation" /t:Build

Get-ChildItem $binPath | Copy -Destination $workingFolder -Recurse

$secureStringRecreated = ConvertTo-SecureString -String $AnalysisServerPassword -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($AnalysisServerUserName, $secureStringRecreated)
#$plainText = $cred.GetNetworkCredential().Password

#region begin Update Model.deploymenttargets
# Read Model.deploymenttargets
[xml]$deploymenttargets = Get-Content -Path  $deploymenttargetsFilePath

$deploymenttargets.DeploymentTarget.Database = $AnalysisDatabase
$deploymenttargets.DeploymentTarget.Server = $AnalysisServer
$deploymenttargets.DeploymentTarget.ConnectionString = "DataSource=$AnalysisServer;Timeout=0;UID=$AnalysisServerUserName;Password=$AnalysisServerPassword;"
$deploymenttargets.Save($deploymenttargetsFilePath);
#endregion

#region begin Update Model.deploymentoptions
# Read Model.deploymentoptions
[xml]$deploymentoptions = Get-Content -Path  $deploymentoptionsFilePath

# Update ProcessingOption to DoNotProcess otherwise correct xmla file wont be generated.
$deploymentoptions.Deploymentoptions.ProcessingOption = 'DoNotProcess'
$deploymentoptions.Deploymentoptions.TransactionalDeployment = 'false'
$deploymentoptions.Save($deploymentoptionsFilePath);
#endregion

# Create xmla deployment file.
& $Microsoft_AnalysisServices_Deployment_Exe_Path $asdatabaseFilePath  /s:$logFilePath  /o:$xmlaFilePath

#region begin Update .xmla
#Add passowrd in .xmla file.
$xmladata = Get-Content -Path $xmlaFilePath | ConvertFrom-Json

foreach ($ds in $xmladata.createOrReplace.database.model.dataSources){
    $ds.Credential.AuthenticationKind = 'Windows'
    $ds.Credential.Username = $AnalysisServerUserName

    #Add password property to the object.
    $ds.credential | Add-Member -NotePropertyName Password -NotePropertyValue $AnalysisServerPassword
}

$xmladata | ConvertTo-Json -depth 100 | Out-File $xmlaFilePath
#endregion

#Deploy model xmla.
Invoke-ASCmd -InputFile $xmlaFilePath -Server $AnalysisServer -Credential $cred`enter code here`
0 голосов
/ 10 октября 2018

К сожалению, учетные данные источника структурированных (иначе говоря, Power Query) не сохраняются при развертывании модели.Я сообщил об этом как об ошибке в команде разработчиков продукта, но пока не получил ответа.Если вы можете, рассмотрите возможность использования устаревших источников данных (иначе говоря, Provider), так как они сохраняют учетные данные между развертываниями.

В качестве альтернативы, вы можете применить пароль программно, используя TMSL "createOrReplace" скрипт .Самый простой способ создать такой, как сценарий, - это подключиться к службам Analysis Services в SSMS, щелкнуть правой кнопкой мыши соединение (или источник данных) и выбрать «Соединение сценария как»> «СОЗДАТЬ ИЛИ ЗАМЕНИТЬ»> «Окно нового редактора запросов».».В полученном сценарии убедитесь, что пароль установлен правильно:

{
  "createOrReplace": {
    "object": {
      "database": [...] ,
      "dataSource": "File/\\\\Share\\AcaiDataTempShare\\Data\\LumenEventPropertiesExport tsv"
    },
    "dataSource": {
    [...]
    "credential": {
      "AuthenticationKind": "Windows",
      "kind": "File",
      "path": "\\\\Share\\acaidatatempshare\\data\\lumeneventpropertiesexport.tsv",
      "Username": "domain\\username",
      "Password": "<<< YOUR PASSWORD HERE >>>"
    },
    [...]
  }

Затем вы можете вызвать этот сценарий как часть конвейера развертывания - например, используя PowerShell Invoke-AsCmd командлет.

...