SSAS 中的非日期角色扮演维度

Posted

技术标签:

【中文标题】SSAS 中的非日期角色扮演维度【英文标题】:Non-Date Roleplaying Dimensions in SSAS 【发布时间】:2019-01-07 20:56:51 【问题描述】:

我是 SSAS 新手,正在建立概念验证。我喜欢角色扮演维度的想法,但我无法获得一种不基于日期的设置。这是用例:

在我们的 ERP 系统中,我们有一个称为“时间条目”的事实表,其中包含:

用户 ID Biller_ID Approver_ID 工作时间 等

我还有一个“资源”表,我将这些表作为外键关联起来:

Resource_ID 部门名称 等

当我创建我的数据源视图时,我创建了以下关系:

User_ID -> Resource_ID Biller_ID -> Resource_ID Approver_ID -> Resource_ID

我的“资源”维度可以成功部署和处理,具有以下属性:

Resource_ID 部门名称

我的“工作条目”多维数据集有一个度量,“工作时间”。当我添加“资源”维度时,它会创建三个角色扮演维度:

用户 审批人资源 帐单资源

当我去处理时,我收到以下错误:

OLAP 存储引擎中的错误:处理时找不到属性键:表:'时间条目',列:'user_id',值:'某个数字',属性是'资源 ID'。

到目前为止,我关注的唯一一个让我成功排除故障的帖子是这个:

https://www.sqlservercentral.com/Forums/1219713/Errors-in-the-OLAP-storage-engine-The-attribute-key-cannot-be-found-when-processing-Even-though-key-Exist-in-Dim-Table

TL;DR -

我已经删除了数据库中的 factable 和 dim 表之间的关系。 我刷新了dataSourceViews,表之间没有关系 我删除了立方体设计中的尺寸 我在立方体设计中重新创建了尺寸 然后我在 dataSourceViews 中建立事实表中的外键和暗表中的主键之间的关系 我重新处理了立方体

这样做的问题是,因为我们在创建关系之前添加了维度,所以我们没有角色扮演维度。

我觉得我在这里遗漏了一些简单的东西,但我无法弄清楚。谁能告诉我为什么我的角色扮演维度不起作用?

【问题讨论】:

【参考方案1】:

维度的角色扮演功能不依赖于其类型。您的维度可用于角色扮演场景,如日期维度。 关于您的问题 - SSAS 引擎有时可能会构建提取维度数据的奇怪查询,尤其是当您的维度基于多个表中的数据时。要检查和调查它:

修复错误消息中的 user_id 值 对相应维度进行处理更新或处理满,并从处理窗口窗体中获取用于处理user_id属性的SQL查询。正在处理user_id 属性日志条目。 复制 SQL 查询并运行它。检查它是否从上面的错误信息中返回 id。 如果缺少值 - 调查查询

根据我的经验,当在两个具有某种关系的表上构建错误的维度时,就会发生这种情况。 SSAS 引擎已经构建了具有严格内连接的查询,并且它必须具有较少限制的左外连接。 您可以使用 SSDT 来修复它,其中 DSV 属性为非空,但我发现直接在 DSV 中编写具有正确连接的 SQL 查询更简单。

【讨论】:

以上是关于SSAS 中的非日期角色扮演维度的主要内容,如果未能解决你的问题,请参考以下文章

SSAS 获取两个日期之间的活动记录数

如何避免更改 SSAS 角色的 Excel 连接字符串

无日期维度中的 SSAS 日期字段

SSAS XMLA DISCOVER:如何获取 SSAS 数据库中的角色列表

SSAS - 日期维度将错误的日期与层次结构联系起来

SSAS 安全角色不适用于 PowerBI 报告