2016-10-27 8 views
2

У меня есть следующее выражение в Excel, которое отлично работает.Синтаксис MDX для измерений DAX, рассчитанный с помощью AVERAGE()

=CUBESET("ThisWorkbookDataModel", 
"TopCount(
[ProductBV].[Product Name].Children,10, 
sum(
(
[Calendar].[Week Ending].[All].[1/6/2013]:[Calendar].[Week Ending].[All].["&TEXT($E$2,"m/d/yyyy")&"], 
[ProductBV].[Moderation Status (ALL)].[All].["&$E$3&"] 
), 
[Measures].[Product Review Count] 
) 
)", 
"Top 10 to date") 

Оценка количества оборотов продукта с использованием следующей формулы DAX.

Product Review Count:=COUNTROWS(ProductBV) 

Однако, когда я изменить меру DAX к одной, которая использует функцию СРЗНАЧ (продукт Avg обзор), функция CUBESET не работает правильно. Он по-прежнему имеет правильное количество элементов в CUBESET, но когда я использую CUBERANKEDMEMBER (1-10), он не показывает мне 10 лучших продуктов по среднему рейтингу.

Product Avg Review:=AVERAGE(ProductBV[Rating]) 

'Не работает правильно' ниже выражение:

=CUBESET("ThisWorkbookDataModel", 
"TopCount(
[ProductBV].[Product Name].Children,10, 
sum(
(
[Calendar].[Week Ending].[All].[1/6/2013]:[Calendar].[Week Ending].[All].["&TEXT($E$2,"m/d/yyyy")&"], 
[ProductBV].[Moderation Status (ALL)].[All].["&$E$3&"] 
), 
[Measures].[Product Avg Review] 
) 
)", 
"Top 10 to date") 

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

В моей приборной панели моя дата ($ E $ 2) и статус обзора ($ E $ 3) могут быть изменены пользователем с помощью выпадающего меню.

+-----------------+-------------------+------------+----------------+ 
| Submission Date | Moderation Status | Product ID | Overall Rating | 
+-----------------+-------------------+------------+----------------+ 
| 10/23/2016  | APPROVED   | Product 1 |    5 | 
| 10/23/2016  | APPROVED   | Product 2 |    5 | 
| 10/23/2016  | APPROVED   | Product 3 |    5 | 
| 10/23/2016  | REJECTED   | Product 3 |    3 | 
| 10/23/2016  | REJECTED   | Product 4 |    3 | 
+-----------------+-------------------+------------+----------------+ 

Может ли кто-нибудь сказать мне, почему это происходит и как его исправить?

+0

Мне любопытно, что нужно использовать функции Excel. Почему бы вам просто не рассчитать, что использование DAX в вашей модели PowerPivot ?. Если вы предоставите подробную информацию о своей модели, мы можем дать вам несколько советов. –

+0

Моя причина использования функции Excel состояла в том, чтобы отобразить на панели инструментов 10 лучших продуктов по сумме, которую их средний рейтинг изменил неделю за неделю.Поскольку у меня есть сотни продуктов, я хочу, чтобы только 10 лучших отображались, а не большая таблица, которая сортируется по сумме, которую изменил рейтинг. С удовольствием делаю все это в DAX (и предоставляем детали модели), но я не уверен, как этот подход привел бы к моему результату без использования функций Excel. – Chris

+0

В DAX вы можете легко получить среднее значение для 10 лучших продуктов за определенный диапазон дат. Как уже упоминалось ранее, если вы предоставляете образцы моделей и образцов, мы можем дать вам несколько советов. –

ответ

1

Когда я увидел ваш вопрос, я задавался вопросом, почему вы использовали формулы Excel и элементы управления для создания панели мониторинга, если бы у вас была модель в PowerPivot. PowerPivot позволяет анализировать и визуализировать данные более надежным и надежным способом.

Ваш первоначальный подход является очень сложным и трудно его поддерживать принимая во внимание, что:

  • Вы должны изменить приборную панель всякий раз, когда новый продукт будет добавлен в ваш источник.
  • Функции Excel подвержены ошибкам, так как они ожидают определенного значения в качестве параметров, и пользователь может изменить его, вызывая ошибки.
  • Расчеты PowerPivot выполняются быстрее, чем функции Excel, особенно для больших наборов данных.
  • Невозможно обеспечить взаимодействие с данными пользователю.

Это Dashboard я построить с помощью сводных таблиц в вашей проведён модели PowerPivot.

enter image description here

DOWNLOAD THE EXCEL FILE HERE

Чтобы создать эту панель, я использовал четыре DAX меры:

