2016-06-01 6 views
0

Der Versuch, eine berechnete Kennzahl für die Verwendung in einem KPI zu erstellen. Die Kennzahl sollte alle Aufrufe (Servicedesk-Tickets) zählen, deren Laufzeit länger als 7 Tage ist.Langsame MDX-Zählung beim Erweitern der Abfrage

Getestet die Maßnahme mit dieser Abfrage, die schnell ausgeführt wird (< 3 Sekunden).

WITH MEMBER [Measures].[Count of Calls long runtime] AS   
     Count(
      Filter(
       [Call Details].[Call Number].MEMBERS 
       , [Measures].[Closed Call Run Time (days)] > 7 
      ) 
     ) 
SELECT 
    { 
     [Count of Calls long runtime] 
    } ON 0 
FROM 
    [Business Intelligence] 

jedoch beim Hinzufügen von anderen Mitgliedern der Abfrage, es für immer plötzlich nimmt abzuschließen: 50 Kunden

WITH MEMBER [Measures].[Count of Calls long runtime] AS   
Count(
    Filter(
     (
      { 
       [Ipc Categorisation].[Categorisation].[Subcategory].&[222] 
       ,[Ipc Categorisation].[Categorisation].[Subcategory].&[484] 
      } 
      , [Call Details].[Call Number].[Call Number].MEMBERS 
     ) 
     , [Measures].[Closed Call Run Time (days)] > 7 
    ) 
) 
SELECT 
    { 
     [Count of Calls long runtime] 
    } ON 0 
    , 
    { 
     [Customer].[Customer].[Customer] 
    } ON 1 
FROM 
    [Business Intelligence] 
WHERE 
    [Date].[Month Calendar].[Year].&[2016] 

Es sollte etwa 40 von 30000 Anrufe zeigt sich, verteilt auf.

Wenn ich [Count of Calls lange Laufzeit] zu einem anderen Takt (berechnet oder in der Tat-Tabelle) ändern, wird die Abfrage schnell ausgeführt.

Ich würde gerne verstehen, warum das passiert. Was kann ich tun, um das zu beheben?

Antwort

0

FILTER ist bestenfalls zu vermeiden. Es erzwingt Berechnungen im zellenweisen Modus auszuführen. Lassen Sie uns versuchen, die Berechnung zu ändern, in Block Berechnungsmodus auszuführen:

WITH MEMBER [Measures].IsGrt7 AS 
IIF 
(
    [Measures].[Closed Call Run Time (days)] > 7, 
    1, 
    NULL 
) 

MEMBER [Measures].[Count of Calls long runtime] AS   
SUM 
    (  
    { 
    [Ipc Categorisation].[Categorisation].[Subcategory].&[222] 
    ,[Ipc Categorisation].[Categorisation].[Subcategory].&[484] 
    } * [Call Details].[Call Number].[Call Number].MEMBERS 
    , 
    [Measures].IsGrt7   
) 

Um mehr zu diesem Thema zu lesen, see here.

0

auch ein Versuch wert, es in einem nicht leeren Fütterung genannt gesetzt, bevor die caculation schlagen:

WITH 
SET [CallNonEmpty] AS 
NONEMPTY(
    { 
     [Ipc Categorisation].[Categorisation].[Subcategory].&[222] 
    ,[Ipc Categorisation].[Categorisation].[Subcategory].&[484] 
    } 
    *[Call Details].[Call Number].[Call Number].MEMBERS 
, [Measures].[Closed Call Run Time (days)] 
) 
MEMBER [Measures].[Count of Calls long runtime] AS 
SUM(
    EXISTING [CallNonEmpty], 
    IIF(
    [Measures].[Closed Call Run Time (days)] > 7 
    ,1 
    ,NULL 
    ) 
)   
SELECT 
    [Count of Calls long runtime] ON 0, 
    [Customer].[Customer].[Customer] ON 1 
FROM [Business Intelligence] 
WHERE 
    [Date].[Month Calendar].[Year].&[2016];