0

我正在构建一个外观类似于仪表板的文档。我正在使用单选按钮来选择年份。可悲的是,在我的一个数据集中,属性 year 是另一个属性,即使包含完全相同的值。如何解决根据文档中的值匹配属性的问题?

基本上我想单击单选按钮 2013 并在包含名为 year 的属性的 graph1 和包含名为 year-of-observation 的属性的 graph2 中选择值 2013。


我照你说的做了。

我在包含观察年份的报告中添加了一个高级资格过滤器:

 [Year]@ID = [Obs-Year]@ID

然后我将属性年份添加到报告中。

但是当我尝试执行报告时出现以下错误:

报告:xxxxxxxxxxx

工作:8600588

状态:执行失败

错误:SQL 生成完成 QueryEngine 遇到错误:报告包含表 ANSWERS 和 YEAR 之间的 pass 1 中的交叉连接。根据笛卡尔连接设置中止执行。组件的处理方法中的错误:QueryEngineServer,项目 xxxxxx,作业 8600588,错误代码 = -2147212544。

开始时间:15:13:50

4

1 回答 1

1

您不能...或者您可以尝试在报告中添加属性 yearyear-of-observation并放置一个过滤器 year = year-of-observation,此时可能会发生很多事情:

  1. 如果这两个属性没有关系,则年份的查找表将在交叉连接中添加到您的报表查询中,但您不必担心,因为过滤器会将结果限制为正确的结果。

  2. 如果其中一个属性是另一个属性的父级,则您将没有交叉连接,则删除过滤器,但仔细检查结果(以防万一)

  3. 如果 Year 已经映射到您报告使用的事实表之一,并且年份和观察年份之间没有 1:1 的对应关系,则您可能会得到错误的结果。

假设 Year 和 year-of-observation 没有关系,如果它们映射到同一个表的相同查找列(无别名,无角色识别),MicroStrategy 将只对两个属性使用一次查找,因此不需要过滤器.

一句忠告

无论如何,将不同的逻辑实体(如两个属性)分开是一种很好的做法,但是(可能不是你的情况)当它们是相同的东西时,只需使用一个。

先进水平

另一种可能的解决方案是使用关系:您可以尝试将 Year 设为 year-of-observation 的父级,然后在缺少的报告中包含 year 属性,但如果这真的可行取决于您的架构,您可以结束如果您已经有孩子年和观察年,则使用混乱的层次结构路径。

交叉连接错误

如果您遵循解决方案 #1,您可能会收到与交叉连接相关的错误。发生这种情况是因为 SQL 引擎试图保护您免受交叉连接的影响(通常是一件坏事)。

要禁用此错误,您需要更改报告的以下 VLDB 属性(或者,如果您有许多带有交叉连接的报告,您也可以在项目级别更改它):

VLDB Properties -> Joins -> Cartesian Joins Warning
于 2015-04-30T11:22:46.123 回答