我在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不是零。但是,如您所见,所有行都将被返回。谢谢!
答案 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]
如您所见,范围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];
返回:
添加虚拟测量并修改其他测量:
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];
现在返回:
编辑
根据您的最新编辑,请尝试此操作(我假设您正在使用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现在应该消失吗?