Sql server 2005 SSAS:命名查询

Sql server 2005 SSAS:命名查询,sql-server-2005,cube,ssas,Sql Server 2005,Cube,Ssas,我必须首先承认,我对AnalysisServices不熟悉,但现在必须用新维度扩展现有的复杂多维数据集。因此,如果不说我甚至没有一个如何开始的计划,就很难说出我的问题在哪里。好的,我会告诉你我想要实现什么 给定的是一个带有“Returns”的Datasourceview。其表述是: CASE WHEN fimaxActionCode IN (1, 2, 3, 4, 5, 8, 9, 12, 14, 17, 18, 20, 21, 22, 23, 24, 25, 30, 31, 32, 35) T

我必须首先承认,我对AnalysisServices不熟悉,但现在必须用新维度扩展现有的复杂多维数据集。因此,如果不说我甚至没有一个如何开始的计划,就很难说出我的问题在哪里。好的,我会告诉你我想要实现什么

给定的是一个带有“Returns”的Datasourceview。其表述是:

CASE WHEN fimaxActionCode IN (1, 2, 3, 4, 5, 8, 9, 12, 14, 17, 18, 20, 21, 22, 23, 24, 25, 30, 31, 32, 35) THEN
 'yes'
ELSE
 'no'
END
fiMaxActionCode是一个Foreignkey,“Returns”的旧规则是,当声明(main measuregroup)的maxActionCode是上述代码之一时,它就是一个返回。 新规则是,如果索赔的maxActioncode是上述代码之一,但之前没有使用fimaxActionCode的索赔(8、10、11、13、19、23、24、26、27、28、29、30、33、34、36、37),则索赔为返回。以前的索赔是具有相同SSN\U编号且维修完成日期<此索赔的前(1)个索赔。 现在我的问题是(希望所有人都明白我的意思): 如何创建这个新维度?我的第一个想法是创建一个新的命名查询“PreviousClaim”:

  SELECT     TOP (1) claim.iddata as ClaimID,PreviousClaim.idData as prevClaimID, PreviousClaim.fimaxActionCode, Claim.Repair_Completion_Date as ClaimRepDate, PreviousClaim.Repair_Completion_Date as PrevClaimRepDate
FROM         tabData AS PreviousClaim LEFT OUTER JOIN
                      tabData AS Claim ON PreviousClaim.idData <> Claim.idData
WHERE     (PreviousClaim.fimaxActionCode IN (8, 10, 11, 13, 19, 23, 24, 26, 27, 28, 29, 30, 33, 34, 36, 37)) AND (PreviousClaim.fiClaimStatus IN (1, 4, 254, 255, 6)) 
                      AND (PreviousClaim.SSN_Number = Claim.SSN_Number) AND (PreviousClaim.Repair_Completion_Date < Claim.Repair_Completion_Date)
ORDER BY PreviousClaim.Repair_Completion_Date DESC;
问候,,
Tim

如何将此数据加载到实际索赔维度(或其名称)?我询问的原因是,通过在加载过程中添加此规则,而不是编写MDX计算成员,可以更好地解决此任务

由于您必须回过头来查看数据,以确定该单元之前是否对fimaxActionCode提出过索赔,这可能会使MDX变得很糟糕,因此您可以在加载期间轻松地将其分离出来,并相应地将其拆分(即,如果其以前有过权利要求或以前没有权利要求,并且属于下列代码之一:8、10、11、13、19、23、24、26、27、28、29、30、33、34、36、37)基本上,你会创造一个缓慢变化的维度,因为我可能假设这些声明也有某种时间关系,如果它发生了,这个声明是什么时候发生的,等等

通过我建议的方法解决这个问题,您可以使用相同的维度,只需添加额外的字段,这些字段将表示该项目是否为索赔,如果它不属于“新”退货标准,您只需保留记录即可


有意义吗?

如何将此数据加载到实际索赔维度(或其名称)中?我问的原因是,通过在加载过程中添加此规则,而不是编写MDX计算成员,可以更好地解决此任务

由于您必须回过头来查看数据,以确定该单元之前是否对fimaxActionCode提出过索赔,这可能会使MDX变得很糟糕,因此您可以在加载期间轻松地将其分离出来,并相应地将其拆分(即,如果其以前有过权利要求或以前没有权利要求,并且属于下列代码之一:8、10、11、13、19、23、24、26、27、28、29、30、33、34、36、37)基本上,你会创造一个缓慢变化的维度,因为我可能假设这些声明也有某种时间关系,如果它发生了,这个声明是什么时候发生的,等等

通过我建议的方法解决这个问题,您可以使用相同的维度,只需添加额外的字段,这些字段将表示该项目是否为索赔,如果它不属于“新”退货标准,您只需保留记录即可


有意义吗?

你说的“加载过程”是什么意思?多维数据集的处理或向关系数据库中插入新行的过程?数据库导入是一个每晚运行的windows服务,可以使用此功能对其进行扩展。此外,每天早晨在重建多维数据集之前都会执行一个存储过程。这将是一个很好的解决方案place,不是吗?顺便说一句,旧维度不应该被修改,必须共存。无论如何,谢谢。@Tim:我可能会说存储过程是最容易进行这些更改的地方,而不是更改windows服务。因为您无法更改当前维度(不确定为什么)然后,您必须向事实表中添加一个新键,以指向根据帖子中所述的新规则填充的新维度。旧的返回维度应该仍然存在,以便能够比较新的返回规则和旧的返回规则。我将尝试使用存储过程方法。但这意味着它必须每天早上更新整个表(>10Mio声明)?!感谢在我的事实表中使用新键的提示,因为我有时会在ssas中遇到一些基本问题;)我想我会将此列设置为返回状态(中间返回、结论性返回、无返回),因此我只需检查存储过程中的“中间返回”,并在截止日期将其更新为结论性返回(每个月一次)。@Tim:如果有超过1000万行,我会确保只更新那些已经更改的行。因此,如果这意味着要进行单独的更新,那么就这样做,因为如果你只更新所有内容,那么这将真的减慢过程。你说的“加载过程”是什么意思?多维数据集的处理或向关系数据库中插入新行的过程?数据库导入是一个每晚运行的windows服务,可以使用此功能对其进行扩展。此外,每天早晨在重建多维数据集之前都会执行一个存储过程。这将是一个很好的解决方案place,不是吗?顺便说一句,旧维度不应该被修改,必须共存。无论如何,谢谢。@Tim:我可能会说存储过程是最容易进行这些更改的地方,而不是更改windows服务。因为您无法更改当前维度(不确定为什么)然后,您必须向事实表中添加一个新键,以指向根据帖子中所述的新规则填充的新维度。旧的返回维度应该仍然存在,以便能够比较新的返回规则和旧的返回规则。我将尝试使用存储过程方法。但这意味着它必须每天早上更新整个表(>10Mi
AND (Claim.iddata=@ClaimID)