#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