Sql 如何获取mdx中相同成员的数量?
我想确定两个日期之间的特定工作日(如周一、周二等)的数量。我认为下面这样的方法应该可以工作,但成员返回1 我做错了什么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
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给我;)