Excel 名为MDX字段的Power pivot
我在Excel 2013中有一个PowerPivot数据模型。我使用MDX将几个度量值分组到一个命名集中,如下所示: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)根据单个度量值过滤或隐藏整个集合
{[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]