2013-11-21 4 views
0

У меня возникла проблема, что я надеюсь, что некоторые более опытные программисты DAX смогут мне помочь. Я пытаюсь разработать панель инструментов в Excel 2013/PowerPivot/PowerView, и одна из графических объектов, которые я хотел бы отображать, представляет собой линейную диаграмму медианной производительности по часам дня. Затем я хотел бы отфильтровать набор данных с помощью моих показателей производительности на основе отдельного столбца и связать его с slicer. Медианы должны быть рассчитаны относительно отфильтрованного набора данных. Для медианного расчета я пытаюсь адаптировать формулу, предложенную Марко Руссо здесь (http://sqlblog.com/blogs/marco_russo/archive/2010/07/20/median-calculation-in-dax.aspx).Медианы и слайсеры в DAX

Чтобы проиллюстрировать эту проблему, предположим, что у меня есть две таблицы - main_table и other_table. Main_table имеет 4 columns- RowId, hour_of_day, performance_metric и категории. Другое_таблица имеет две колонки: hour_of_day и median_column. Моя цель - найти формулу для median_column так, чтобы она показывала средний показатель производительности по часам дня, но все еще может быть нарезана категория. Формула, которую я пытался использовать для медиан был

=CALCULATE(
    MINX(
     FILTER(
      VALUES(main_table[performance_metric]), 
      CALCULATE(
       COUNTA(main_table[performance_metric]), 
       main_table[performance_metric] <= EARLIER(main_table[performance_metric])) 
        > COUNTA(main_table[performance_metric]/2), 
     main_table[performance_metric]), 
    FILTER(
     main_table, 
     main_table[hour_of_day] = EARLIER(other_table[hour_of_day]))) 

Или без форматирования:

=CALCULATE(MINX(FILTER(VALUES(main_table[performance_metric]), CALCULATE(COUNTA(main_table[performance_metric]), main_table[performance_metric] <= EARLIER(main_table[performance_metric])) > COUNTA(main_table[performance_metric]/2), main_table[performance_metric]), FILTER(main_table, main_table[hour_of_day] = EARLIER(other_table[hour_of_day]))) 

Однако, когда я создаю слайсер на основе категории в main_table, мой график не кажется затронутый слайсером. Я понял, что, поставив main_table в отличие от ALL (main_table) как первый аргумент в последнем вызове FILTER, мои медианные вычисления будут подвержены срезам и фильтрам, примененным к main_table. Я пропустил что-то очевидное здесь?

ответ

0

Вычисляемые столбцы, по-видимому, вычисляются до выполнения запросов, поэтому все, что должно быть затронуто slicers, должно вводиться как мера, а не вычисляемый столбец.

Ответил более подробно здесь (http://www.mrexcel.com/forum/powerpivot-questions/741071-medians-context-issues-dax.html#post3641780)

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