Sql server 2008 MDX查询中元组内度量值的上一个值
我在报告中有以下MDX查询:Sql server 2008 MDX查询中元组内度量值的上一个值,sql-server-2008,reporting-services,ssas,mdx,Sql Server 2008,Reporting Services,Ssas,Mdx,我在报告中有以下MDX查询: select ({ [Measures].[Total]}) on columns, non empty [Dim1].[h1].allmembers * [Dim1].[h2].allmembers * [Dim1].[h3].allmembers * [1 Date - Loss Date].[Date].[Year].allmembers having [Measures].Total>100000 on rows from [Monthly Su
select
({ [Measures].[Total]}) on columns,
non empty
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
having [Measures].Total>100000 on rows
from [Monthly Summary]
where ([1 Date - Month End].[Month End Date].[Month].&[20120331])
这是在3月份选择总值超过100k的行。我如何选择3月或2月总值超过100k的行意味着从上面的查询中获得结果加上上上个月超过100k的本月值的结果
现在,我在SSRS中的两个数据集中执行此操作,并在另一个数据集中执行联接和查找,从报表参数读取月份(Where子句);这是不正确的
更新:无论三月的[Total]值大于100k还是二月的[Total]值大于100k,我都需要在查询结果中看到三月的总值(第二种情况下可能小于100k)如果我了解您的要求,您需要where子句中月份的行或where子句中总数超过100K的前一个月的行。where子句将影响您在Total度量值中看到的值,因此如果您也想看到上个月的值,则不能将其保留在where子句中。要查看该行是三月还是二月,必须将其包含在以下行中:
select
({ [Measures].[Total]}) on columns,
non empty
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
* {[1 Date - Month End].[Month End Date].[Month].&[20120228],[1 Date - Month End].[Month End Date].[Month].&[20120331]}
having [Measures].Total>100000 on rows
from [Monthly Summary]
select
({ [Measures].[Total]}) on columns,
non empty
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
* {[1 Date - Month End].[Month End Date].[Month].&[20120331].PrevMember,[1 Date - Month End].[Month End Date].[Month].&[20120331]}
having [Measures].Total>100000 on rows
from [Monthly Summary]
SELECT ({ [Measures].[Total]}) ON COLUMNS,
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
HAVING [Measures].[Total] > 100000
OR ([Measures].[Total], [1 Date - Month End].[Month End Date].[Month].&[20120228]) >100000
ON ROWS
FROM [Monthly Summary]
WHERE ([1 Date - Month End].[Month End Date].[Month].&[20120331])
您是否从参数中获取月份,并因此寻找获取前一个月的通用方法?如果是这样,您可以这样做:
select
({ [Measures].[Total]}) on columns,
non empty
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
* {[1 Date - Month End].[Month End Date].[Month].&[20120228],[1 Date - Month End].[Month End Date].[Month].&[20120331]}
having [Measures].Total>100000 on rows
from [Monthly Summary]
select
({ [Measures].[Total]}) on columns,
non empty
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
* {[1 Date - Month End].[Month End Date].[Month].&[20120331].PrevMember,[1 Date - Month End].[Month End Date].[Month].&[20120331]}
having [Measures].Total>100000 on rows
from [Monthly Summary]
SELECT ({ [Measures].[Total]}) ON COLUMNS,
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
HAVING [Measures].[Total] > 100000
OR ([Measures].[Total], [1 Date - Month End].[Month End Date].[Month].&[20120228]) >100000
ON ROWS
FROM [Monthly Summary]
WHERE ([1 Date - Month End].[Month End Date].[Month].&[20120331])
更新:
若要在当前月份或上个月大于100000时获取当前值,无论当前月份的总数如何,都可以执行以下操作:
select
({ [Measures].[Total]}) on columns,
non empty
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
having [Measures].Total>100000 or ([1 Date - Month End].[Month End Date].[Month].&[20120331].PrevMember, [Measures].Total>100000) on rows
from [Monthly Summary]
where [1 Date - Month End].[Month End Date].[Month].&[20120331]
在HAVING子句中,WHERE子句与度量值相结合,以筛选出不符合指定月份(2012年3月)标准的任何行。但它不会对OR之后的表达式执行此操作,因为带有PrevMember的元组覆盖WHERE子句 您可以使用以下内容:
select
({ [Measures].[Total]}) on columns,
non empty
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
* {[1 Date - Month End].[Month End Date].[Month].&[20120228],[1 Date - Month End].[Month End Date].[Month].&[20120331]}
having [Measures].Total>100000 on rows
from [Monthly Summary]
select
({ [Measures].[Total]}) on columns,
non empty
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
* {[1 Date - Month End].[Month End Date].[Month].&[20120331].PrevMember,[1 Date - Month End].[Month End Date].[Month].&[20120331]}
having [Measures].Total>100000 on rows
from [Monthly Summary]
SELECT ({ [Measures].[Total]}) ON COLUMNS,
[Dim1].[h1].allmembers
* [Dim1].[h2].allmembers
* [Dim1].[h3].allmembers
* [1 Date - Loss Date].[Date].[Year].allmembers
HAVING [Measures].[Total] > 100000
OR ([Measures].[Total], [1 Date - Month End].[Month End Date].[Month].&[20120228]) >100000
ON ROWS
FROM [Monthly Summary]
WHERE ([1 Date - Month End].[Month End Date].[Month].&[20120331])
行上不需要非emtpy,因为
null<100000
谢谢您的回答。对不起,我没有明确说明我的要求。如果“先前”[total]>100k,我仍然需要查看“当前”[total](可能小于100k)。此查询提供的当前月或上个月的总值超过100k。@FrankGoortani我更新了我的查询,以便显示3月份的总值(即当前总值),感谢Stacia的回答。对不起,我没有明确说明我的要求。如果“先前”[total]>100k,我仍然需要查看“当前”[total](可能小于100k)。此查询提供了本月或上个月超过100k的总值。根据我目前对贵方要求的了解,我修改了我的答案。