我无法理解FILTER功能在MDX中的工作原理。
以下是我的查询,该查询获取所有日历年中所有销售地区国家/地区的所有非空互联网订单计数值。
SELECT
NON EMPTY
{
Filter
(
{[Date].[Calendar].[Calendar Year].MEMBERS}
,
[Measures].[Internet Order Count] > 0
)
} ON COLUMNS
,[Sales Territory].[Sales Territory].[Country].MEMBERS
ON ROWS
FROM [Adventure Works]
WHERE
[Measures].[Internet Order Count];
这给了我所有的命令,因为我用0过滤,结果如下所示
CY 2010,CY 2011,CY 2012,CY 2013,CY 2014
France, 1 ,140 ,359 ,"1,917",67
Germany, ,175 ,339 ,"1,909",61
United Kingdom ,1 ,175 ,405 ,"2,377",73
Canada, 1 ,170 ,169 ,"2,856",179
United States, 5 ,770 ,867 ,"7,590",335
Australia, 6 ,786 ,"1,130","4,640",156
以csv格式输入结果,因为我目前在上传图片方面有限制。我是MDX的新手,我的目标是在Internet订单计数大于180的情况下过滤此结果集。
因此我现在将查询修改为 -
SELECT
NON EMPTY
{
Filter
(
{[Date].[Calendar].[Calendar Year].MEMBERS}
,
[Measures].[Internet Order Count] > 180
)
} ON COLUMNS
,[Sales Territory].[Sales Territory].[Country].MEMBERS
ON ROWS
FROM [Adventure Works]
WHERE
[Measures].[Internet Order Count];
这个给了我以下输出 -
CY 2011,CY 2012,CY 2013,CY 2014
France, 140 ,359 ,"1,917",67
Germany, 175 ,339 ,"1,909",61
United Kingdom ,175 ,405 ,"2,377",73
Canada, 170 ,169 ,"2,856",179
United States, 770 ,867 ,"7,590",335
Australia, 786 ,"1,130","4,640",156
基本上,2010年的CY条目被过滤掉了,而我期望的是没有(法国,CY 2011),(德国,2011年),(英国,2011年),(加拿大,2011年)的入门/空白值等等,当然也类似于2014年CY的一些条目,结果相似。
我正在使用AdventureWorksDW2014多维数据集。我该怎么做呢?
答案 0 :(得分:3)
您只会过滤Internet订单数超过180的年份,而不是国家/地区维度。试试这个:
SELECT
NON EMPTY [Date].[Calendar].[Calendar Year].MEMBERS ON COLUMNS,
[Sales Territory].[Sales Territory].[Country].MEMBERS ON ROWS
FROM (
SELECT
Filter (
(
[Date].[Calendar].[Calendar Year].MEMBERS ,
[Sales Territory].[Sales Territory].[Country].MEMBERS
),
[Measures].[Internet Order Count] > 180
) ON 0
FROM [Adventure Works]
)
WHERE
[Measures].[Internet Order Count]
答案 1 :(得分:3)
您的第一个脚本实际上就是以下内容。不需要任何过滤器,因为它是一个计数所以< 0永远不会发生:
SELECT
NON EMPTY
[Date].[Calendar].[Calendar Year].MEMBERS ON 0
,[Sales Territory].[Sales Territory].[Country].MEMBERS ON 1
FROM [Adventure Works]
WHERE
[Measures].[Internet Order Count];
在旧版AdvWrks
中,会产生以下结果:
AI实际上认为你更喜欢以下内容:
WITH
MEMBER [Measures].[transformToNull] AS
IIF
(
[Measures].[Internet Order Count] <= 180
,null
,[Measures].[Internet Order Count]
)
SELECT
NON EMPTY
{[Date].[Calendar].[Calendar Year].MEMBERS} ON COLUMNS
,[Sales Territory].[Sales Territory].[Country].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE
[Measures].[transformToNull];
结果如下: