Ssas 在MDX查询中结合度量和kpi目标时如何去除空单元格

Ssas 在MDX查询中结合度量和kpi目标时如何去除空单元格,ssas,mdx,Ssas,Mdx,我在MDX查询中遇到了这个问题,在向查询中添加KPI目标、趋势和状态后,NON-EMPTY子句没有按照我的预期工作。 基本查询如下所示 SELECT NON EMPTY({[Measure1], [Measure2], KPIValue('MyKpi')}) ON COLUMNS, NON EMPTY [Dim Country].[Name].[Name].ALLMEMBERS ON ROWS FROM [BIA CO] 返回类似这样的内容,这很好: Measu

我在MDX查询中遇到了这个问题,在向查询中添加KPI目标、趋势和状态后,NON-EMPTY子句没有按照我的预期工作。 基本查询如下所示

SELECT 
    NON EMPTY({[Measure1], [Measure2], KPIValue('MyKpi')}) 
    ON COLUMNS, 
    NON EMPTY [Dim Country].[Name].[Name].ALLMEMBERS ON ROWS 
FROM [BIA CO]
返回类似这样的内容,这很好:

Measure1 Measure2 MyKpi Canada 7977 4487 3231 USA 6 14 6 UK 442 1179 180 返回类似于:

Measure1 Measure2 MyKpi MyKpi Goal MyKpi Status MyKpi Trend Mexico (null) (null) (null) 40300 -1 -1 Cuba (null) (null) (null) 40300 -1 -1 Canada 7977 4487 3231 40300 -1 1 Portugal (null) (null) (null) 40300 -1 -1 China (null) (null) (null) 40300 -1 -1 USA 6 14 6 40300 -1 1 UK 442 1179 180 40300 -1 1 措施1措施2我的KPI我的KPI目标我的KPI状态我的KPI趋势 墨西哥(空)(空)(空)40300-1-1 古巴(空)(空)(空)40300-1-1 加拿大79774487323140300-11 葡萄牙(空)(空)(空)40300-1-1 中国(空)(空)(空)40300-1-1 美国614640300-11 英国442 1179 180 40300-1 除了目标、状态和趋势之外,我如何删除所有带空的行?

只需将空添加到KPI中即可。如果设置Measure1,将过滤掉所有空元组。它将从Measure1继承非空行为。您还可以在具有类似逻辑的行上返回以下集合(输出将相同):


我有一个类似的问题,这就是我所做的。就我而言,我无法控制立方体的设计。我不是专家,所以在使用之前,请等待一些有经验的反馈

WITH
    MEMBER [KPIValue(ReservaKPI)] as KPIValue('ReservaKPI')
    MEMBER [KPIGoal(ReservaKPI)] as CASE WHEN ISEMPTY([KPIValue(ReservaKPI)]) THEN NULL ELSE KPIGoal('ReservaKPI') END
    MEMBER [KPIStatus(ReservaKPI)] as CASE WHEN ISEMPTY([KPIValue(ReservaKPI)]) THEN NULL ELSE KPIStatus('ReservaKPI') END
    MEMBER [KPITrend(ReservaKPI)] as CASE WHEN ISEMPTY([KPIValue(ReservaKPI)]) THEN NULL ELSE KPITrend('ReservaKPI') END
SELECT 
    NON EMPTY({[Cant Adultos], [Cant Noches], [KPIValue(ReservaKPI)], [KPIGoal(ReservaKPI)], [KPIStatus(ReservaKPI)], [KPITrend(ReservaKPI)]}) 
    ON COLUMNS, 
    NON EMPTY [Dim Mun].[NOMBRE].[NOMBRE].ALLMEMBERS ON ROWS 
FROM [BIA CO]

我有时喜欢这样使用
HAVING
子句:

SELECT 
  NON EMPTY 
    {
      [Measure1]
     ,[Measure2]
     ,KPIValue('MyKpi')
     ,KPIGoal('MyKpi')
     ,KPIStatus('MyKpi')
     ,KPITrend('MyKpi')
    } ON COLUMNS
 ,NON EMPTY 
    [Dim Country].[Name].[Name].ALLMEMBERS HAVING 
  (NOT IsEmpty([Measure1])) AND (NOT IsEmpty([Measure2])) ON ROWS
FROM [BIA CO];
但是您可以按照@user1998299的建议,将该逻辑移动到
WITH
子句中-我可能会做一个自定义设置:

WITH 
  SET [SmallSet] AS 
    NonEmpty
    (
      NonEmpty
      (
        [Dim Country].[Name].[Name].ALLMEMBERS
       ,[Measure1]
      )
     ,[Measure2]
    ) 
SELECT 
  NON EMPTY 
    {
      [Measure1]
     ,[Measure2]
     ,KPIValue('MyKpi')
     ,KPIGoal('MyKpi')
     ,KPIStatus('MyKpi')
     ,KPITrend('MyKpi')
    } ON COLUMNS
 ,NON EMPTY 
    [SmallSet] ON ROWS
FROM [BIA CO];
SELECT 
  NON EMPTY 
    {
      [Measure1]
     ,[Measure2]
     ,KPIValue('MyKpi')
     ,KPIGoal('MyKpi')
     ,KPIStatus('MyKpi')
     ,KPITrend('MyKpi')
    } ON COLUMNS
 ,NON EMPTY 
    [Dim Country].[Name].[Name].ALLMEMBERS HAVING 
  (NOT IsEmpty([Measure1])) AND (NOT IsEmpty([Measure2])) ON ROWS
FROM [BIA CO];
WITH 
  SET [SmallSet] AS 
    NonEmpty
    (
      NonEmpty
      (
        [Dim Country].[Name].[Name].ALLMEMBERS
       ,[Measure1]
      )
     ,[Measure2]
    ) 
SELECT 
  NON EMPTY 
    {
      [Measure1]
     ,[Measure2]
     ,KPIValue('MyKpi')
     ,KPIGoal('MyKpi')
     ,KPIStatus('MyKpi')
     ,KPITrend('MyKpi')
    } ON COLUMNS
 ,NON EMPTY 
    [SmallSet] ON ROWS
FROM [BIA CO];