在 MDX 中的不同时间段内并排获取相同度量值的两列
Getting the same measure in two columns side-by-side for different time periods in MDX
需要在 MDX 中生成特定的输出,我正在努力生成所需的结果。我正在尝试使用 ADW Cube 构建示例。
我需要生成一个 table,其中有三列:
- 一些类别(本例中为城市,但此列将
最终根据 SSRS 中选定的参数动态更改),
- 特定月份的类别(在此示例中为 Internet 销售)的一些度量
- 与第二列中相同的度量,但针对上个月
table 应根据第二列中的度量仅过滤到前三项最高的项目。
下面是我到目前为止得到的一些简单的静态示例,但基本上是这样的想法:用户在参数中选择一些值,这些值将对 table 将被过滤的数据进行子集化(表示为[国家](示例中的加拿大))。然后,他将在他想要的结果的某个层次结构中选择粒度级别(在示例中由 [City] 表示)。然后他将选择所需的时间段(特定 [年] 和 [月])。根据 运行 查询,
他应该得到如下类似的 table(根据第二列,他获得了前三名的结果):
Category Internet Sales Amount (CurrentPeriod) Internet Sales Amount (PreviousPeriod)
Langford ,468.39 null
Vancouver ,291.48 ,447.26
Sooke ,563.01 null
第一列表示选择的粒度。第二列代表给定项目的所选年月组合的 Internet 销售额,第三列代表所选组合前一个月的 Internet 销售额。
这是我到目前为止得到的。我能够生成 table 的前两列,但我很难将第三列也包括在内。我来自 SQL,对 MDX 还很陌生,所以如果我问的问题看起来很简单,或者我目前的方法与应该如何完成相去甚远,请多多包涵。
SELECT [Measures].[Internet Sales Amount] ON 0,
TopCount
({[Customer].[City].[City].Members}
, 3
, [Measures].[Internet Sales Amount]
) ON 1
FROM [Adventure Works]
WHERE ( [Customer].[Country].&[Canada],
[Date].[Calendar Year].&[2007],
[Date].[Month of Year].&[12] )
好的,我设法解决了这个简化的例子。
WITH
MEMBER [Measures].[SalesPrevMth] AS
(
[Measures].[Internet Sales Amount]
,[Date].[Calendar].CurrentMember.PrevMember
)
SELECT
NON EMPTY
{
[Measures].[Internet Sales Amount]
,[Measures].[SalesPrevMth]
} ON COLUMNS
,NON EMPTY
TopCount
({
[Customer].[City].[City].Members
*
[Date].[Calendar].[Month].ALLMEMBERS
}, 3, [Measures].[Internet Sales Amount]) ON ROWS
FROM
(
SELECT
[Date].[Calendar].[Month].&[2007]&[12] ON COLUMNS
FROM [Adventure Works]
)
WHERE [Customer].[Country].&[Canada];
需要在 MDX 中生成特定的输出,我正在努力生成所需的结果。我正在尝试使用 ADW Cube 构建示例。
我需要生成一个 table,其中有三列:
- 一些类别(本例中为城市,但此列将 最终根据 SSRS 中选定的参数动态更改),
- 特定月份的类别(在此示例中为 Internet 销售)的一些度量
- 与第二列中相同的度量,但针对上个月
table 应根据第二列中的度量仅过滤到前三项最高的项目。
下面是我到目前为止得到的一些简单的静态示例,但基本上是这样的想法:用户在参数中选择一些值,这些值将对 table 将被过滤的数据进行子集化(表示为[国家](示例中的加拿大))。然后,他将在他想要的结果的某个层次结构中选择粒度级别(在示例中由 [City] 表示)。然后他将选择所需的时间段(特定 [年] 和 [月])。根据 运行 查询, 他应该得到如下类似的 table(根据第二列,他获得了前三名的结果):
Category Internet Sales Amount (CurrentPeriod) Internet Sales Amount (PreviousPeriod)
Langford ,468.39 null
Vancouver ,291.48 ,447.26
Sooke ,563.01 null
第一列表示选择的粒度。第二列代表给定项目的所选年月组合的 Internet 销售额,第三列代表所选组合前一个月的 Internet 销售额。
这是我到目前为止得到的。我能够生成 table 的前两列,但我很难将第三列也包括在内。我来自 SQL,对 MDX 还很陌生,所以如果我问的问题看起来很简单,或者我目前的方法与应该如何完成相去甚远,请多多包涵。
SELECT [Measures].[Internet Sales Amount] ON 0,
TopCount
({[Customer].[City].[City].Members}
, 3
, [Measures].[Internet Sales Amount]
) ON 1
FROM [Adventure Works]
WHERE ( [Customer].[Country].&[Canada],
[Date].[Calendar Year].&[2007],
[Date].[Month of Year].&[12] )
好的,我设法解决了这个简化的例子。
WITH
MEMBER [Measures].[SalesPrevMth] AS
(
[Measures].[Internet Sales Amount]
,[Date].[Calendar].CurrentMember.PrevMember
)
SELECT
NON EMPTY
{
[Measures].[Internet Sales Amount]
,[Measures].[SalesPrevMth]
} ON COLUMNS
,NON EMPTY
TopCount
({
[Customer].[City].[City].Members
*
[Date].[Calendar].[Month].ALLMEMBERS
}, 3, [Measures].[Internet Sales Amount]) ON ROWS
FROM
(
SELECT
[Date].[Calendar].[Month].&[2007]&[12] ON COLUMNS
FROM [Adventure Works]
)
WHERE [Customer].[Country].&[Canada];