在浏览器 SSAS MDX 中交叉度量时将 NULL 值替换为 0

Replace NULL Value with 0 when crossing measures in Browser SSAS MDX

我想在多维数据集中浏览时替换空值,当我执行 IIF 或合并时,我得到没有数据(所有维度行)的年份的空值,我只想替换当前数据的空值越过。这是一个例子来解释更多:

Year   Measure 1     Measure 2
2015     55            60
2016     44            70
2017      30           (null)

我使用 ISEMPTY 或 COALESCE 时的问题行为

Year Measure 1 Measure 2 (All TimeDim years) 0 0 2012 0 0 2013 0 0 2014 0 0 2015 55 60 2016 44 70 2017 30 0

数据集现在更大了,但有无用的值。

我想要什么:

Year Measure 1 Measure 2 2015 55 60 2016 44 70 2017 30 0

如何解决这个问题?谢谢。

您可以将 IS 运算符与 NULL 引用一起使用。 See here

另一种选择是将其包装在 IIF 语句中。 See here

这是一个人们可以玩的例子:

SELECT 
  {
    [Measures].[Internet Sales Amount]
   ,[Measures].[Reseller Sales Amount]
  } ON COLUMNS
 ,NON EMPTY 
    [Date].[Calendar Year].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE 
  [Geography].[Geography].[Country].&[Australia];

结果:

这是导致行扩展的简单修改:

WITH 
  MEMBER [Measures].[Reseller Sales Amount NEW] AS 
    IIF
    (
      [Measures].[Reseller Sales Amount] = 0
     ,0
     ,[Measures].[Reseller Sales Amount]
    ) 
SELECT 
  {
    [Measures].[Internet Sales Amount]
   ,[Measures].[Reseller Sales Amount NEW]
  } ON COLUMNS
 ,NON EMPTY 
    [Date].[Calendar Year].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE 
  [Geography].[Geography].[Country].&[Australia];

结果

所以我们可以将新措施稍微修改一下:

WITH 
  MEMBER [Measures].[Reseller Sales Amount NEW] AS 
    IIF
    (
        [Measures].[Reseller Sales Amount] = 0
      AND 
        [Measures].[Internet Sales Amount] <> 0
     ,0
     ,[Measures].[Reseller Sales Amount]
    ) 
SELECT 
  {
    [Measures].[Internet Sales Amount]
   ,[Measures].[Reseller Sales Amount NEW]
  } ON COLUMNS
 ,NON EMPTY 
    [Date].[Calendar Year].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE 
  [Geography].[Geography].[Country].&[Australia];

那么我们有:

注意...在多维数据集内去除空值 space 会严重降低您的 mdx 脚本的性能,因此请谨慎使用上面的内容 - 最好不要在上面和您的客户端对 mdx 进行 (null) => 0

的转换