首先,您需要检查@ToWorkItemSystemCreatedDate 参数是否获取“实际”日期。如果不是,您将无法使用它,因为该成员不存在。
在这种情况下,您需要选择从 @FromWorkItemSystemCreatedDate 开始到结束的所有日期(即 null)
WITH MEMBER measures.existingdate as
IIF(
ISSIBLING //Check whether the "To" date exists!
(
STRTOMEMBER(@FromWorkItemSystemCreatedDate, CONSTRAINED),
STRTOMEMBER(@ToWorkItemSystemCreatedDate, CONSTRAINED)
) = True,
1,
NULL
)
select
IIF(
measures.existingdate = 1,
STRTOMEMBER(@FromWorkItemSystemCreatedDate, CONSTRAINED) : STRTOMEMBER(@ToWorkItemSystemCreatedDate, CONSTRAINED),
STRTOMEMBER(@FromWorkItemSystemCreatedDate, CONSTRAINED) : NULL
) ON 0,
{} ON 1
from [YourCube]
编辑
以上假设To date始终在范围内或大于最大日期。
但这可能需要一些调整。
用户意外给出的日期小于日期表中的最小日期。
To Date 大于最小日期,小于较大日期但不在范围内。当您的日期表中存在空白时,就会发生这种情况。
在这种情况下,您应该声明一个附加(隐藏)参数并将其设置为日期表中的最大可能日期。我不会深入探讨,因为您已经具备将参数设置为最小日期的逻辑。逻辑几乎相同。
在上述两种情况下,您可能都想引发错误。使用DateDiff 函数得出结论。
假设另一个可以捕获最大创建日期的参数是@FromWorkItemSystemCreatedMaxDate
完整的查询是:
WITH MEMBER measures.existingdate as
IIF(
ISSIBLING //Check whether the "To" date exists!
(
STRTOMEMBER(@FromWorkItemSystemCreatedDate, CONSTRAINED),
STRTOMEMBER(@ToWorkItemSystemCreatedDate, CONSTRAINED)
) = True,
1,
NULL
)
MEMBER Measures.IsBackDated AS
IIF(
measures.existingdate = NULL AND DateDiff( //Date not in table is lesser than the minimum
"d",
STRTOMEMBER(@FromWorkItemSystemCreatedDate, CONSTRAINED),
STRTOMEMBER(@ToWorkItemSystemCreatedDate, CONSTRAINED)
) > 0 ,
1,
IIF(
measures.existingdate = NULL AND DateDiff( //Date not in table and is greater than the maximum
"d",
STRTOMEMBER(@ToWorkItemSystemCreatedDate, CONSTRAINED),
STRTOMEMBER(@FrontWorkItemSystemCreatedMaxDate, CONSTRAINED)
) > 0 ,
-1, //will return -1 in this case
2//When the date is greater than minimum,
//smaller than maximum(when there are "holes" in dates table)
)
)
select
IIF(
measures.existingdate = 1,
STRTOMEMBER(@FromWorkItemSystemCreatedDate, CONSTRAINED) : STRTOMEMBER(@ToWorkItemSystemCreatedDate, CONSTRAINED),
IIF( //Nested IIF to check for date greater than max date
Measures.IsBackDated = -1,
{STRTOMEMBER(@FromWorkItemSystemCreatedDate, CONSTRAINED) : NULL}, //Measures.IsBackDated = -1
null
)
) ON 0,
{} ON 1
from [YourCube]
您可以随意使用这些度量的值并修改查询以将合适的消息返回给最终用户,或者您甚至可以考虑对查询进行更多修改并显示您想要的任何内容。只是我的两分钱。