我想创建一个MDX查询,该查询返回两个日期之间每个月的第15天的度量值。
例如,2010-01-01和2016-12-15的结果应如下所示:
2016-12-15: 123
2016-11-15: 789
2016-10-15: 556
(...)
2010-01-15: 456
我知道我可以使用DateDiff()函数计算两个日期之间的月数。另外,我可以使用ParallelPeriod()函数来获取上个月的值。
但是我不知道如何将这些值一起使用并且#34;迭代"从1到DateDiff()的结果是在" Days"中创建多个ParallelPeriod()调用。集。
WITH
MEMBER NumberOfMonths AS
DateDiff("m",
[Calendar].[Day].&[20100101].MemberValue,
[Calendar].[Day].&[20160315].MemberValue
)
SET Days AS {
PARALLELPERIOD([Calendar].[Month], 1, [Calendar].[Day].&[20160315]),
PARALLELPERIOD([Calendar].[Month], 2, [Calendar].[Day].&[20160315]),
PARALLELPERIOD([Calendar].[Month], 3, [Calendar].[Day].&[20160315])
-- (...) How to generate this set automatically, using NumberOfMonths?
}
SELECT
{ Days } ON 0,
{ Quantity } ON 1
FROM [MyCube]
任何帮助都将不胜感激。
答案 0 :(得分:3)
这是一个有趣的问题,虽然有一个解决方案,但阅读MDX参考只是让我失明了。
以下是如何获得每月第十五天的一套:
WITH SET Months
AS
[Calendar].[Month].Members
SET FifteenthDays AS
GENERATE(
Months,
StrToSet('HEAD(DESCENDANTS(Months.Current,[Calendar].[Day]),1).Item(0).Lead(14)')
)
SELECT {} ON 0,
FifteenthDays ON 1
FROM TheCube
您可以通过过滤初始命名集" Months"来调整此值以满足您的要求。使用您的日期参数。
这是&#39>正在进行的事情:
答案 1 :(得分:0)
MDX方法№1(具有总和聚合的计算成员):
WITH
MEMBER [Measures].[Quantity15] AS
SUM(
[Calendar].[Day].[Day].Members,
IIF(
Right([Calendar].[Day].CurrentMember.Properties('Key'),2) = "15",
[Measures].[Quantity],
NULL
)
)
SELECT
NON EMPTY { [Calendar].[Day].&[20100101]:[Calendar].[Day].&[20160315] } ON 0,
{ [Measures].[Quantity15] } ON 1
FROM [MyCube]
MDX方法№2(没有新成员,过滤集合):
SELECT
NONEMPTY(
{[Calendar].[Day].&[20100101]:[Calendar].[Day].&[20160315]},
IIF(
Right([Calendar].[Day].CurrentMember.Properties('Key'),2) = "15",
1,
NULL
)
) ON 0,
{ [Measures].[Quantity] } ON 1
FROM [MyCube]