Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 MDX查询中元组内度量值的上一个值_Sql Server 2008_Reporting Services_Ssas_Mdx - Fatal编程技术网

Sql server 2008 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

我在报告中有以下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 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的总值。根据我目前对贵方要求的了解,我修改了我的答案。