КОЛИЧЕСТВО МНОГОМЕРНЫХ ВЫРАЖЕНИЙ В ОТФИЛЬТРОВАННОМ НАБОРЕ

#filter #count #mdx

#Фильтр #количество #многомерные ВЫРАЖЕНИЯ

Вопрос:

У меня есть измерение сотрудника (22 тыс. строк), которое имеет атрибут [страна], [регион]. моя таблица фактов [LastAccess] проста, просто регистрирует данные сотрудника, измерение [количество строк] — это количество строк. Я хочу подсчитать, сколько сотрудников вошли на сайт дважды [два посещения], пять раз [Пять посещений], более пяти [Больше посещений] за определенный период времени, сгруппировать по регионам и странам. В SQL я использовал временную таблицу для подсчета посещений для каждого сотрудника, а затем использовал запрос like для отображения :

  SUM(IIF([Visits]=2,1,0)) AS [TwoVisits],   
 SUM(IIF([Visits]=5,1,0)) AS [FiveVisits],
 SUM(IIF([Visits]>5,1,0)) AS [MoreVisits],    
 FROM @EmployeeVisits EVPM
 INNER JOIN [dbo].[tblEmployeeData] ED ON EVPM.[AltEmployeeId] = ED.         [AltEmployeeId]
  

ГРУППИРОВАТЬ ПО ED.[BusinessRegion], РЕД.[КОД страны] )

Результат должен быть таким:

 Region  Country  TwoVisits   FiveVisits   More Visits
1     US          1261        1054         913    
2    IN          1829        1576         1441    
3    GB          344          281         237 
  

Я разработал такой запрос :

 WITH 
MEMBER [Measures].[twoVisits] AS 
case when ([Measures].[Last Access 1 Count]) =2
    then 1
    else 0
end
MEMBER [Measures].[twoVisitsCount] AS
SUM([Employee].[Alt Employee Id].[Alt Employee Id].Members, [Measures].    [twoVisits])

SELECT  
{[Measures].[twoVisitsCount]}ON 0,
NON EMPTY ({[Employee].[Business Region].amp;    [1],[Employee].[Business Region].amp;[2],[Employee].[Business Region].amp;[3]},
{[Employee].[Country Code].[Country Code].Members}) ON 1
FROM 
 (
     select(
        {[Employee].[Status Id].amp;[1],[Employee].[Status Id].amp;[3],[Employee].[Status Id].amp;[4]},          
        {[Employee].[Employee Type].amp;[13],[Employee].[Employee Type].amp;[29],
        [Employee].[Employee Type].amp;[9],[Employee].[Employee Type].amp;[25],
        [Employee].[Employee Type].amp;[5],[Employee].[Employee Type].amp;[1],
        [Employee].[Employee Type].amp;[14],[Employee].[Employee Type].amp;[30],
        [Employee].[Employee Type].amp;[10],[Employee].[Employee Type].amp;[26],
        [Employee].[Employee Type].amp;[6],[Employee].[Employee Type].amp;[2]},
        {[Date].[Date Key].amp;[20160801]:[Date].[Date Key].amp;[20160803]}
        ) on 0
FROM [OLAP Prep]
)
  

Но после долгого выполнения это дало мне это:

         twoVisitsCount

1   CA  36651
1   CL  36651
1   CO  36651
1   CR  36651
1   DO  36651
1   EC  36651
1   GT  36651
1   HN  36651
1   KY  36651
2   AU  36651
2   BD  36651
2   CN  36651
2   HK  36651
2   ID  36651
2   IN  36651
2   JP  36651
2   KR  36651
3   99  36651
3   AE  36651
3   AL  36651
  

Все значения разбивки одинаковы.

Ответ №1:

Попробуйте изменить это вычисление следующим образом.

 MEMBER [Measures].[twoVisitsCount] AS
SUM(Existing [Employee].[Alt Employee Id].[Alt Employee Id].Members, [Measures].    [twoVisits])
  

Ваши вычисления зациклены на всех сотрудниках. Добавление ключевого слова будет выполняться только для сотрудников в этом бизнес-регионе и стране. Existing