Power pivot命名为MDX字段

时间:2015-06-18 10:14:39

标签: excel mdx powerpivot dax

我在Excel 2013中有一个PowerPivot数据模型。我使用MDX将一些措施分组到一个命名集中 - 如下所示:

{[Measures].[Sum of Value1],
[Measures].[Sum of Value2],
[Measures].[Sum of Value3]}

通过使用此命名集,我可以在单个操作中对Excel数据透视表的行或列放置多个度量。我的问题是,有没有办法使用MDX(或PowerPivot屏幕中的DAX,在处理各个度量时)根据单个度量值过滤掉或隐藏整个集合(无论该度量是否包含在集合中) ?最好是,我正在寻找一种方法来做到这一点,而不包括集合中的另一个成员(即,不是衡量标准)。

例如,如果上例中的Value3的总和为零,我希望从数据透视表中隐藏整个集合。

我知道我可以在数据模型中编辑DAX,根据另一个度量的值为包含在集合中的每个度量返回BLANK(),但有时我可能希望在所有情况下显示这些度量。这需要为我现在的每一个写出至少2个测量值,我不喜欢这样做。

更新

Sourav的答案看起来很棒,但遗憾的是,在我的特定情况下不会起作用,我相信,因为我正在使用“使用MDX创建集”功能(在字段,项目和集合中的管理集选项下)功能区菜单)在Excel中。它只会让我把MDX写成:

IIF([Measures].[Sum of Value3]=0,
{},
{[Measures].[Sum of Value1],[Measures].[Sum of Value2],[Measures].[Sum of Value3]})

一旦我将新的集合添加到数据透视表,它仍会显示[Value3]的总和为0的所有成员的所有3个度量。

我想我将不得不使用DAX和Excel数据模型测量方法找到一种方法。

更新2:

下面是帮助说明的截图。请记住,我的示例中的数据源不是外部多维数据集,它只是在数据模型中链接的Excel文件,可以运行MDX查询(有限制?)。在这个例子中,我希望set只返回行A和C,因为Value3的Sum不是零。但是,如您所见,所有行都将被返回。谢谢! enter image description here

2 个答案:

答案 0 :(得分:1)

您不能选择隐藏/取消隐藏成员/集。相反,您可以使用IIF有条件地返回空集

WITH SET MyNamedSet AS
IIF([Measures].[Sum of Value3] = 0, 
{}, 
{[Measures].[Sum of Value1],[Measures].[Sum of Value2], [Measures].[Sum of Value3]}

AdventureWorks中@whytheq的工作示例( DISCLAIMER - Cube是我创建的,用于测试目的)

with set abc as
iif([Measures].[Fact Internet Sales Count]>34229, 
    {
    [Measures].[Fact Internet Sales Count],
    [Measures].[Extended Amount - Fact Internet Sales]
    },
    {}
    )

SELECT 
abc
 on 0
from [AdventureWorksDW]
where [Due Date].[Year].&[2004]

enter image description here enter image description here

如您所见,范围IS会更改结果。

答案 1 :(得分:1)

另一种方法是创建一个虚拟度量,根据您的null返回[Measures].[Sum of Value3]或1。然后通过这个虚拟度量乘以所有其他目标度量。

以下是AdvWrks中的方案示例:

SELECT 
  [Product].[Product Categories].[Category].[Components] ON 0
 ,{
    [Measures].[Internet Sales Amount]
   ,[Measures].[Sales Amount]
   ,[Measures].[Standard Product Cost]
   ,[Measures].[Total Product Cost]
  } ON 1
FROM [Adventure Works];

返回:

enter image description here

添加虚拟测量并修改其他测量:

WITH 
  MEMBER [Measures].[isItZero] AS 
    IIF
    (
      [Measures].[Internet Sales Amount] = 0
     ,null
     ,1
    ) 
  MEMBER [Measures].[Sales Amount NEW] AS 
    [Measures].[Sales Amount] * [Measures].[isItZero] 
  MEMBER [Measures].[Standard Product Cost NEW] AS 
    [Measures].[Standard Product Cost] * [Measures].[isItZero] 
  MEMBER [Measures].[Total Product Cost NEW] AS 
    [Measures].[Total Product Cost] * [Measures].[isItZero] 
SELECT 
  NON EMPTY //<<<<this is required
    {
      [Measures].[Internet Sales Amount]
     ,[Measures].[Sales Amount NEW]
     ,[Measures].[Standard Product Cost NEW]
     ,[Measures].[Total Product Cost NEW]
    } ON 0
 ,{} ON 1
FROM [Adventure Works]
WHERE 
  [Product].[Product Categories].[Category].[Components];

现在返回:

enter image description here

编辑

根据您的最新编辑,请尝试此操作(我假设您正在使用Excel 2013):

创建两个新措施来替换现有的两个:

姓名:&#34;价值总和1新&#34; 定义:

   IIF
    (
      [Measures].[Sum of Value3] = 0
     ,null
     ,[Measures].[Sum of Value1]
    ) 

姓名:&#34;价值总和2新&#34; 定义:

   IIF
    (
      [Measures].[Sum of Value3] = 0
     ,null
     ,[Measures].[Sum of Value2]
    ) 

现在在您的数据透视表中仅使用这三个度量,只需在行上以正常方式使用ID维度,即不要使用您已尝试过的自定义集。

[Measures].[Sum of Value1 NEW]
[Measures].[Sum of Value2 NEW]
[Measures].[Sum of Value3]

ID B现在应该消失吗?