[英]How to get number of the same members in mdx?
我想确定两个日期之间的特定工作日(例如星期一,星期二等)的数量。 我认为类似以下内容的方法应该起作用,但是成员返回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];
这将返回以下内容:
Sourav答案的简化版本-尽管仍然相当复杂-但由于它使用了迭代生成(Generate),因此可能会很慢:
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
部分会根据当前上下文并根据您可能拥有的任何过滤器来获取星期GENERATE
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.