我有一个我在SSRS报告中使用的mdx查询。我想只返回> 50,但我想显示所有年份,无论是否有该年的数据。我可以得到> 50过滤器工作,但后来我失去了没有数据的年份。我已经尝试将这些年放在“页面”轴上,然后返回所有年份,但是当我这样做时,我的行轴不再尊重过滤器。我也尝试将年份维度置于NONEMPTY子句之外,但它再次不尊重> 50小时过滤。
以下是我到目前为止的样本:
SELECT
[measures].[Hours] ON COLUMNS
,
[Date].[Year].[Year].ALLMEMBERS
*
{
Filter
(
NonEmpty
(
CrossJoin
(
[Client].[Client].[Client].ALLMEMBERS
,[Department].[Department].[Department].ALLMEMBERS
,[Title].[Title].[Title].ALLMEMBERS
,[Person].[Person].[Person].ALLMEMBERS
)
,[Measures].[Billable Hours]
)
,
[Measures].[Billable Hours] >= 50
)
} ON ROWS
FROM TestCube;
即使没有数据,所需的结果仍然是显示2017年列,并且仅显示小时> 50表示有数据的列。
对此的任何帮助将不胜感激。我确实通过创建一个检查小时数>的计算成员找到了解决方法。 50,否则返回null。只是想知道是否有更好的方法来做到这一点。
谢谢, 希拉里
答案 0 :(得分:0)
您可以尝试将OR ISEMPTY([Measures].[Billable Hours])
添加到过滤条件中:
SELECT
[measures].[Hours] ON COLUMNS
,
[Date].[Year].[Year].ALLMEMBERS
*
{
Filter
(
NonEmpty
(
CrossJoin
(
[Client].[Client].[Client].ALLMEMBERS
,[Department].[Department].[Department].ALLMEMBERS
,[Title].[Title].[Title].ALLMEMBERS
,[Person].[Person].[Person].ALLMEMBERS
)
,[Measures].[Billable Hours]
)
,
[Measures].[Billable Hours] >= 50
OR ISEMPTY([Measures].[Billable Hours])
)
} ON ROWS
FROM TestCube;
答案 1 :(得分:0)
您可以将算法移动到计算的度量中。它更快。过滤功能很慢。
with
Member [Measures].[Billable Hours 50More] as
IIF([Measures].[Billable Hours] >= 50, [Measures].[Hours], NULL)
select
[Measures].[Billable Hours 50More] on 0,
[Date].[Year].[Year].AllMembers * NonEmpty([Client].[Client].[Client].AllMembers * [Department].[Department].[Department].AllMembers * [Title].[Title].[Title].AllMembers * [Person].[Person].[Person].AllMembers, [Billable Hours 50More]) on 1
from TestCube