Подсчет разных 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];
Как я могу изменить этот запрос для получения результатов, как в первой таблице?
2 ответа
Решение
Создайте вычисляемый член, который будет хранить количество уникальных 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]
В 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 для каждой категории продуктов:
Применительно к вашей ситуации я думаю, что это так:
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];