为 SSRS 图表报告构建 MDX 查询
Building an MDX query for SSRS Chart Report
我正在创建一个数据集,用于 SSRS 折线图报告,该报告与使用 MDX 的 Analysis Services 多维数据集相对应。我们在 Visual Studio 2008 年使用 SQL Server 2008 R2 和 BIDS。作为 MDX 的不常用户,我正在为如何提取我需要的数据而苦恼。
目标:
创建一个包含 4 条线的 SSRS 折线图:
1. 当年的管理数字(例如 2016 年)
2. 过去一年的管理数字(2015 年)
3. 过去两年的管理数字 (2014)
4. 当年预测估计数字(2016)
问题:
我创建了一个查询来获取正确的数据,但没有放在一行中来构建图表。这是我的查询:
with
member [Measures].[ ImpValueCurrQtr] as
IIF([Measures].[DIVIDE NUMBER]=0, null, [Measures].[SUMOF IMP VALUE]/[Measures].[DIVIDE NUMBER])
member
Measures.TrendPastYear as ([Measures].[ImpValueCurrQtr],
ParallelPeriod([DimDate].[BCast Qtr Week Number].[BCast Qtr], 4, [DimDate].[BCast Qtr Week Number].CurrentMember))
member
Measures.TrendPast2Years as ([Measures].[ImpValueCurrQtr],
ParallelPeriod([DimDate].[BCast Qtr Week Number].[BCast Qtr], 8, [DimDate].[BCast Qtr Week Number].CurrentMember))
SELECT
NON EMPTY {
[Measures].[ImpValueCurrQtr],
[Measures].[TrendPastYear],
[Measures].[TrendPast2Years]
} ON COLUMNS,
NON EMPTY { (
[DimNetwork].[Network].[Network].ALLMEMBERS *
[DimDate].[BCast Qtr Week Number].[BCast Qtr Week Number].ALLMEMBERS *
[DimDemograph].[Demo Name].[Demo Name].ALLMEMBERS *
[DimDelImpDataType].[Data Type Name].[Data Type Name].ALLMEMBERS *
[DimDelImpsSource].[DEL IMPS SOURCE ID].[DEL IMPS SOURCE ID].ALLMEMBERS *
[DimDelImpsSource].[Del Imps Source].[Del Imps Source].ALLMEMBERS *
[DimExecDaypartConformed].[Network Daypart].[Daypart Name].ALLMEMBERS
) }
ON ROWS
FROM ( SELECT ( {
[DimExecDaypartConformed].[Network Daypart].[Daypart Name].&[YYY]&[TPC] } ) ON COLUMNS
FROM ( SELECT ({[DimDelImpsSource].[ SOURCE ID].&[1],[DimDelImpsSource].[ SOURCE ID].&[10]}) ON COLUMNS
FROM ( SELECT ([DimDemograph].[Demo Name].&[A25-54] ) ON COLUMNS
FROM ( SELECT ([DimDelImpDataType].[Data Type Name].&[C3] ) ON COLUMNS
FROM ( SELECT ([DimDate].[BCast Qtr Week Number].[BCast Qtr].&[Q116] ) ON COLUMNS
FROM ( SELECT ([DimNetwork].[Network].&[XXX] ) ON COLUMNS
FROM [TRACCube]))))));
子选择中的网络、BCast Qtr、数据类型名称和演示名称是报告的参数,为此插图进行了硬编码。 SOURCE ID 和 Daypart Names 是硬编码的常量值。
结果有正确的数据,但在两行中...
我需要做的是将预测估计值的数字放在同一行上,以便图表可以看到所有 4 个数据点。像这样...
如果我简单地取出源 ID 和源名称,查询将提取多维数据集中的所有 8 个数据源,并且数字相距甚远。我可以将我的计算成员限制为类似于多维数据集中的范围语句的某个源 ID 吗?然后我可以为预测估计创建第四个计算成员。
感谢您的帮助!
如果我理解正确的话,将特定成员移动到措施中应该相对容易:
with
member [Measures].[ ImpValueCurrQtr] as
IIF(
[Measures].[DIVIDE NUMBER]=0
, null
, DIVIDE(
//>>tuple start>>
(
[Measures].[SUMOF IMP VALUE]
,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Stewardship]
)
//>>tuple end>>
,[Measures].[DIVIDE NUMBER]
)
)
如果您希望将度量限制为仅适用于层次结构中的特定成员,则可以在其他度量中使用上述内容。
另一种更漂亮的方法是只放置元组 ON COLUMNS
:
WITH
...
...
SELECT
NON EMPTY {
( [Measures].[ImpValueCurrQtr]
,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Stewardship] )
,( [Measures].[TrendPastYear]
,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Stewardship] )
,( [Measures].[TrendPast2Years]
,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Stewardship] )
,( [Measures].[ImpValueCurrQtr]
,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Forecast] )
} ON COLUMNS,
NON EMPTY { (
[DimNetwork].[Network].[Network].ALLMEMBERS *
[DimDate].[BCast Qtr Week Number].[BCast Qtr Week Number].ALLMEMBERS *
[DimDemograph].[Demo Name].[Demo Name].ALLMEMBERS *
[DimDelImpDataType].[Data Type Name].[Data Type Name].ALLMEMBERS *
[DimExecDaypartConformed].[Network Daypart].[Daypart Name].ALLMEMBERS
) }
ON ROWS
FROM
...
我正在创建一个数据集,用于 SSRS 折线图报告,该报告与使用 MDX 的 Analysis Services 多维数据集相对应。我们在 Visual Studio 2008 年使用 SQL Server 2008 R2 和 BIDS。作为 MDX 的不常用户,我正在为如何提取我需要的数据而苦恼。
目标:
创建一个包含 4 条线的 SSRS 折线图:
1. 当年的管理数字(例如 2016 年)
2. 过去一年的管理数字(2015 年)
3. 过去两年的管理数字 (2014)
4. 当年预测估计数字(2016)
问题: 我创建了一个查询来获取正确的数据,但没有放在一行中来构建图表。这是我的查询:
with
member [Measures].[ ImpValueCurrQtr] as
IIF([Measures].[DIVIDE NUMBER]=0, null, [Measures].[SUMOF IMP VALUE]/[Measures].[DIVIDE NUMBER])
member
Measures.TrendPastYear as ([Measures].[ImpValueCurrQtr],
ParallelPeriod([DimDate].[BCast Qtr Week Number].[BCast Qtr], 4, [DimDate].[BCast Qtr Week Number].CurrentMember))
member
Measures.TrendPast2Years as ([Measures].[ImpValueCurrQtr],
ParallelPeriod([DimDate].[BCast Qtr Week Number].[BCast Qtr], 8, [DimDate].[BCast Qtr Week Number].CurrentMember))
SELECT
NON EMPTY {
[Measures].[ImpValueCurrQtr],
[Measures].[TrendPastYear],
[Measures].[TrendPast2Years]
} ON COLUMNS,
NON EMPTY { (
[DimNetwork].[Network].[Network].ALLMEMBERS *
[DimDate].[BCast Qtr Week Number].[BCast Qtr Week Number].ALLMEMBERS *
[DimDemograph].[Demo Name].[Demo Name].ALLMEMBERS *
[DimDelImpDataType].[Data Type Name].[Data Type Name].ALLMEMBERS *
[DimDelImpsSource].[DEL IMPS SOURCE ID].[DEL IMPS SOURCE ID].ALLMEMBERS *
[DimDelImpsSource].[Del Imps Source].[Del Imps Source].ALLMEMBERS *
[DimExecDaypartConformed].[Network Daypart].[Daypart Name].ALLMEMBERS
) }
ON ROWS
FROM ( SELECT ( {
[DimExecDaypartConformed].[Network Daypart].[Daypart Name].&[YYY]&[TPC] } ) ON COLUMNS
FROM ( SELECT ({[DimDelImpsSource].[ SOURCE ID].&[1],[DimDelImpsSource].[ SOURCE ID].&[10]}) ON COLUMNS
FROM ( SELECT ([DimDemograph].[Demo Name].&[A25-54] ) ON COLUMNS
FROM ( SELECT ([DimDelImpDataType].[Data Type Name].&[C3] ) ON COLUMNS
FROM ( SELECT ([DimDate].[BCast Qtr Week Number].[BCast Qtr].&[Q116] ) ON COLUMNS
FROM ( SELECT ([DimNetwork].[Network].&[XXX] ) ON COLUMNS
FROM [TRACCube]))))));
子选择中的网络、BCast Qtr、数据类型名称和演示名称是报告的参数,为此插图进行了硬编码。 SOURCE ID 和 Daypart Names 是硬编码的常量值。
结果有正确的数据,但在两行中...
我需要做的是将预测估计值的数字放在同一行上,以便图表可以看到所有 4 个数据点。像这样...
如果我简单地取出源 ID 和源名称,查询将提取多维数据集中的所有 8 个数据源,并且数字相距甚远。我可以将我的计算成员限制为类似于多维数据集中的范围语句的某个源 ID 吗?然后我可以为预测估计创建第四个计算成员。
感谢您的帮助!
如果我理解正确的话,将特定成员移动到措施中应该相对容易:
with
member [Measures].[ ImpValueCurrQtr] as
IIF(
[Measures].[DIVIDE NUMBER]=0
, null
, DIVIDE(
//>>tuple start>>
(
[Measures].[SUMOF IMP VALUE]
,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Stewardship]
)
//>>tuple end>>
,[Measures].[DIVIDE NUMBER]
)
)
如果您希望将度量限制为仅适用于层次结构中的特定成员,则可以在其他度量中使用上述内容。
另一种更漂亮的方法是只放置元组 ON COLUMNS
:
WITH
...
...
SELECT
NON EMPTY {
( [Measures].[ImpValueCurrQtr]
,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Stewardship] )
,( [Measures].[TrendPastYear]
,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Stewardship] )
,( [Measures].[TrendPast2Years]
,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Stewardship] )
,( [Measures].[ImpValueCurrQtr]
,[DimDelImpsSource].[Del Imps Source].[Del Imps Source].[Forecast] )
} ON COLUMNS,
NON EMPTY { (
[DimNetwork].[Network].[Network].ALLMEMBERS *
[DimDate].[BCast Qtr Week Number].[BCast Qtr Week Number].ALLMEMBERS *
[DimDemograph].[Demo Name].[Demo Name].ALLMEMBERS *
[DimDelImpDataType].[Data Type Name].[Data Type Name].ALLMEMBERS *
[DimExecDaypartConformed].[Network Daypart].[Daypart Name].ALLMEMBERS
) }
ON ROWS
FROM
...