2016-04-29 6 views
0

Я изучаю MDX, и у меня возникает вопрос о создании процента. В основном, я извлекаю данные из API Google Analytics для нескольких наборов страниц. Для каждого набора я извлекаю количество уникальных просмотров.MDX: Рассчитать процент от меры, присутствующей в том же измерении

столбцы SQL выглядит следующим образом:

  • Дата
  • DeviceCategory
  • среднего
  • uniquePageviews
  • операции
  • set_of_page (строки содержат название набора страниц. Для упрощения: 1. Сначала, 2. Второе, 3. Третье)
  • Марка (марка А, марка Б)
  • рынка (Market X, рынок Y)

Вот текущий вид у меня есть: http://i.stack.imgur.com/ZTC30.png

То, что я хочу иметь процент UniquePageviews из набора страницы 1 до 2 и от 2 до 3, так: UniquePageviews 2/Uniquepageviews 1 & UniquePageviews 3/Uniquepageviews 2.

http://i.stack.imgur.com/xf2gc.png

Знаете ли вы простой способ сделать это в MDX?

Вот код, у меня есть сейчас, чтобы отобразить количество просмотров страниц:

WITH 
SET [~COLUMNS_Brand_Brand] AS 
SET [~COLUMNS_Market_Market] AS 
    {[Market].[Market].Members} 
SET [~COLUMNS_set_of_page segment_set_of_page] AS 
    {[set_of_page].[set_of_page].Members} 
SET [~ROWS] AS 
    {[Date].[Date].Members} 
SELECT 
NON EMPTY NonEmptyCrossJoin([~COLUMNS_Brand_Brand], NonEmptyCrossJoin([~COLUMNS_Market_Market], [~COLUMNS_set_of_page_set_of_page])) ON COLUMNS, 
NON EMPTY [~ROWS] ON ROWS 
FROM [MySQL_Cube] 

Спасибо большое!

ответ

0

На данный момент ваш mdx подбирает мерку неявно? Все запросы mdx нуждаются в чем-то, чтобы измерить, поэтому ваш текущий скрипт должен выбрать меру куба по умолчанию - я назову это [Measures].[NumTransactions].
Также ваш первый SET кажется пустым. Поэтому предположим, в полной мере, явный сценарий:

WITH 
SET [~COLUMNS_Brand_Brand] AS {[Brand].[Brand].[All]} 
SET [~COLUMNS_Market_Market] AS 
    {[Market].[Market].Members} 
SET [~COLUMNS_set_of_page segment_set_of_page] AS 
    {[set_of_page].[set_of_page].Members} 
SET [~ROWS] AS 
    {[Date].[Date].Members} 
SELECT 
NON EMPTY NonEmptyCrossJoin([~COLUMNS_Brand_Brand], NonEmptyCrossJoin([~COLUMNS_Market_Market], [~COLUMNS_set_of_page_set_of_page])) ON COLUMNS, 
NON EMPTY [~ROWS] ON ROWS 
FROM [MySQL_Cube] 
WHERE [Measures].[NumTransactions]; 

Я использую MS SSAS так мало уверены в nitation, который работает с вами, но только, чтобы помочь мне, я переключиться на оператора * для кросс-объединений :

WITH 
SET [~COLUMNS_Brand_Brand] AS {[Brand].[Brand].[All]} 
SET [~COLUMNS_Market_Market] AS 
    {[Market].[Market].Members} 
SET [~COLUMNS_set_of_page segment_set_of_page] AS 
    {[set_of_page].[set_of_page].Members} 
SET [~ROWS] AS 
    {[Date].[Date].Members} 
SELECT 
NON EMPTY 
    [~COLUMNS_Brand_Brand] 
    *[~COLUMNS_Market_Market] 
    *[~COLUMNS_set_of_page_set_of_page] ON COLUMNS, 
NON EMPTY [~ROWS] ON ROWS 
FROM [MySQL_Cube] 
WHERE [Measures].[NumTransactions]; 

Я надеюсь, что (как непроверенные и я немного неуверен весь контекст, будет сохранен), что мы можем просто добавить пользовательский meassure, который делит текущую страницу на предыдущем, чтобы получить процент:

WITH 
SET [~COLUMNS_Brand_Brand] AS {[Brand].[Brand].[All]} 
SET [~COLUMNS_Market_Market] AS 
    {[Market].[Market].Members} 
SET [~COLUMNS_set_of_page segment_set_of_page] AS 
    {[set_of_page].[set_of_page].Members} 
SET [~ROWS] AS 
    {[Date].[Date].Members} 
MEMBER [Measures].[NumTransactionsPercent] AS 
    [set_of_page].CURRENTMEMBER 
/[set_of_page].CURRENTMEMBER.LAG(1) 
SELECT 
NON EMPTY 
    [~COLUMNS_Brand_Brand] 
    *[~COLUMNS_Market_Market] 
    *[~COLUMNS_set_of_page_set_of_page] ON COLUMNS, 
NON EMPTY [~ROWS] ON ROWS 
FROM [MySQL_Cube] 
WHERE [Measures].[NumTransactionsPercent]; //[Measures].[NumTransactions]; 

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

  • Нет связанных вопросов^_^