Excel 名为MDX字段的Power pivot

Excel 名为MDX字段的Power pivot,excel,mdx,powerpivot,dax,Excel,Mdx,Powerpivot,Dax,我在Excel 2013中有一个PowerPivot数据模型。我使用MDX将几个度量值分组到一个命名集中,如下所示: {[Measures].[Sum of Value1], [Measures].[Sum of Value2], [Measures].[Sum of Value3]} 通过使用此命名集,我可以在单个操作中对Excel数据透视表的行或列放置多个度量值。我的问题是,是否有任何方法可以使用MDX(或使用单个度量值时PowerPivot屏幕中的DAX)根据单个度量值过滤或隐藏整个集合

我在Excel 2013中有一个PowerPivot数据模型。我使用MDX将几个度量值分组到一个命名集中,如下所示:

{[Measures].[Sum of Value1],
[Measures].[Sum of Value2],
[Measures].[Sum of Value3]}
通过使用此命名集,我可以在单个操作中对Excel数据透视表的行或列放置多个度量值。我的问题是,是否有任何方法可以使用MDX(或使用单个度量值时PowerPivot屏幕中的DAX)根据单个度量值过滤或隐藏整个集合(无论该度量值是否包含在集合中)?最好是,我正在寻找一种方法来做到这一点,而不包括集合中的另一个成员(即,不是度量)

例如,如果上面示例中的值3之和为零,我希望整个集合对透视表隐藏

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

更新:

Sourav的答案看起来不错,但不幸的是,我相信在我的特定场景中不起作用,因为我正在Excel中使用“使用MDX创建集”功能(在“字段、项目和集”功能区菜单中的“管理集”选项下)。它只允许我将MDX写为:

IIF([Measures].[Sum of Value3]=0,
{},
{[Measures].[Sum of Value1],[Measures].[Sum of Value2],[Measures].[Sum of Value3]})
一旦我将这个新集合添加到数据透视表中,它仍然会显示[Sum of Value3]为0的任何成员的所有3个度量值

我想我必须找到一种使用DAX和Excel数据模型度量的方法

更新2:

下面是一个帮助说明的屏幕截图。请记住,我的示例中的数据源不是一个外部多维数据集,它只是一个链接到数据模型中的Excel文件,可以对其运行MDX查询(有限制?)。在本例中,我希望集合只返回行A和行C,因为值3的和不是零。但是,正如您所看到的,所有行都将返回。谢谢

您不能选择动态隐藏/取消隐藏成员/集。相反,您可以使用
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的工作示例(免责声明-多维数据集是我为测试目的创建的)


如您所见,作用域
正在改变结果。

另一种方法是创建一个虚拟度量值,根据您的
[Measures].[Sum of Value3]
返回
null
或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];
返回以下内容:

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

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];
名称:“价值总和2新” 定义:

   IIF
    (
      [Measures].[Sum of Value3] = 0
     ,null
     ,[Measures].[Sum of Value1]
    ) 
   IIF
    (
      [Measures].[Sum of Value3] = 0
     ,null
     ,[Measures].[Sum of Value2]
    ) 
现在,在pivot中仅使用这三个度量值,并在行上以正常方式使用ID维度,即不要使用您已经尝试过的自定义集

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

ID B现在应该消失了吗?

命名集在
mdx
脚本开始附近解析,因此此条件
[Measures].[Sum of Value3]=0
将永远不会为真,因此将永远不会返回空集,即在其当前状态下,此
IIF
是一个重言式,无法
[Measures].[Sum of Value3]=0
是否为真?考虑到它的计算范围,它很可能是这样的<代码>[Measures].[Sum of Value3]
是一种物理度量。我已经测试了这个脚本并提供了答案。在脚本的其余部分(即命名集不具备上下文意识)之前,不会首先处理将MyNamedSet设置为的Sourav
。这意味着此条件
[Measures].[Sum of Value3]=0
永远不会为真。你能提供一个
AdvWrks
例子来证明这一点吗?我已经使用
AdvWrks
在Excel 2013电子表格中测试了Sourav的解决方案,它对我来说运行良好。也许您需要与我们解释的稍有不同的东西-如果
[Measures].[Sum of Value1]
[Measures].[Sum of Value2]
显示的数字
[Measures].[Sum of Value3]=0
,您是否只想让它们消失?如果
[Measures].[Sum of Value3]
不是0,则保持可见?添加了一个更新以帮助说明,但您是正确的-我希望值之和为0的成员返回空/空,该值将自动被数据透视表过滤掉。如果行上只有B(即,使用数据透视表筛选器取消选择A和C)然后这些措施就会消失:这就是苏拉夫所回答的规范。行上是否总是Id?如果
ID
s在行上,您是否只希望此技巧起作用?(如果是这样的话会更容易)有趣。我希望有一种方法来编写集合,这样就不会在其中内置字段(即,让我能够灵活地处理用户希望在行或列上放置的内容),但我意识到这可能是不可能的。也就是说,如果有一种方法可以让它工作,并且需要在集合中定义ID,那总比没有好。:)
[Measures].[Sum of Value1 NEW]
[Measures].[Sum of Value2 NEW]
[Measures].[Sum of Value3]