ssas - 如何查看 SSAS 多维数据集无法刷新表的原因
问题描述
我们有一个表格模型多维数据集,每天通过调用 SSAS 命令的 SQL 代理作业刷新。命令很简单:
{“刷新”:{“类型”:“完整”,“对象”:[{“数据库”:“KPIDashboardv1”}]}}
这项工作每天都在运行并成功。但是我注意到多维数据集中的一些表没有刷新。select * from $system.TMSCHEMA_partitions 以几周前的 RefreshedTime 显示这些表。
在尝试处理这些表时,如何找到 SSAS 遇到的错误或问题?
我努力了:
- 从 $system.TMSCHEMA_partitions 获取表属性查询并针对相关数据源执行该查询。它迅速成功并包含最新数据。
- 查看为 SQL 代理作业步骤配置的输出文件。它是空的。
解决方案
您是否尝试过检查 XE 收集的数据?您需要“ProgressReportEnd”事件
<Create xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<ObjectDefinition>
<Trace>
<ID>ETLExecutionLogs</ID>
<Name>ETLExecutionLogs</Name>
<AutoRestart>true</AutoRestart>
<XEvent xmlns="http://schemas.microsoft.com/analysisservices/2011/engine/300/300">
<event_session name="ETLExecutionLogs" dispatchLatency="0" maxEventSize="0" maxMemory="4" memoryPartition="none" eventRetentionMode="AllowSingleEventLoss" trackCausality="true" xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<event package="AS" name="ProgressReportEnd" />
<target package="package0" name="event_file">
<parameter name="filename" value="d:\YourServerLogPath\OLAP\Log\ETLExecutionLogs.xel" />
<parameter name="max_file_size" value="250" />
<parameter name="max_rollover_files" value="4" />
<parameter name="increment" value="50" />
</target>
</event_session>
</XEvent>
</Trace>
</ObjectDefinition>
</Create>
之后,您可以使用 powershell 提取信息:
$SharedPath = "C:\Program Files\Microsoft SQL Server\150\Shared";
$xeCore = [System.IO.Path]::Combine($SharedPath, "Microsoft.SqlServer.XE.Core.dll");
$xeLinq = [System.IO.Path]::Combine($SharedPath, "Microsoft.SqlServer.XEvent.Linq.dll");
Add-Type -Path $xeLinq;
if( [System.IO.File]::Exists($xeCore) )
{
Add-Type -Path $xeCore;
}
[Microsoft.SqlServer.XEvent.Linq.QueryableXEventData] $xEvents = $null;
$files = [System.IO.Directory]::EnumerateFiles("d:\YourServerLogPath\OLAP\Log","ETLExecutionLogs*.xel")
$xEvents =
New-Object -TypeName Microsoft.SqlServer.XEvent.Linq.QueryableXEventData(
$files
);
$dt = New-Object System.Data.Datatable;
$dt.Columns.Add("EventSubclass",[int]);
$dt.Columns.Add("ObjectType",[int]);
$dt.Columns.Add("NTCanonicalUserName",[String]);
$dt.Columns.Add("DatabaseName",[String]);
$dt.Columns.Add("ObjectPath",[String]);
$dt.Columns.Add("ObjectID",[String]);
$dt.Columns.Add("EndTime",[DateTimeOffset]);
$dt.Columns.Add("StartTime",[DateTimeOffset]);
$dt.Columns.Add("RequestID",[Guid]);
$dt.Columns.Add("ReEncoding",[String]);
foreach($publishedEvent in $xEvents)
{
if( ($publishedEvent.Fields["EventSubclass"].value -In 55) -or ($publishedEvent.Fields["EventSubclass"].Value -In 59 -And $publishedEvent.Fields["ObjectType"].Value -In 802016,802015,802014, 802013, 802018 -And
$publishedEvent.Name -eq "ProgressReportEnd" -And $publishedEvent.Fields["Success"].Value -eq "1" ))
{
$row = $dt.NewRow();
$row.EventSubclass = $publishedEvent.Fields["EventSubclass"].Value;
$row.ObjectType = $publishedEvent.Fields["ObjectType"].Value;
$row.NTCanonicalUserName = $publishedEvent.Fields["NTCanonicalUserName"].Value;
$row.DatabaseName = $publishedEvent.Fields["DatabaseName"].Value;
$row.ObjectPath = $publishedEvent.Fields["ObjectPath"].Value;
$row.ObjectID = $publishedEvent.Fields["ObjectID"].Value;
$row.EndTime = $publishedEvent.Fields["EndTime"].Value;
$row.StartTime = $publishedEvent.Fields["StartTime"].Value;
$row.RequestID = $publishedEvent.Fields["RequestID"].Value;
$row.ReEncoding = $publishedEvent.Fields["TextData"].Value;
$dt.Rows.Add($row)
}
}
$dt
}
推荐阅读
- sql - 如何将数据从 excel 导入到 postgres-多对多关系
- swift - 定时器类,不增加计数
- python - 如何使用 Python 从 Excel 表中提取 OLE 对象?
- video - 现代实时网络摄像头流媒体方法
- laravel - Blade 中的 Laravel 验证错误:显示相同消息的多个表单
- javascript - 获取确切的 YouTube 订阅者
- unity3d - 碰撞或移动错误(Unity 2D 游戏开发)
- php - 在 php foreach 中使用 jquery 转换为 html (Laravel)
- python-3.x - 使用 .agg() 方法时如何传递参数?
- r - 绘制垂直剖面时在 ggplot2 中翻转 y 和 x 的问题