当我运行此mdx查询时,工作正常(从层次结构级别获取子成员):
select {} on columns,
[Dimension].[hierarchy].[level].children on rows
from [Cube]
但是,当我在行上添加一些元组时,不会过滤子元素(显示所有成员):S
select {} on columns,
[Dimension].[hierarchy].[level].children
* [Dimension2].[hierarchy2].[level2].allmembers on rows
from [Cube]
答案 0 :(得分:0)
*
是一个交叉联接 - 您将获得[Dimension].[hierarchy].[level].children
和[Dimension2].[hierarchy2].[level2].allmembers
的笛卡尔积,因为它们的尺寸不同。
如果它们是来自同一维度的两个层次结构,则自动存在行为将限制结果,例如与2014年划分的2014年应该只显示2014年的月份。
尝试使用DESCENDANTS
函数+您可能不需要NULL,因此请尝试NON EMPTY
SELECT
{} ON COLUMNS,
NON EMPTY
DESCENDANTS(
[Dimension].[hierarchy].[level].[PickAHigherUpMember],
[Dimension].[hierarchy].[PickTheLevelYouWantToDrillTo]
)
*
[Dimension2].[hierarchy2].[level2].allmembers ON ROWS
FROM [Cube]
答案 1 :(得分:0)
如果查看子项的mdx语言参考,您还可以找到另一个如何使用带有层次结构的函数而不是member_expression的示例。
http://msdn.microsoft.com/en-us/library/ms146018.aspx
但它不适用于层次结构级别。
也许行表达式最初是一个层次结构,您已将其更改为级别表达式。
下面是一个类似的工作mdx,行上有层次结构:
select {} on 0,
[Product].[Model Name].children
*
[Geography].[Country].[All Geographies]
on 1
FROM [Adventure Works
菲利普,
答案 2 :(得分:0)
我想你只想要那些孩子在默认度量上有值的行。在这种情况下,您可以尝试以下方法:
select {} on columns,
Nonempty([Dimension].[hierarchy].[level].children
* [Dimension2].[hierarchy2].[level2].allmembers) on rows
from [Cube]
现在,如果对于孩子们,您需要Dimension2中的所有成员,那么您可以尝试:
select {} on columns,
Nonempty([Dimension].[hierarchy].[level].children, [Dimension2].[hierarchy2].[level2].allmembers)
* [Dimension2].[hierarchy2].[level2].allmembers) on rows
from [Cube]
在第二种情况下,Nonempty函数接受第二个参数,并且使用Nonempty函数的结果完成交叉连接。有关Nonmpty的文档,包括第二个参数的用法,请参阅https://docs.microsoft.com/en-us/sql/mdx/nonempty-mdx