MDX 小于等于过滤器表达式不起作用
MDX Less Than Equal to Filter Expression Not Working
我在 SQL Server 2016 上有以下 MDX 查询 运行:
SELECT NON EMPTY(Measures.[Enrolments Count]) ON COLUMNS,
NON EMPTY FILTER ( [Term Record Creation].[Year].CHILDREN * [Term Record Creation].[Week].CHILDREN *
[Term Enrolments].[Term Year].CHILDREN ,
[Term Record Creation].[Week] <= 5)
DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM [Enrolments]
我试图只接受在一年中的第 5 周(该周是 ISO 周)之前创建的学期记录的注册。
Term Year
是学期开始的年份。它是术语记录创建维度之外的一列,即 [Term Record Creation].[Year]
和 [Term Record Creation].[Week]
.
我遇到的问题是过滤器正在执行某种过滤(因为我的度量列很低),但我仍然在一年中的所有星期都得到一个反对他们的数字,例如我在结果集中有如下一行:
Creation Year Creation Week Term Year Enrolments Count
2012 16 2013 4
如果有人能解释问题所在并提供解决方案,我将不胜感激。
谢谢。
它不会工作:
[Term Record Creation].[Week] <= 5
您将周层次结构与数字进行比较。这没有意义。尝试如下操作:
Select
[Measures].[Enrolments Count] on columns,
Non Empty
Filter(
[Term Record Creation].[Week].[Week].Members,
Right(
[Term Record Creation].[Week].CurrentMember.Member_Caption,
2
) <= "05"
) *
[Term Record Creation].[Year].[Year].Members *
[Term Enrolments].[Term Year].Children on rows
From [Enrolments]
也许尝试只过滤周:
SELECT
NON EMPTY
Measures.[Enrolments Count] ON COLUMNS
,NON EMPTY
[Term Record Creation].[Year].Children*
Filter
(
[Term Record Creation].[Week].Children
,
[Term Record Creation].[Week] <= 5
)*
[Term Enrolments].[Term Year].Children ON ROWS
FROM [Enrolments];
尽管我认为 Daylo 是正确的,因为您需要使用密钥:
SELECT
NON EMPTY
Measures.[Enrolments Count] ON COLUMNS
,NON EMPTY
[Term Record Creation].[Year].Children*
Filter
(
[Term Record Creation].[Week].Children
,
[Term Record Creation].[Week].CURRENTMEMBER.MEMBER_KEY <= 5
)*
[Term Enrolments].[Term Year].Children ON ROWS
FROM [Enrolments];
在我们的立方体中,一周的关键是这样的201709
所以这可能会更好:
SELECT
NON EMPTY
Measures.[Enrolments Count] ON COLUMNS
,NON EMPTY
[Term Record Creation].[Year].Children*
Filter
(
[Term Record Creation].[Week].Children
,
Cint([Term Record Creation].[Week].CurrentMember.Member_Caption) <= 5
)*
[Term Enrolments].[Term Year].Children ON ROWS
FROM [Enrolments];
好的 - 最后一种方法可以针对 AdvWrks
:
的类似脚本进行测试
SELECT
[Measures].[Internet Sales Amount] ON 0
,
[Product].[Product Categories].[Subcategory]
*
Filter
(
[Date].[Day of Month].[Day of Month]
,
Cint([Date].[Day of Month].CurrentMember.Member_Caption) > 10
) ON 1
FROM [Adventure Works];
结果:
我在 SQL Server 2016 上有以下 MDX 查询 运行:
SELECT NON EMPTY(Measures.[Enrolments Count]) ON COLUMNS,
NON EMPTY FILTER ( [Term Record Creation].[Year].CHILDREN * [Term Record Creation].[Week].CHILDREN *
[Term Enrolments].[Term Year].CHILDREN ,
[Term Record Creation].[Week] <= 5)
DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM [Enrolments]
我试图只接受在一年中的第 5 周(该周是 ISO 周)之前创建的学期记录的注册。
Term Year
是学期开始的年份。它是术语记录创建维度之外的一列,即 [Term Record Creation].[Year]
和 [Term Record Creation].[Week]
.
我遇到的问题是过滤器正在执行某种过滤(因为我的度量列很低),但我仍然在一年中的所有星期都得到一个反对他们的数字,例如我在结果集中有如下一行:
Creation Year Creation Week Term Year Enrolments Count
2012 16 2013 4
如果有人能解释问题所在并提供解决方案,我将不胜感激。
谢谢。
它不会工作:
[Term Record Creation].[Week] <= 5
您将周层次结构与数字进行比较。这没有意义。尝试如下操作:
Select
[Measures].[Enrolments Count] on columns,
Non Empty
Filter(
[Term Record Creation].[Week].[Week].Members,
Right(
[Term Record Creation].[Week].CurrentMember.Member_Caption,
2
) <= "05"
) *
[Term Record Creation].[Year].[Year].Members *
[Term Enrolments].[Term Year].Children on rows
From [Enrolments]
也许尝试只过滤周:
SELECT
NON EMPTY
Measures.[Enrolments Count] ON COLUMNS
,NON EMPTY
[Term Record Creation].[Year].Children*
Filter
(
[Term Record Creation].[Week].Children
,
[Term Record Creation].[Week] <= 5
)*
[Term Enrolments].[Term Year].Children ON ROWS
FROM [Enrolments];
尽管我认为 Daylo 是正确的,因为您需要使用密钥:
SELECT
NON EMPTY
Measures.[Enrolments Count] ON COLUMNS
,NON EMPTY
[Term Record Creation].[Year].Children*
Filter
(
[Term Record Creation].[Week].Children
,
[Term Record Creation].[Week].CURRENTMEMBER.MEMBER_KEY <= 5
)*
[Term Enrolments].[Term Year].Children ON ROWS
FROM [Enrolments];
在我们的立方体中,一周的关键是这样的201709
所以这可能会更好:
SELECT
NON EMPTY
Measures.[Enrolments Count] ON COLUMNS
,NON EMPTY
[Term Record Creation].[Year].Children*
Filter
(
[Term Record Creation].[Week].Children
,
Cint([Term Record Creation].[Week].CurrentMember.Member_Caption) <= 5
)*
[Term Enrolments].[Term Year].Children ON ROWS
FROM [Enrolments];
好的 - 最后一种方法可以针对 AdvWrks
:
SELECT
[Measures].[Internet Sales Amount] ON 0
,
[Product].[Product Categories].[Subcategory]
*
Filter
(
[Date].[Day of Month].[Day of Month]
,
Cint([Date].[Day of Month].CurrentMember.Member_Caption) > 10
) ON 1
FROM [Adventure Works];
结果: