2016-04-28 79 views
0

我们想要统计“库存单位”大于0的那些星期。
我已经把它放在了一起,但它不是很有效,它计算了一个物品的所有周数,而不仅仅是库存> 0的那些物品。尝试过的一些过滤器,但他们总是导致#ERROR作为结果MDX用过滤器计数?

WITH 
    SET [PreviousSixWeeks] AS 
    Tail 
    (
     Filter 
     (
     [Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Week] 
     , 
     [Measures].[Inventory Units] > 0 
    ) 
    ,6 
    ) 
    MEMBER [Measures].[INVWeekCount] AS 
    DistinctCount(PreviousSixWeeks*[Measures].[Inventory Units]*[Item].[Item Code]) 
SELECT 
    {[Measures].[INVWeekCount]} ON COLUMNS 
,{[Item].[Item Code].[Item Code]} ON ROWS 
FROM 
(
    SELECT 
    {[Location].[Location].&[64]} ON COLUMNS 
    FROM 
    (
    SELECT 
     { 
     [Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[2].&[8] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[2].&[9] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[3].&[10] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[3].&[11] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[3].&[12] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[3].&[13] 
     } ON COLUMNS 
    FROM [RFP] 
) 
); 

回答

0

试试和库存数周,确保它返回预期的结果,然后再添加任何你想要的过滤器。

WITH MEMBER [Measures].[InvWeekCount] AS 
     FILTER([Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Week].MEMBERS, 
     [Measures].[Inventory Units]>0).COUNT 
    SELECT [Measures].[InvWeekCount] ON COLUMNS, 
      [Item].[Item Code].[Item Code].MEMBERS ON ROWS 
    FROM [Test Cube] 
0

更好地避免Filter,如果你能为它的性能是不是很大:

WITH 
    SET [PreviousSixWeeks] AS 
    Tail 
    (
     [Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Week].MEMBERS 
    ,6 
    ) 
    MEMBER [Measures].[INVWeekCount] AS 
    Count(NonEmpty((EXISTING PreviousSixWeeks),[Measures].[Inventory Units])) 
SELECT 
    {[Measures].[INVWeekCount]} ON COLUMNS 
,{[Item].[Item Code].[Item Code]} ON ROWS 
FROM 
(
    SELECT 
    {[Location].[Location].&[64]} ON COLUMNS 
    FROM 
    (
    SELECT 
     { 
     [Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[2].&[8] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[2].&[9] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[3].&[10] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[3].&[11] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[3].&[12] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[3].&[13] 
     } ON COLUMNS 
    FROM [RFP] 
) 
); 

但是,这是一个过滤条件做计数的更好的方式 - 它执行好了很多:

WITH 
    MEMBER [Measures].[InvWeekCount] AS 
    Sum 
    (
     Time.[Yr-Qtr-Per-Wk-Day].[Fiscal Week].MEMBERS 
    ,IIF 
     (
     (NOT 
      IsEmpty([Measures].[Inventory Units])) 
     ,1 
     ,0 
    ) 
    ) 
SELECT 
    [Measures].[InvWeekCount] ON COLUMNS 
,[Item].[Item Code].[Item Code].MEMBERS ON ROWS 
FROM 
(
    SELECT 
    {[Location].[Location].&[64]} ON COLUMNS 
    FROM 
    (
    SELECT 
     { 
     [Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[2].&[8] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[2].&[9] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[3].&[10] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[3].&[11] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[3].&[12] 
     ,[Time].[Yr-Qtr-Per-Wk-Day].[Fiscal Year].&[2016].&[1].&[3].&[13] 
     } ON COLUMNS 
    FROM [RFP] 
) 
); 

在简单AdvWrks代码这方面是你使用的是什么:

WITH 
    MEMBER [Measures].[InvWeekCount] AS 
    Filter 
    (
     [Product].[Product].[Product] 
    , 
     [Measures].[Internet Order Quantity] > 0 
    ).Count 
SELECT 
    [Measures].[InvWeekCount] ON COLUMNS 
,[Customer].[Customer Geography].[Country] ON ROWS 
FROM [Adventure Works]; 

但这是推荐的有效方法:

WITH 
    MEMBER [Measures].[InvWeekCount] AS 
    Sum 
    (
     [Product].[Product].[Product] 
    ,IIF 
     (
     (NOT 
      IsEmpty([Measures].[Internet Order Quantity])) 
     ,1 
     ,NULL 
    ) 
    ) 
SELECT 
    [Measures].[InvWeekCount] ON COLUMNS 
,[Customer].[Customer Geography].[Country] ON ROWS 
FROM [Adventure Works];