Sql 如何获取mdx中相同成员的数量?

Sql 如何获取mdx中相同成员的数量?,sql,mdx,cube,olap-cube,Sql,Mdx,Cube,Olap Cube,我想确定两个日期之间的特定工作日(如周一、周二等)的数量。我认为下面这样的方法应该可以工作,但成员返回1 我做错了什么 WITH MEMBER measures.NumberOfSameWeekDays AS Count([Dim Date].[Day Of Week].CurrentMember) SELECT measures.NumberOfSameWeekDays ON COLUMNS ,[Dim Date].[Day Of Week].[Day Of Week

我想确定两个日期之间的特定工作日(如周一、周二等)的数量。我认为下面这样的方法应该可以工作,但成员返回1

我做错了什么

WITH 
  MEMBER measures.NumberOfSameWeekDays AS 
    Count([Dim Date].[Day Of Week].CurrentMember) 
SELECT 
  measures.NumberOfSameWeekDays ON COLUMNS
 ,[Dim Date].[Day Of Week].[Day Of Week] ON ROWS
FROM [test]
WHERE 
  (
    [Dim Client].[Common Client UID].&[{ED8822E7-2873-4388-BC3A-CC553D939FC4}]
   ,
    [Dim Date].[Date Int].&[20150701] : [Dim Date].[Date Int].&[20150731]
  );

这是正在发生的事情的证明:

WITH 
  MEMBER measures.NumberOfSameWeekDays AS 
    Count([Date].[Day of Week].CurrentMember) 
  MEMBER measures.WeekDayCurrentMem AS 
    [Date].[Day of Week].CurrentMember.Member_Caption 
SELECT 
  {
    measures.NumberOfSameWeekDays
   ,measures.WeekDayCurrentMem
  } ON COLUMNS
 ,[Date].[Day of Week].[Day of Week] ON ROWS
FROM [Adventure Works]
WHERE 
    [Date].[Calendar].[Date].&[20050101]
  : 
    [Date].[Calendar].[Date].&[20050116];
以下是上述结果:

以下是上述行为的解决方案:

WITH 
  MEMBER measures.NumberOfSameWeekDays AS 
    Count
    (
      (EXISTING 
        [Date].[Day of Week].CurrentMember * [Date].[Calendar].[Date])
    ) 
SELECT 
  {
    measures.NumberOfSameWeekDays
  } ON COLUMNS
 ,[Date].[Day of Week].[Day of Week] ON ROWS
FROM [Adventure Works]
WHERE 
    [Date].[Calendar].[Date].&[20050101]
  : 
    [Date].[Calendar].[Date].&[20050131];
这将返回以下内容:


苏拉夫答案的简化版本——尽管仍然相当复杂——由于使用的是迭代生成,因此速度可能较慢:

WITH 
  MEMBER Measures.CountOfDays AS 
    Generate
    (
      (EXISTING 
        [Date].[Date].[Date].MEMBERS)
     ,[Date].[Day of Week]
     ,ALL
    ).Count 
SELECT 
  Measures.CountOfDays ON 0
 ,[Date].[Day of Week].[Day of Week].MEMBERS ON 1
FROM [Adventure Works]
WHERE 
  [Date].[Calendar].&[2005] : [Date].[Calendar].&[2006];

冒险作品版本:

WITH MEMBER Measures.CountOfDays  AS
GENERATE
    (
     EXISTING [Date].[Date].[Date].MEMBERS,
     EXISTING [Date].[Day of Week].[Day of Week].MEMBERS
     ,ALL
    ).COUNT


SELECT Measures.CountOfDays ON 0
,[Date].[Day of Week].[Day of Week].MEMBERS ON 1
FROM [Adventure Works]  
WHERE [Date].[Calendar].&[2005]: [Date].[Calendar].&[2006]

GENERATE
部分获取当前上下文中每周的所有天数,并基于您可能拥有的任何筛选器

这将始终返回1:
Count(.currentmember)
…因为有1个成员当前在结果集的上下文中。您能给出一个代码示例吗?
。currentmember
是一个函数,它返回行中的成员-如果行中有一个成员,则返回1。不需要示例。在表示星期二的行的脚本中,
.Currentmember
函数正在计算它在星期二行中有多少次星期二。。。。1.让我修改我的答案..暂时删除.什么都没有。实际上我觉得你的更好。添加我的答案只是为了满足我对解决方案的初步理解。有趣的是,如果在
生成中,您将
[Date].[Day of Week].
替换为
[Date].[Day of Week].[Day of Week].
,您将得到完全不同的解决方案!奇怪的我猜在后一种情况下,[Date].[Day of Week].CURRENTMEMBER或现有的
是隐式的。你怎么看?没问题-我在我的答案中添加了一个更简单的版本,并附带了一个关于
Generate
的小健康警告。这里有一个给你:完成..现在把我的cookie给我;)