Ssas WHERE子句中的MDX计算成员导致不同的结果

Ssas WHERE子句中的MDX计算成员导致不同的结果,ssas,mdx,Ssas,Mdx,根据我在WHERE子句中使用的[Measures]中的哪一个,以下查询具有不同的结果集。 激活[Measures].[MetricFormula]而不是[Measures].[Actual],查询将提供不同的预期结果 WITH MEMBER [Measures].[MetricFormula] AS Measures.[Downloads] MEMBER [Measures].[Actual] AS [Measures].[MetricFormula], LANGUAGE = 1031,FORM

根据我在WHERE子句中使用的[Measures]中的哪一个,以下查询具有不同的结果集。 激活[Measures].[MetricFormula]而不是[Measures].[Actual],查询将提供不同的预期结果

WITH
MEMBER [Measures].[MetricFormula] AS Measures.[Downloads]
MEMBER [Measures].[Actual] AS [Measures].[MetricFormula], LANGUAGE = 1031,FORMAT_STRING='#,##0'

SET [mySet] as 
topcount(
    nonempty(
        filter(
            distinct descendants({[AppPackages].[AppPackages].&[F_TAAM00000069]}), 
            [Measures].[MetricFormula] <> 0 AND ([AppPackages].[AppPackages].PROPERTIES('AppTypeID') = 'DETAIL')
            ),
        [Time].[Calendar].[Date].&[2015-03-22T00:00:00]:[Time].[Calendar].[Date].&[2015-03-31T00:00:00]
        )
    ,6
    ,aggregate([Time].[Calendar].[Date].&[2015-03-22T00:00:00]:[Time].[Calendar].[Date].&[2015-03-31T00:00:00], [Measures].[MetricFormula]))


select
([Time].[Calendar].[Date].&[2015-03-22T00:00:00]:[Time].[Calendar].[Date].&[2015-03-31T00:00:00]) ON COLUMNS,
([mySet]) ON ROWS   

FROM [Facts] 
WHERE (
--([Measures].[MetricFormula]),
([Measures].[Actual]),
{[DownloadTypes].[DownloadTypes].&[New]}
)
[Measures].[Downloads]是多维数据集中定义的真实度量值

问题:为什么会产生不同的结果? 我以各种形式使用此构造来简化基于代码的查询生成。 在我开始重新设计查询生成器之前,我想了解它们之间的区别

背景: 该查询应该根据给定的度量,计算给定时间范围内给定AppPackage的前6个子代。我首先查找时间范围的非空子代,在其上添加topcount,确保时间聚合度量值驱动top计算。最后,我将求值集放在行上,时间放在列上,并指定要查看的内容。除了所描述的效果之外,它工作得很好。

我在AdvWrks中复制时很开心,但这里是:

WITH 
  MEMBER [Measures].[x] AS 
    [Measures].[Internet Order Count] 
  MEMBER [Measures].[y] AS 
    [Measures].[x] 
   ,LANGUAGE = 1031 
   ,FORMAT_STRING = '#,##0' 
  SET [s] AS 
    TopCount
    (
      NonEmpty
      (
        Filter
        (
          [State-Province].[State-Province].MEMBERS
         ,
          [Measures].[x] <> 0
        )
       ,
          [Date].[Calendar].[Month].&[2005]&[10]
        : 
          [Date].[Calendar].[Month].&[2006]&[5]
      )
     ,10
     ,Aggregate
      (
          [Date].[Calendar].[Month].&[2005]&[10]
        : 
          [Date].[Calendar].[Month].&[2006]&[5]
       ,[Measures].[x]
      )
    ) 
SELECT 
  {
      [Date].[Calendar].[Month].&[2005]&[10]
    : 
      [Date].[Calendar].[Month].&[2006]&[5]
  } ON COLUMNS
 ,Order
  (
    [s]
   ,[State-Province].CurrentMember.Member_Caption
   ,basc
  ) ON ROWS
