我有一个定义了组织结构层次结构的简单数据立方体。在多维数据集内的计算中,我希望根据当前在 MDX 查询的 WHERE 子句中使用的组织项目级别进行不同的计算。
假设我有 5 个级别的组织结构,对于最后一个级别(商店级别),我想更改使用表达式进行计算的方式:
IIF([组织结构].[父 ID].LEVEL IS
[Organization Structure].[Parent Id].[Level 05], 'THIS IS STORE', 'THIS IS NOT')
这在 Visual Studio 浏览器中产生了我们真正想要的东西:
和使用 MDX 查询一样:
SELECT { [Measures].[TEST] } ON COLUMNS
FROM [DataCubeName]
WHERE
{
[Organization Structure].[Parent Id].&[123]
}
当我们想在WHERE 子句中使用多个组织结构项时,问题就出现了。此子句中只允许有来自同一级别的项目,我仍然想知道它是哪个级别,但是当然当我们将第二个项目添加到 WHERE 时,如下所示:
SELECT { [Measures].[TEST] } ON COLUMNS
FROM [DataCubeName]
WHERE
{
[Organization Structure].[Parent Id].&[123],
[Organization Structure].[Parent Id].&[124]
}
我收到错误消息“currentmember failed because the coordinate for the attribute contains a set”。
这就是为什么在我的表达中我尝试在许多不同的配置中使用 ITEM(0) 函数,但我就是找不到一种方法来将它用于当前在 WHERE< 中使用的一组项目上/em> 子句...所以最大的问题是:
如何获取当前正在执行的 WHERE 子句中列出的一组项目,以便我可以在该组上使用 Item(0),或者是否有任何其他方法来检索当前选定项目的级别知道他们一定是同一级别的吗?
最佳答案
在 where
子句中使用 Currentmember
和 set
可能存在问题。
请参阅 chris Webb 的这篇文章:http://blog.crossjoin.co.uk/2009/08/08/sets-in-the-where-clause-and-autoexists/
针对您的情况,有一个可能的解决方法:您可以尝试根据自己的情况进行调整。
WITH
MEMBER [Measures].[x] AS
IIF
(
(existing [Geography].[Geography].[State-Province].members).item(0).Level
IS
[Geography].[Geography].[State-Province]
,'THIS IS state'
,'THIS IS NOT'
)
SELECT
{[Measures].[x]} ON COLUMNS
FROM [Adventure Works]
WHERE
(
{[Geography].[Geography].[State-Province].&[77]&[FR],
[Geography].[Geography].[State-Province].&[59]&[FR]}
);
扩展上面的内容以证明它有效:
WITH
MEMBER [Measures].[x] AS
IIF
(
(EXISTING
[Geography].[Geography].[State-Province].MEMBERS).Item(0).Level
IS
[Geography].[Geography].[State-Province]
,'THIS IS state'
,'THIS IS NOT'
)
MEMBER [Measures].[proof] AS
(EXISTING
[Geography].[Geography].[State-Province].MEMBERS).Item(0).Member_Caption
MEMBER [Measures].[proof2] AS
(EXISTING
[Geography].[Geography].[State-Province].MEMBERS).Count
SELECT
{
[Measures].[x]
,[Measures].[proof]
,[Measures].[proof2]
} ON COLUMNS
FROM [Adventure Works]
WHERE
{
[Geography].[Geography].[State-Province].&[77]&[FR]
,[Geography].[Geography].[State-Province].&[59]&[FR]
};
结果如下:
所以你的表情可能会变成下面这样:
IIF
(
(EXISTING
[Organization Structure].[Parent Id].MEMBERS).Item(0).Level
IS
[Organization Structure].[Parent Id].[Level 05]
,'THIS IS STORE'
,'THIS IS NOT'
)
关于sql-server - MDX - 检索当前在 where 子句中使用的成员级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30478394/