Как я могу получить метку времени последней обработки для табличного куба SSAS?

В SSMS я подключился к табличному кубу SSAS. Когда я просматриваю экран свойств, я вижу метку времени последней обработки 11/24/2015 2:59:20 PM.

Если я использую SELECT LAST_DATA_UPDATE FROM $system.MDSchema_Cubes, я вижу метку времени 11/25/2015 12:13:28 PM (если я настраиваю часовой пояс).

Если я открываю экран разделов для одной из таблиц в моем кубе, я вижу, что самая последняя метка времени обработки - 11/25/2015 12:13:28 PM, что соответствует значению из DMV.

Мне нужна временная метка «Последняя обработка» для моего BISM, та, что была на экране «Свойства базы данных», а не та, что была в разделе, который обрабатывался позже.

Есть ли способ получить это программно?


person Steve S.    schedule 25.11.2015    source источник


Ответы (2)


Вы можете использовать сборку хранимой процедуры служб Analysis Services, которую можно загрузить с здесь.

Как только вы получите файл сборки, соответствующий вашей версии Analysis Server, подключитесь к своему экземпляру через SSMS.

  1. Найдите свою базу данных (Куб базы данных)
  2. Зайдите в папку Assemblies
  3. Щелкните правой кнопкой мыши и New Assembly...
  4. Найдите и выберите сборку.
  5. Установите разрешения, как описано в сборке документации.
  6. После импорта сборки используйте этот запрос многомерных выражений, чтобы получить последнюю обработанную метку времени.

--

with member [Measures].[LastProcessed] as ASSP.GetCubeLastProcessedDate()
select [Measures].[LastProcessed] on 0
from [Armetales DWH]

Сообщите мне, если это поможет вам.

person alejandro zuleta    schedule 26.11.2015
comment
Есть ли версия, которую я могу использовать с табличным экземпляром SSAS? Похоже, что это для многомерного. - person Steve S.; 30.11.2015
comment
@SteveS. Если у вас есть табличный экземпляр, вы не должны использовать слово cube в своем вопросе, это сбивает с толку, поскольку многомерная модель связана с кубами и измерениями, в то время как табличная модель использует таблицы и отношения для моделирования данных. - person alejandro zuleta; 30.11.2015

Посмотрев на код в сборке хранимой процедуры служб Analysis Services, я смог собрать сценарий PowerShell, который получил дату, которую я искал. Вот код:

#we want to always stop the script if any error occurs
$ErrorActionPreference = "Stop"
$error.Clear()

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices") | Out-Null

$databases = @('BISM1', 'BISM2')
$servers = @('Server1\BISM', 'Server2\BISM')

function Get-BISMLastProcessed
{
  param(
    [string] $connStr
  )
  Begin {
    $server = New-Object Microsoft.AnalysisServices.Server
    $server.Connect($connStr)
  }
  Process {
    Try {
    $database = $server.Databases.GetByName($_)
    Write-Host "  Database [$($database.Name)] was last processed $($database.LastProcessed)"
    }
    Catch [System.Exception] {
      Write-Host $Error[0].Exception
    }
    Finally {
      if ($database -ne $null) {
          $database.Dispose()
      }    
    }
  }
  End {
    $server.Dispose()
  }
}


foreach ($server in $servers) {
  $connectStr = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=BISM1;Data Source=$server"
  Write-Host "Server [$server]"
  $databases | Get-BISMLastProcessed $connectStr
  Write-Host "----------------"
}

Результаты следующие:

Server [Server1\BISM]
  Database [BISM1] was last processed 11/30/2015 12:25:48
  Database [BISM2] was last processed 12/01/2015 15:53:56
----------------
Server [Server2\BISM]
  Database [BISM1] was last processed 11/30/2015 12:19:32
  Database [BISM2] was last processed 11/02/2015 23:46:34
----------------
person Steve S.    schedule 03.12.2015