Mdx 如何通过标志值过滤具有多个交叉连接的查询中的数据
我有一个对行和列具有多个交叉连接的查询,我要筛选所有数据[Measures].[Flag]=1 以下是一个例子:Mdx 如何通过标志值过滤具有多个交叉连接的查询中的数据,mdx,cognos,Mdx,Cognos,我有一个对行和列具有多个交叉连接的查询,我要筛选所有数据[Measures].[Flag]=1 以下是一个例子: SELECT { NonEmpty ( CrossJoin ( { [Time].[2016] ,[Time].[2017] } ,CrossJoin ( { [Quarters].[2 Quar
SELECT
{
NonEmpty
(
CrossJoin
(
{
[Time].[2016]
,[Time].[2017]
}
,CrossJoin
(
{
[Quarters].[2 Quarter]
,[Quarters].[1 Quarter]
}
,{
[Measures].[Load]
,[Measures].[Flag]
}
)
)
)
} ON ROWS
,{CrossJoin([Industry].[Industry 1],[Client].[Set 1])} ON COLUMNS
FROM [Cube]
WHERE
[Version].[Actual];
如果我这样做:
SELECT
{
NonEmpty
(
CrossJoin
(
{
[Time].[2016]
,[Time].[2017]
}
,CrossJoin
(
{
[Quarters].[2 Quarter]
,[Quarters].[1 Quarter]
}
,{
[Measures].[Load]
,[Measures].[Flag]
}
)
)
)
} ON ROWS
,{
Filter
(
CrossJoin
(
[Industry].[Industry 1]
,[CLient].[Set 1]
)
,
[Measures].[Flag] = 1
)
} ON COLUMNS
FROM [Cube]
WHERE
[Version].[Actual];
我有一套空的。在没有筛选器的结果集中,如果您只是将其移动到HAVING子句中,则会有Flag=1的数据,这有帮助吗
SELECT
{
NonEmpty
(
CrossJoin
(
{
[Time].[2016]
,[Time].[2017]
}
,CrossJoin
(
{
[Quarters].[2 Quarter]
,[Quarters].[1 Quarter]
}
,{
[Measures].[Load]
,[Measures].[Flag]
}
)
)
)
} ON ROWS
,
CrossJoin
(
[Industry].[Industry 1]
,[CLient].[Set 1]
)
having [Measures].[Flag] = 1 ON COLUMNS
FROM [Cube]
WHERE
[Version].[Actual];
嗨,我找到了解决这个问题的办法。解决方法是使用不同的过滤器。以下是一个例子:
SELECT
{
NonEmpty
(
CrossJoin
(
{
[Time].[2016]
,[Time].[2017]
}
,CrossJoin
(
{
[Quarters].[2 Quarter]
,[Quarters].[1 Quarter]
}
,{
[Measures].[Load]
,[Measures].[Flag]
}
)
)
)
} ON ROWS
,{CrossJoin([Industry].[Industry 1],[Client].[Set 1])} ON COLUMNS
FROM [Cube]
WHERE
[Version].[Actual];
这里需要注意的一点是,“标志”数据在特定维度配置中可用
SELECT
{
NonEmpty
(
CrossJoin
(
{
[Time].[2016]
,[Time].[2017]
}
,CrossJoin
(
{
[Quarters].[2 Quarter]
,[Quarters].[1 Quarter]
}
,{
[Measures].[Load]
,[Measures].[Flag]
}
)
)
)
} ON ROWS
,{
Filter
(
CrossJoin
(
[Industry].[Industry 1]
,[CLient].[Set 1]
)
,
(
[Cube].(
[Time].[2016],
[Quarters].[1 Quarter],
[Measures].[Flag]
) = 1
)
)
} ON COLUMNS
FROM [Cube]
WHERE
[Version].[Actual];
我认为过滤器将对每列进行[Measures].[Flag]的求和-如果求和为1,则保持该列。。。但我怀疑每个[Measures].[Flag]列都超过1。我已经测试过了。Having在Cognos TM1上给了我语法错误。@Mindaugas我在Cognos中使用Having时发现了这个问题:我找到了一个解决方案。我不得不以不同的方式使用过滤器。