Microstrategy 文档 - 匹配具有相同值的不同属性
Microstrategy documents - matching differen attributes with the same value
我正在构建一个外观类似于仪表板的文档。
我正在使用 select 年份的单选按钮。
遗憾的是,在我的一个数据集中,属性年份是另一个属性,即使包含完全相同的值。
如何解决根据文档中的值匹配属性的问题?
基本上我想单击单选按钮 2013 和 select 包含名为 year 的属性的 graph1 和包含名为 year-of-observation 的属性的 graph2 中的值 2013。
我照你说的做了。
我在包含观察年份的报告中添加了高级资格过滤器:
[Year]@ID = [Obs-Year]@ID
然后我在报告中添加了属性年份。
但是当我尝试执行报告时出现以下错误:
Report: xxxxxxxxxxx
Job: 8600588
Status: Execution failed
Error: SQL Generation Complete
QueryEngine encountered error: The report contains a cross join in pass 1 between tables ANSWERS and YEAR. Execution is aborted per the cartesian join setting..
Error in Process method of Component: QueryEngineServer, Project xxxxxx , Job 8600588, Error Code= -2147212544.
Starting Time: 15:13:50
你不能...或者你可以尝试在报告中使用 year-of-observation
添加属性 year 并放置一个过滤器 year = year-of-observation,此时可能会发生很多事情:
如果这两个属性没有关系,查找 table for year 将添加到您的交叉连接中的报表查询中,但您不用担心,因为过滤器会限制结果正确。
如果其中一个属性是另一个属性的 parent,则您不会进行交叉联接,然后删除过滤器,但仔细检查结果(以防万一)
如果 Year 已经映射到您报告使用的事实 table 之一,并且年份和 year-of-observation 之间没有 1:1 对应关系,您可以有错误的结果。
还有
假设 Year 和 year-of-observation 没有关系,如果它们映射到相同 table 的相同查找列(没有别名,没有角色识别)MicroStrategy 将只对两者使用一个查找属性,因此不需要过滤器。
忠告
无论如何,将不同的逻辑实体(如两个属性)分开是一种很好的做法,但是(可能不是你的情况)当它们是同一事物时,只使用一个。
高级
另一种可能的解决方案是利用关系:您可以尝试将年份 parent 设为 year-of-observation,然后在报表中包含缺少的年份属性,但如果确实如此可行取决于您的模式,如果您已经有 children 的 Year 和 Year-of-observation.
,您最终可能会得到混乱的层次结构路径
交叉连接错误
如果您遵循解决方案 #1,您可能会收到与交叉连接相关的错误。发生这种情况是因为 SQL 引擎试图保护您免受交叉连接(通常是一件坏事)。
要禁用此错误,您需要为报告更改以下 VLDB 属性(或者如果您有许多使用交叉连接的报告,您也可以在项目级别更改它):
VLDB Properties -> Joins -> Cartesian Joins Warning
我正在构建一个外观类似于仪表板的文档。 我正在使用 select 年份的单选按钮。 遗憾的是,在我的一个数据集中,属性年份是另一个属性,即使包含完全相同的值。 如何解决根据文档中的值匹配属性的问题?
基本上我想单击单选按钮 2013 和 select 包含名为 year 的属性的 graph1 和包含名为 year-of-observation 的属性的 graph2 中的值 2013。
我照你说的做了。
我在包含观察年份的报告中添加了高级资格过滤器:
[Year]@ID = [Obs-Year]@ID
然后我在报告中添加了属性年份。
但是当我尝试执行报告时出现以下错误:
Report: xxxxxxxxxxx
Job: 8600588
Status: Execution failed
Error: SQL Generation Complete QueryEngine encountered error: The report contains a cross join in pass 1 between tables ANSWERS and YEAR. Execution is aborted per the cartesian join setting.. Error in Process method of Component: QueryEngineServer, Project xxxxxx , Job 8600588, Error Code= -2147212544.
Starting Time: 15:13:50
你不能...或者你可以尝试在报告中使用 year-of-observation
添加属性 year 并放置一个过滤器 year = year-of-observation,此时可能会发生很多事情:
如果这两个属性没有关系,查找 table for year 将添加到您的交叉连接中的报表查询中,但您不用担心,因为过滤器会限制结果正确。
如果其中一个属性是另一个属性的 parent,则您不会进行交叉联接,然后删除过滤器,但仔细检查结果(以防万一)
如果 Year 已经映射到您报告使用的事实 table 之一,并且年份和 year-of-observation 之间没有 1:1 对应关系,您可以有错误的结果。
还有
假设 Year 和 year-of-observation 没有关系,如果它们映射到相同 table 的相同查找列(没有别名,没有角色识别)MicroStrategy 将只对两者使用一个查找属性,因此不需要过滤器。
忠告
无论如何,将不同的逻辑实体(如两个属性)分开是一种很好的做法,但是(可能不是你的情况)当它们是同一事物时,只使用一个。
高级
另一种可能的解决方案是利用关系:您可以尝试将年份 parent 设为 year-of-observation,然后在报表中包含缺少的年份属性,但如果确实如此可行取决于您的模式,如果您已经有 children 的 Year 和 Year-of-observation.
,您最终可能会得到混乱的层次结构路径交叉连接错误
如果您遵循解决方案 #1,您可能会收到与交叉连接相关的错误。发生这种情况是因为 SQL 引擎试图保护您免受交叉连接(通常是一件坏事)。
要禁用此错误,您需要为报告更改以下 VLDB 属性(或者如果您有许多使用交叉连接的报告,您也可以在项目级别更改它):
VLDB Properties -> Joins -> Cartesian Joins Warning