SSRS 小于 MDX 查询中的运算符
SSRS Less Than Operator in MDX Query
我想报告小于特定(参数化)日期的日期。但有不少于运营商。
我选择了范围(包括)并检查了参数。我已将文本参数转换为 DateTime [根据本文]
(https://www.mssqltips.com/sqlservertip/3451/calendar-date-picker-for-mdx-based-sql-server-reporting-services-reports/)
这是我查询的一部分。
SELECT (
STRTOMEMBER(@FromWorkItemSystemCreatedDate, CONSTRAINED)
:
STRTOMEMBER(@ToWorkItemSystemCreatedDate, CONSTRAINED)
) ON COLUMNS
我隐藏了 FromWorkItemSystemCreatedDate
参数并将其默认值设置为最小日期。
当我选择 ToWorkItemSystemCreatedDate
中不存在的日期时。它给出了错误。
例如我的 table 有 3 个项目。他们的创建日期;
01.01.2015,
02.01.2015,
03.01.2015,
当我选择 FromWorkItemSystemCreatedDate
作为 03.01.2015
时,它有效(returns 2 项)。但是当我选择 10.01.2015
时,我得到一个错误,因为没有项目 10.01.2015
有什么方法可以实现“创建日期 < 参数值”?
首先,您需要检查 @ToWorkItemSystemCreatedDate
参数是否获取 "actual" 日期。如果不是,则不能使用它,因为该成员不存在。
在这种情况下,您需要 select 从 @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
始终在范围内或大于最大日期。
但它可能需要一些调整。
用户 不小心 给出的日期小于日期 table.
To Date
大于最小日期,小于较大日期但不在范围内。当您的日期 table.
有空档时,就会发生这种情况
在这种情况下,您应该声明一个额外的(隐藏的)参数并将其设置为日期 table 中可能的最大日期。我不会深入探讨,因为您已经具备将参数设置为最小日期的逻辑。逻辑几乎是一样的。
在上述两种情况下,您可能都想报错。使用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]
您可以自由使用这些度量的值并修改查询以将 suitable 消息返回给最终用户,或者您甚至可以考虑稍微修改查询并显示您想要的任何内容到。只是我的两分钱。
我想报告小于特定(参数化)日期的日期。但有不少于运营商。
我选择了范围(包括)并检查了参数。我已将文本参数转换为 DateTime [根据本文] (https://www.mssqltips.com/sqlservertip/3451/calendar-date-picker-for-mdx-based-sql-server-reporting-services-reports/)
这是我查询的一部分。
SELECT (
STRTOMEMBER(@FromWorkItemSystemCreatedDate, CONSTRAINED)
:
STRTOMEMBER(@ToWorkItemSystemCreatedDate, CONSTRAINED)
) ON COLUMNS
我隐藏了 FromWorkItemSystemCreatedDate
参数并将其默认值设置为最小日期。
当我选择 ToWorkItemSystemCreatedDate
中不存在的日期时。它给出了错误。
例如我的 table 有 3 个项目。他们的创建日期;
01.01.2015,
02.01.2015,
03.01.2015,
当我选择 FromWorkItemSystemCreatedDate
作为 03.01.2015
时,它有效(returns 2 项)。但是当我选择 10.01.2015
时,我得到一个错误,因为没有项目 10.01.2015
有什么方法可以实现“创建日期 < 参数值”?
首先,您需要检查 @ToWorkItemSystemCreatedDate
参数是否获取 "actual" 日期。如果不是,则不能使用它,因为该成员不存在。
在这种情况下,您需要 select 从 @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
始终在范围内或大于最大日期。
但它可能需要一些调整。
用户 不小心 给出的日期小于日期 table.
To Date
大于最小日期,小于较大日期但不在范围内。当您的日期 table. 有空档时,就会发生这种情况
在这种情况下,您应该声明一个额外的(隐藏的)参数并将其设置为日期 table 中可能的最大日期。我不会深入探讨,因为您已经具备将参数设置为最小日期的逻辑。逻辑几乎是一样的。
在上述两种情况下,您可能都想报错。使用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]
您可以自由使用这些度量的值并修改查询以将 suitable 消息返回给最终用户,或者您甚至可以考虑稍微修改查询并显示您想要的任何内容到。只是我的两分钱。