2015-07-09 4 views
1

У меня есть куб с информацией о посещении веб-сайта с IP-адресами и страной.Подсчитайте различные IP-адреса в каждой стране

Я хотел бы получить количество уникальных IP-адресов для каждой страны, как в следующем столбце.

+-------------+----------+ 
| country  | count IP | 
+-------------+----------+ 
| germany  | 2  | 
| netherlands | 3  | 
+-------------+----------+ 

Но все, что я придумал до сих пор это:

+-------------+---------------+--------+ 
| country  | IP   | visits | 
+-------------+---------------+--------+ 
| germany  | 65.49.14.152 | 5  | 
|    | 66.55.144.187 | 12  | 
| netherlands | 93.114.46.11 | 2  | 
|    | 93.115.94.85 | 5  | 
|    | 141.105.1.7 | 1  | 
+-------------+---------------+--------+ 

, который производится этим запросом:

SELECT 
    NON EMPTY 
    {Hierarchize({[Measures].[Visits]})} ON COLUMNS 
,NON EMPTY 
    CrossJoin 
    (
     [Geografy.Localizacion].[Country].MEMBERS 
    ,[RemoteClient].[IP].MEMBERS 
    ) ON ROWS 
FROM [VisitsCube]; 

Как я могу изменить этот запрос для получения результатов, как в первом столбце?

ответ

0

Создайте расчетный элемент, который будет содержать подсчеты на уникальный IP-адрес. И от оси строк, удалите [RemoteClient].[IP].Members.

WITH MEMBER Measures.[Count IP] AS 
SUM(Distinct(EXISTING [RemoteClient].[IP].Members), [Measures].[Visits]) 

SELECT NON EMPTY [Geografy.Localizacion].[Country].Members ON 1, 
NON EMPTY Measures.[Count IP] ON 0 
FROM [VisitsCube] 
+0

Это работает, если я удаляю 'СУЩЕСТВУЮЩИЙ'. Если нет: синтаксическая ошибка (на Pentaho Saiku). – mgr326639

0

В AdvWrks я тестировал этот метод:

WITH 
    MEMBER [Measures].[CountX] AS 
    Sum 
    (
     [Customer].[Customer Geography].[City] 
    ,IIF 
     (
     NOT isempty([Measures].[Internet Sales Amount]) 
     ,1 
     ,null 
    ) 
    ) 
SELECT 
    {[Measures].[CountX]} ON 0 
,NON EMPTY 
     [Product].[Product Categories].[Category] 
ON 1 
FROM [Adventure Works] 
WHERE 
    [Geography].[Geography].[Country].&[Canada]; 

Это дает подсчет количества городов, где был Интернет по продажам Amoutn для каждой категории продуктов:

enter image description here

Применяя к вашей ситуации, я думаю, что это так:

WITH 
    MEMBER [Measures].[CountX] AS 
    Sum 
    (
     [RemoteClient].[IP].MEMBERS 
    ,IIF 
     (
     NOT isempty([Measures].[Visits]) 
     ,1 
     ,null 
    ) 
    ) 
SELECT 
    NON EMPTY 
    [Geografy.Localizacion].[Country].MEMBERS ON 1 
,NON EMPTY 
    [Measures].[CountX] ON 0 
FROM [VisitsCube]; 
+0

Это тоже сработало. Благодарю. – mgr326639

+0

Это должно работать быстрее. – whytheq

Смежные вопросы