如何获取mdx中相同成员的数量?
How to get number of the same members in mdx?
我想确定两个日期之间的特定工作日(例如星期一、星期二等....)的数量。我认为像下面这样的东西应该有用,但是成员 returns 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];
这个 returns 下面的:
Sourav 答案的简化版本 - 尽管仍然相当复杂 - 并且由于它使用迭代生成可能会很慢:
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];
Adventure Works 版本:
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
部分根据您可能拥有的任何过滤器获取当前上下文中的所有星期几。
我想确定两个日期之间的特定工作日(例如星期一、星期二等....)的数量。我认为像下面这样的东西应该有用,但是成员 returns 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];
这个 returns 下面的:
Sourav 答案的简化版本 - 尽管仍然相当复杂 - 并且由于它使用迭代生成可能会很慢:
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];
Adventure Works 版本:
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
部分根据您可能拥有的任何过滤器获取当前上下文中的所有星期几。