FROM [Adventure Works]
WHERE 
  (
    //([Measures].[x]),
    ([Measures].[y]),
   {[Product].[Product Categories].[Category].&[1]}
  );
因此,请尝试以下操作或尝试交换聚合以求和:


有趣的问题-我将针对AdvWks进行测试。如果你简化这个集合,它的行为还是一样的吗?很好。我删除了topcount,并将其他所有内容保留为NoEmptyFilter..=>布景不变。陛下需要考虑的是,度量。[下载]是否直接来自RDBMS?如果是,该列的数据类型是什么?如果没有,您是如何在多维数据集中创建此度量的?@Sourav_Agasti:是的,它来自RDBMS,多维数据集中的类型是货币。@whytheq:我刚刚用一个更简单的topcount进行了测试:问题仍然存在=>我将查看topcount在做什么。为什么这是非法的,亲爱的朋友?@Sourav_Agasti??你自己试试吧。。。我现在为你添加一个脚本-你需要问微软为什么。哦,是的。聚合函数中不允许计算成员。对不起,我没有读你答案的最后一部分。我想说你的调查很棒。@Sourav_Agasti这其中的危险点是,如果你使用聚合、计算的度量作为TopCount的第三个参数,那么它不会抛出错误,只是忽略了计算的度量。。。对我来说好像是个虫子
Aggregate
      (
          [Date].[Calendar].[Month].&[2005]&[10]
        : 
          [Date].[Calendar].[Month].&[2006]&[5]
       ,[Measures].[x]  //<<this is not allowed so `mdx` is ignoring it!
      )
WITH 
  MEMBER [Measures].[MetricFormula] AS 
    Measures.[Downloads] 
  MEMBER [Measures].[Actual] AS 
    [Measures].[MetricFormula] 
   ,LANGUAGE = 1031 
   ,FORMAT_STRING = '#,##0' 
  SET [mySet] AS 
    TopCount
    (
      NonEmpty
      (
        Filter
        (
          (DISTINCT 
            Descendants({[AppPackages].[AppPackages].&[F_TAAM00000069]}))
         ,
            [Measures].[MetricFormula] <> 0
          AND 
            [AppPackages].[AppPackages].Properties('AppTypeID') = 'DETAIL'
        )
       ,
          [Time].[Calendar].[Date].&[2015-03-22T00:00:00]
        : 
          [Time].[Calendar].[Date].&[2015-03-31T00:00:00]
      )
     ,6
     ,Aggregate
      (
          [Time].[Calendar].[Date].&[2015-03-22T00:00:00]
        : 
          [Time].[Calendar].[Date].&[2015-03-31T00:00:00]
       ,Measures.[Downloads]   //<<<<<<<<<<<<moved away from using a calculated measure as they are not working as expected inside the function `AGGREGATE`
      )
    ) 
SELECT 
    [Time].[Calendar].[Date].&[2015-03-22T00:00:00]
  : 
    [Time].[Calendar].[Date].&[2015-03-31T00:00:00] ON COLUMNS
 ,[mySet] ON ROWS
FROM [Facts]
WHERE 
  (
    --([Measures].[MetricFormula]),
    [Measures].[Actual]
   ,{[DownloadTypes].[DownloadTypes].&[New]}
  );
WITH 
  MEMBER [Measures].[j] AS 
    [Measures].[Internet Order Count] 
  MEMBER [Measures].[x] AS 
    Aggregate
    (
        [Date].[Calendar].[Month].&[2005]&[10]
      : 
        [Date].[Calendar].[Month].&[2006]&[5]
     ,[Measures].[j]   //<<FEEDING "ILLEGAL" CALCULATED MEMBER INTO AGGREGATE FUNCTION
    ) 
SELECT 
  {[Measures].[x]} ON COLUMNS
 ,[State-Province].[State-Province].MEMBERS ON ROWS
FROM [Adventure Works];