This Week := 
CALCULATE (
     [Product Avg Review], 
     FILTER (
      ALL (Calendar), 
      Calendar[Week Ending] <= MAX (Calendar[Week Ending]) 
     ) 
    ) 

Last Week = 
    CALCULATE (
     [Product Avg Review], 
     FILTER (
      ALL (Calendar), 
      Calendar[Week Ending] 
       <= MAX (Calendar[Week Ending]) - 7 
     ) 
    ) 

Positive Movement := 
    (
     CALCULATE (
      [Product Avg Review], 
      FILTER (
       ALL (Calendar), 
       Calendar[Week Ending] 
        <= MAX (Calendar[Week Ending]) - 7 
      ) 
     ) 
      - CALCULATE (
       [Product Avg Review], 
       FILTER (
        ALL (Calendar), 
        Calendar[Week Ending] <= MAX (Calendar[Week Ending]) 
       ) 
      ) 
    ) 
     * -1 

Negative Movement := 
    CALCULATE (
     [Product Avg Review], 
     FILTER (
      ALL (Calendar), 
      Calendar[Week Ending] 
       <= MAX (Calendar[Week Ending]) - 7 
     ) 
    ) 
     - CALCULATE (
      [Product Avg Review], 
      FILTER (
       ALL (Calendar), 
       Calendar[Week Ending] <= MAX (Calendar[Week Ending]) 
      ) 
     ) 

С мерами рабочими вы можете создать две сводные таблицы, один для показа положительных движителей и другого, чтобы показать отрицательные движители.

Обратите внимание, что мой интерфейс Excel на испанском языке, надеюсь, вы не застрянете в этом. Просто следуйте инструкциям и выполняйте поиск в Google, есть много ресурсов о сводных таблицах.

enter image description here

В Rows панели добавить Product Name в Values добавить Last Week, This Week и Positive Movement или Negative Movement (согласно сводной таблицы, которую вы строите) мер.

enter image description here

После того, как вы построили таблицы вы должны иметь, чтобы получить TOP X Product Names.

В каждой сводной таблице щелкните значок Row тегов фильтр (Приводимые ниже настройки для положительных Прорывов сводной таблицы):

enter image description here

И использовать эти настройки:

enter image description here

Изменить Positive Movement для Negative Movement, когда вы фильтруете, чтобы получить Top 5 Product Names в таблице «Отрицательное движение».

Хотя вы можете получить наименования 5 лучших продуктов только в DAX, я думаю, что лучше использовать параметр фильтра Pivot Table, оставив его динамичным для любого количества лучших продуктов (что может стать новым требованием в будущем) без необходимости изменять базовый DAX.

Тогда вам просто нужно добавить условные форматы, и все готово.

Дайте мне знать, если это поможет.

+0

Эй, Алехандро, ваш подход работает! Моя первоначальная причина не желать держать вещи в сводной таблице - это фильтры, которые занимают много места на моей приборной панели. Однако я возьму все, что вы сделали, но сохраните мои фильтры выпадающего списка и запустите немного VBA, чтобы отфильтровать сводные таблицы. Таким образом, я должен быть в состоянии получить лучшее от обоих миров. Я очень ценю вашу помощь в этой проблеме, а также обширную документацию. Большое спасибо - Крис! – Chris

+0

@ Крис, я рад, что вам удалось реализовать мое решение для ваших нужд. Добро пожаловать. –

2

Производит набор CUBESET.

У набора есть счет, поэтому я могу оценить, что COUNTROWS будет функционировать правильно.

Если вы подаете набор элементов в AVERAGE, который измеряет его среднее значение? Кажется, это не определено?

Можете ли вы подать набор, возвращенный ProductBV[Rating], в последующую функцию куба, которая определяет меру, в которой вы хотели бы иметь среднее значение?

+0

Спасибо за ответ. Для ваших первых двух комментариев вы правильно говорите, что эта моя формула возвращает CUBESET, а COUNTROWS работает правильно. Я не совсем понимаю, что вы имеете в виду в своем третьем комментарии (все еще очень нова к MDX). [Обзор продукта] - это средний показатель моего [Product Rating] для моего [Product Name]. Для вашего последнего комментария вы предлагаете встраивать мои наборы так, чтобы внешняя часть topcount и внутренняя часть отображали мой обзор продукта, зависящий от диапазона дат и статуса модерации? Я внес некоторые незначительные изменения в свой пост, если это помогает – Chris

+0

@ Крис хорошо - моя ошибка - так что «СРЕДНЕЕ (ProductBV [Rating])' DAX? – whytheq

+0

Правильно. Функции Cube в Excel, использующие модель данных PowerPivot. Извините - должно было быть явным в моем первоначальном сообщении – Chris