MDX中的VISUALTOTALS和UNION不一致

时间:2013-01-21 10:49:23

标签: mdx ssas-2008

我遇到了MDX请求的问题:

以下查询为我提供了良好的部分结果

WITH 
 SET  [Paiments Encaisse] AS    { [Type Paiement].[Type Paiement Id].&[13]
    ,[Type Paiement].[Type Paiement Id].&[20]
    ,[Type Paiement].[Type Paiement Id].&[31]
    ,[Type Paiement].[Type Paiement Id].&[62]} 
MEMBER [Measures].[CA Encaissé]
AS
    SUM(
     [Paiments Encaisse],[Measures].[Montant HT Partage Encaisse]
    )
MEMBER Measures.[CA Encaissé-E] AS [Measures].[CA Encaissé]
MEMBER MEASURES.[CA Encaissé-H] AS 
([Measures].[CA Encaissé],[Hors En CDP].[Hors ou En CDP].&[False] )

SELECT 
{Measures.[CA Encaissé-E],MEASURES.[CA Encaissé-H]} ON 0,
NON EMPTY{ 
{[Hors En CDP].[Hors ou En CDP].&[True]} * VISUALTOTALS([Employes].[Hie Societe].MEMBERS)*
[CDP Propriétaire].[Centre de Profits].[All]

} ON 1
FROM NON VISUAL
( SELECT {[Employes].[Societe].&[1234]} ON 0,{[CDP Propriétaire].[Societe].&[1234]} ON 1 FROM [Prévisions] )
WHERE (
[Type Fantome].[Val].&[False],
[Date Facturation du Paiement].[Year].&[2011-01-01T00:00:00],
[Date Paiement].[Year].&[2011-01-01T00:00:00],
[Date Facturation Opération].[Year].&[2011-01-01T00:00:00])

然而,下面的查询,旨在给我整个结果,在UNION的第一部分返回的行少于第一个查询,这让我感到困惑

WITH 
 SET  [Paiments Encaisse] AS    { [Type Paiement].[Type Paiement Id].&[13]
    ,[Type Paiement].[Type Paiement Id].&[20]
    ,[Type Paiement].[Type Paiement Id].&[31]
    ,[Type Paiement].[Type Paiement Id].&[62]} 
MEMBER [Measures].[CA Encaissé]
AS
    SUM(
     [Paiments Encaisse],[Measures].[Montant HT Partage Encaisse]
    )
MEMBER Measures.[CA Encaissé-E] AS [Measures].[CA Encaissé]
MEMBER MEASURES.[CA Encaissé-H] AS 
([Measures].[CA Encaissé],[Hors En CDP].[Hors ou En CDP].&[False] )

SELECT 
{Measures.[CA Encaissé-E],MEASURES.[CA Encaissé-H]} ON 0,
NON EMPTY{ UNION
({[Hors En CDP].[Hors ou En CDP].&[True]} * VISUALTOTALS([Employes].[Hie Societe].MEMBERS)*
[CDP Propriétaire].[Centre de Profits].[All]
 , {[Hors en CDP].[Hors ou En CDP].&[False],[Hors en CDP].[Hors ou En CDP].[All]}
*  {[Employes].[Hie Societe].[All]} * 
       VISUALTOTALS  ([CDP Propriétaire].[Centre de Profits].ALLMEMBERS
  ),ALL
)} ON 1
FROM NON VISUAL
( SELECT {[Employes].[Societe].&[1234]} ON 0,{[CDP Propriétaire].[Societe].&[1234]} ON 1 FROM [Prévisions] )
WHERE (
[Type Fantome].[Val].&[False],
[Date Facturation du Paiement].[Year].&[2011-01-01T00:00:00],
[Date Paiement].[Year].&[2011-01-01T00:00:00],
[Date Facturation Opération].[Year].&[2011-01-01T00:00:00])

更重要的是,列测量。[CAEncaissé-H]在第二个查询中始终为NULL,即使在应该有值的行上也是如此。

我不明白为什么联盟第一部分的结果会受到第二部分内容的影响。有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:1)

我不是SSAS的专家;但我可以与icCube分享我的经历; VisualTotal()正在改变层次结构实际聚合的方式,如果你在同一个请求中多次调用这个函数,这变得非常奇怪,可能是非确定性的(取决于评估的顺序)而且难以理解。

答案 1 :(得分:0)

META:我对这个问题给予了很大的赏金,到目前为止,唯一的答案是对效果的描述,而不是VISUALTOTAL的内部工作。