VKa*_*hik 5 sql-server ssas mdx adventureworks
我无法理解 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];
Run Code Online (Sandbox Code Playgroud)
这给了我所有订单,因为我按 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
Run Code Online (Sandbox Code Playgroud)
由于目前上传图像受到限制,因此我将结果以 csv 格式输入。我是 MDX 新手,我的目标是过滤互联网订单数大于 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];
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出 -
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
Run Code Online (Sandbox Code Playgroud)
基本上 CY 2010 条目被过滤掉,而我期望的不是(法国,CY 2011)、(德国,CY 2011)、(英国,CY 2011)、(加拿大,CY 2011)等的条目/空白值。当然,对于属于 CY 2014 的一些条目也有类似的结果。
我正在使用 AdventureWorksDW2014 立方体。我该怎么做呢?
您仅过滤互联网订单数超过 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]
Run Code Online (Sandbox Code Playgroud)