2017-03-17 63 views
0

我有一个MDX查询这让我的日期范围或条件有多少人完成/预订/未登记的维护作业有每辆车MDX过滤通过的措施

SELECT NON EMPTY { [Measures].[Completed], 
[Measures].[Unbooked], 
[Measures].[Booked]} ON COLUMNS, 

NON EMPTY { (
[Job Code].[Code].[Code].ALLMEMBERS* 
[Vehicle].[Vehicle Number].[Vehicle Number].ALLMEMBERS* 
[Job Group Target Completion Date].[Date].[Date].ALLMEMBERS 
) } ON ROWS 

FROM (SELECT (STRTOMEMBER(@FromDate, CONSTRAINED) : STRTOMEMBER(@ToDate, CONSTRAINED)) 
FROM [Standard Reports - Depot Work Analysis]) 

凡@FromDate和@ToDate来自会员我的[工作组目标完成日期]维度。作业在共享作业代码和目标日期时分组为“作业组”。

如何扩展此功能,以便我可以在目标日期(因为它是现在)或所有作业组中未完成所有作业(即[度量]。[未预订]> 0或[措施] [预订]> 0),但有针对性地在给定的日期范围之前完成。

+0

你怎么知道“有针对性的给定的日期范围之前完成”?看来你必须使用两套的结合。 –

+0

我需要给定日期或[工作组目标完成日期]。[日期]在结束日期和[措施]之前[工作组目标完成日期]。[未预订]> 0或[措施]。[预订] > 0 –

回答

0

我希望你要像下面这样:

With 
Member [Measures].[Targeted] as 
IIF(
    [Measures].[Unbooked] > 0 
    and 
    [Measures].[Booked] > 0 
    and 
    [Measures].[Completed] > 0, 
    1, 
    Null 
) 


Select 
Non Empty { 
    [Measures].[Completed], 
    [Measures].[Unbooked], 
    [Measures].[Booked] 
} on 0, 
Non Empty { 
    { 
     [Job Code].[Code].[Code].AllMembers * 
     [Vehicle].[Vehicle Number].[Vehicle Number].AllMembers * 
     {StrToMember(@FromDate, CONSTRAINED):StrToMember(@ToDate, CONSTRAINED)} 
    { 
    + 
    NonEmpty(
     { 
      [Job Code].[Code].[Code].AllMembers * 
      [Vehicle].[Vehicle Number].[Vehicle Number].AllMembers * 
      {NULL:StrToMember(@FromDate, CONSTRAINED).Lag(1)} 
     }, 
     [Measures].[Targeted] 
    ) 
} on 1 

From [Standard Reports - Depot Work Analysis]) 
+0

这绝对是一个改进,问题是如果工作由工会的第二部分返回,我也需要带回具有相同工作代码和目标日期的任何结果,即使它们全部完成。 –

+0

我已添加[Measures]。[Completed]> 0?这是你的意思吗?如果我误解了你,请分享这个问题。 –