疯狂 - 需要有关使用SSAS 2012构建报告POC的建议

时间:2014-01-18 21:30:45

标签: sql-server database-design reporting-services ssas data-warehouse

我提前为这篇文章的冗长道歉。我永远不知道什么是重要的所以我通常写的不仅仅是需要。

一点背景

我有一个半星期的时间来创建一个POC,用于在面向客户端的报告后面使用OLAP。我们并不致力于提供报告工具,而且我们拥有大量数据,因此OLAP似乎有意义(?)。现在我们使用SSRS 2005来对付有点扁平化的报告数据库,但我们有一个新客户要求我们快速成熟。

10年前,我与SSAS合作 - 构建了多维数据集和简单的数据透视表 - 没有MDX。我对SSRS非常了不起,但是对于关系来源。我们没有维度模型所以我必须模拟一个。我打算在SSAS 2012中进行模拟(针对SQL 2005 DB)。

POC的要求

  

报告有关多个属性的医生表现的信息

     

尺寸:

     
      
  • 时间(日期/月/年)
  •   
  • 医师
  •   
  • 医师专长(1:M与医师)
  •   
  • 隶属关系1>关联2>隶属关系3(等级,1:M与医生)
  •   
  • 注册表> HEDIS测量(层次结构,M:M与医生,HEDIS以下因为“测量”得到   混乱)
  •   
     

度量(最低粒度是医生/日期/ HEDIS - 在某些时候需要钻取患者数据):

     
      
  • 患者人群
  •   
  • 患者(患者人群的一部分)
  •   
  • 得分(这是我们的KPI - 患者所见/患者的商数%   人口)
  •   
  • 四分位数(基于分数;针对医师,附属机构1,2和2测量)。   3,HEDIS和专业日/月/年)
  •   

我创建了一个功能性多维数据集,其中包含所有维度和两个附加度量(患者人群和患者)。我去添加Score和Quartile并冻结了。现在我处于分析瘫痪模式和恐慌。我不知道MDX是如此不直观(或者我可能只是密集),并且计算四分位数会是一个问题!

所以现在我正试图在视图和静态表的数据库中放置一些东西。在维度建模方面,我很年轻。我需要设计表格,以便实现最快,最简单的多维数据集开发和报告周转。它不需要是完美的,但是我还没有看到这样的项目一直都是如此,我希望有一些关于如何避免在多维数据集和报表开发过程中遇到明显“陷阱”的建议,因为糟糕的数据库设计选择。有人可以给我一个概括性的“你会在我的鞋子里做什么”吗?

以下是我心理呕吐形式的一些问题/疑虑

所以我有完全添加和非添加措施,对吧? (我甚至不确定得分是多少 - 我不认为它有资格作为半添加剂?)。无论如何,我对于是否将这些非完全加法指标存储在度量维度或多个事实表中以不同的粒度进行了讨论。

似乎事实表路由可能不那么混乱,但是然后每个事实表都有自己的多维数据集并向下钻取/跨越将通过Excel或SSRS中的某种链接来完成?例如,您正在按年度HEDIS四分位数查看YTD医师分数...如果他们在不同的立方体中,您如何深入了解每月HEDIS四分位数的MTD医师分数?或者他们会在不同的测量组中的同一个多维数据集中......?或者,如果我使用Measure Dimension并使用单个立方体,我如何保护用户免受上述情况的影响......他们通过年度HEDIS四分位查看YTD医师分数,然后用HEDIS四分位替换年度HEDIS四分位数 - 怎么这样的事情被阻止了?或者这种情况是否合法?

我喜欢把它放在SSRS中,我可以通过参数控制事物但是对于OLAP源来说有多难?更不用说互动图了吗?

我现在很困惑,我甚至都不知道这些问题是否有意义。任何帮助(甚至链接到您发现有用的简洁文档)都会很棒!

2 个答案:

答案 0 :(得分:0)

好的,我发现一篇文章有​​针对性地简明扼要地回答了我关于不可聚合度量的大多数唠叨问题,然后是YouTube视频,显示了从OLAP多维数据集创建SSRS报告实际上是多么容易。

这里是他们的后代:

文章 - http://www.packtpub.com/article/measures-and-measure-groups-microsoft-analysis-services-part2 视频 - http://www.youtube.com/watch?v=o2N3ZCinpPs

我想我将以不同的粒度创建多个事实表(现在的视图),并将每个事件表作为自己的度量组引入到多维数据集中,将其链接到不同细节级别的符合维度。然后,对于报告层,我将使用上面标题为“非可聚合度量:不同方法”的链接中的技巧。

看起来分数应该只是创建针对人口和看到的计算度量的简单问题。

我将通过模拟维度来处理四分位数,然后在每个相关粒度上计算DB中的四分位数并将该数字存储在事实中。然后我将使用该数字作为加入SSAS中四分位数维度的关键。似乎快速而直接。

我想将这个开放一天左右,以防万一有人不同意这种做法?

答案 1 :(得分:0)

一些想法:

  • 我会将physican,专业和附属关系放在一个维度上,将“physican”称为单独的属性,并从附属关系构建用户层次结构。
  • 这为您留下了三个维度:时间,physican和注册表(我不理解您的描述中的详细信息)和一个事实表。
  • 事实表应包含两个措施“患者人群”和“患者看到”。 “患者人群”是每个医生,时间和登记处的患者数量。我认为它不会随着时间的推移而聚合。您必须决定在一段时间内使用哪种聚合,例如: G。 LastChild,我。即每个月显示其最后一天的价值,每年显示其上个月的价值等。对于“看过的病人”,我不确定你想做什么:这应该是不同的患者吗?在这种情况下,您无法跨时间汇总。您必须拥有患者级别的数据,并通过与主要事实表的多对多关系将患者维度(可能只包括患者ID和最终用户不可见)链接起来。然后该措施可以是DistinctCount。
  • “得分”将是一个简单的计算指标 - 只需[Measures].[patients seen] / [Measures].[patients population]
  • YTD和MAT通常也作为MDX中的计算成员实现。最好的解决方案是使用实用程序维度(参见例如http://sqlblog.com/blogs/marco_russo/archive/2007/09/02/datetool-dimension-an-alternative-time-intelligence-implementation.aspx)。但是对于POC,您也可以在WITH clause的每个查询库中实现它:使用YtdParallelPeriod函数将其定义为时间层次结构的成员。
  • 对于Quartile,我认为最好的方法 - 至少对于POC - 在您在SSRS中编写的MDX中的查询特定WITH子句中实现这一点。我会对你想要计算四分位数的集合进行排名,然后对四个四分位数使用CASE表达式和四个WHEN子句,类似于“WHEN rank> = count / 4 and rank” < count / 2 THEN“Q2”,你必须决定如何准确处理边界情况。