SSAS中的测量日期和时间范围

SSAS中的测量日期和时间范围,ssas,Ssas,我正在构建一个SSAS多维数据集,其中包括我希望用户能够在分析中使用的几个时间维度。例如,假设我有以下日期(想象一下某种工作项跟踪系统) 创建日期 开始日期 截止日期 最后编辑日期 用户可能希望执行以下操作 查看项目创建日期与启动日期之间的平均天数 查看项目启动和关闭之间的最大小时数 请参见开始日期和结束日期之间的最小小时数 等等 简而言之,他们希望能够看到大多数(如果不是全部)日期之间的日期/时间比较 我如何在一个有很多日期的系统中提供这一点?(最好不要添加大量“X和Y之间的差异”字段

我正在构建一个SSAS多维数据集,其中包括我希望用户能够在分析中使用的几个时间维度。例如,假设我有以下日期(想象一下某种工作项跟踪系统)

  • 创建日期
  • 开始日期
  • 截止日期
  • 最后编辑日期
用户可能希望执行以下操作

  • 查看项目创建日期与启动日期之间的平均天数
  • 查看项目启动和关闭之间的最大小时数
  • 请参见开始日期和结束日期之间的最小小时数
  • 等等
简而言之,他们希望能够看到大多数(如果不是全部)日期之间的日期/时间比较


我如何在一个有很多日期的系统中提供这一点?(最好不要添加大量“X和Y之间的差异”字段)

保留它

一个简单的方法是只实施这些措施,因为对于四种日期类型,只有六种不同的差异,并且应用三种不同的聚合,最终会得到18种措施,这是合理的。如果您使用度量值的“Display Folder”属性(并且您的客户机工具使用这些属性),我认为用户甚至可以轻松找到40或50个度量值。对于suer来说,有些组合从业务的角度来看是没有意义的,即使您可以从技术上实现它们

实用程序属性

另一种方法是从维度的角度来看这一点,因为您正在使用多维多维多维数据集:创建具有三个属性的实用工具维度:

  • “开始日期”将有四个成员“创建”、“开始”、“结束”和“最后编辑”
  • “截止日期”每个日期类型也有一个成员
  • “聚合”将有三个成员“最小值”、“最大值”和“平均值”
此维度可以与任何度量值组完全无关。它所基于的表将包含这些属性的所有(有效)组合

您将只使用一个度量值“时间差”,它可能是一个经过计算的度量值

可能以最终用户易于理解的方式重命名属性和成员以及度量值

然后,您将在计算脚本中以检查所有三个属性的
CurrentMember
的方式实现度量值“时间差”的计算,然后执行适当的计算。 这可能类似于:

CASE
     WHEN IsError([Utility].[From Date].CurrentMember) // multi selection
       OR [Utility].[From Date].CurrentMember IS [Utility].[From Date].[All]
       OR IsError([Utility].[To Date].CurrentMember)
       OR [Utility].[To Date].CurrentMember IS [Utility].[To Date].[All]
       OR IsError([Utility].[Aggregation].CurrentMember)
       OR [Utility].[Aggregation].CurrentMember IS [Utility].[Aggregation].[All] THEN
          NULL // these special cases are invalid
     ELSE
         CASE
             WHEN [Utility].[Aggregation].CurrentMember IS [Utility].[Aggregation].[Minimum] THEN
                 Min(Leaves(), 
                     CASE
                         WHEN [Utility].[To Date].CurrentMember IS [Utility].[To Date].[Started] THEN
                              Measures.StartDate
                         WHEN [Utility].[To Date].CurrentMember IS [Utility].[To Date].[Closed]
                              Measures.ClosedDate
                         ...
                      END
                      -
                     CASE
                         WHEN [Utility].[From Date].CurrentMember IS [Utility].[From Date].[Started] THEN
                              Measures.StartDate
                         WHEN [Utility].[From Date].CurrentMember IS [Utility].[From Date].[Closed]
                              Measures.ClosedDate
                         ...
                      END
                      )
             WHEN [Utility].[Aggregation].CurrentMember IS [Utility].[Aggregation].[Minimum] THEN
                 Max(Leaves(), 
                     ... // repeat code from above
                    )
             WHEN [Utility].[Aggregation].CurrentMember IS [Utility].[Aggregation].[Average] THEN
                 Avg(Leaves(), 
                     ... // repeat code from above
                    )
         END
END
这段代码可能需要一些性能调整,具体取决于多维数据集的大小,但您应该知道:只需检查属性的所有情况并实现适当的计算

第二种方法的缺点是,用户需要一些教育,对于“时间差”度量,他们必须在每个查询中添加三个属性,并根据需要应用选择。根据客户机工具的不同,不可能有三个单独选择的属性,例如。G在两列中,如

Attrib |  Col 1   |   Col 2
From   | Created  |  Started
To     | Started  |  Closed
Agg    | Min      |   Max
但仅限于选定成员的交叉乘积

对于实用程序属性的多选或全无选(即
CurrentMember
all
成员),您必须小心/向用户提供可理解的消息

在所有缺点之后,下面描述如何将效用维度方法应用于不同的主题,在这种情况下,时间计算,如同比增长和年初至今:

混合方法


最后,您可以使用一种混合的方法,即。G为所有日期类型组合创建度量值,但为聚合创建实用程序属性。

我将基于现有事实创建一个新事实,每个现有事实行、每个有意义的日期组合各有一行。例如,1行表示“创建日期到结束日期”,另一行表示“创建日期到最后编辑日期”。我会将此限制为有意义的组合,例如,“结束日期到创建日期”没有行。可能还有其他有用的组合将日期与“今天”进行比较

我将使用一个视图构建它,其中包含一系列SELECT和UNION ALL子句——每个有意义的日期组合一个。每个SELECT子句的设计都将返回现有事实数据中的所有行和列,再加上一个字符列来描述有意义的日期组合,再加上一个以天为单位的datediff SQL计算,另一个以小时为单位

然后我会将这个新视图添加到多维数据集中,“复制”(我希望)当前事实中的维度关系。我将创建datediff的平均值、最小值和最大值变量,以天和小时为单位(6个度量单位)


最后,我将基于列构建一个事实(退化/垃圾)维度来描述有意义的日期组合。

SSA是表格还是多维?如果我计算正确,一组四个元素中有六个不同的两元素子集,即。E这将有六个不同之处。这比X和Y“字段”之间的“数亿”差稍微小一些即使使用三种不同的聚合(
max
min
avg
)将这些度量值增加三倍,最终也只有18个度量值,在我看来,这是一个立方体的非常合理的度量值数。@mikeMultidimensional@FrankPl当你这样说的时候,它看起来并不那么糟糕,尽管随着日期的增加,情况会迅速恶化(我们目前有5个日期,这意味着30个指标,6个日期将意味着45个指标)。有多少人会认为这是不合理的?从可用性的角度来看,30项指标似乎相当高。你的实用方法听起来很有趣,但我很难理解如何在投标中创建它。效用维度如何与