在MDX成员中重现SQL结果

时间:2014-01-28 15:03:41

标签: mdx

我在MDX中复制与SQL相同的结果时遇到了麻烦。 SQL中的查询给出了我正在寻找的结果:

SELECT        COUNT(Dim_Provider_Records_By_Day.ID) AS CompletedRecords
FROM            Dim_Provider_Records_By_Day INNER JOIN
                     Dim_Provider_Records ON Dim_Provider_Records_By_Day.RecordID = Dim_Provider_Records.ID
WHERE        Dim_Provider_Records.CompleteDateTime = Dim_Provider_Records_By_Day.PK_Date

我尝试过的一些事情如下:

WITH MEMBER [Measures].[Count of Complete Records2] AS
COUNT(
FILTER([Dim Provider Records By Day].[ID].ALLMEMBERS, 
[Dim Provider Records By Day].[PK Date].Value = [Dim Provider Records By Day].[Complete Date Time].Value)
)

SELECT [Count of Complete Records2] ON COLUMNS FROM [DW DR Incomplete]  

我也使用CURRENTMEMBER.VALUE,CURRENTMEMBER.NAME尝试了以上操作,但没有运气。

基本上,我希望得到[按日提示的Dim Provider Records]中所有记录的计数,其中[PK Date]等于[Complete Date Time]。然后其余部分可由立方体处理。

1 个答案:

答案 0 :(得分:0)

我会尝试像

这样的东西
COUNT(
FILTER([Dim Provider Records By Day].[ID].[ID].MEMBERS, 
[Dim Provider Records By Day].[PK Date].CurrentMember.Name = [Dim Provider Records By Day].[Complete Date Time].CurrentMember.Name)
)

由于您对ID属性的计算成员不感兴趣,Members会优于AllMembers

要排除要过滤的集合中ID属性的所有成员,请使用级别[Dim Provider Records By Day].[ID].[ID]而不是完整的属性层次结构[Dim Provider Records By Day].[ID]

并且 - 假设您的维度从IDPK Date以及一个到Complete Date Time之间存在关系,则每个属性都应该有唯一CurrentMemberID成员,以便正确评估过滤条件。然后使用Name属性进行比较,因为Value属性将是当前度量的值 - 这是您在WITH MEMBER表达式中定义的度量,它是NULL在定义完成之前,因此不会提供任何有用的条件。