Как я могу создать итог, который отфильтрован по выделению и срезы? - PullRequest
0 голосов
/ 18 ноября 2018

Задача

Я хотел бы создать многослойную гистограмму, которая показывает распределение var1 на первом уровне и var2 на втором уровне с легендой source, например:

enter image description here

Значение должно отображать процентное отношение w.r.t. всего source, со всеми выбранными выборками и слайсерами. Проценты, показанные на гистограмме, должны всегда составлять 100% за source.

Пример данных

У меня есть следующие данные примера:

source  var1    var2    count
A       1       1       100
A       1       2       12
A       1       3       34
A       2       1       1612
A       2       2       23
A       2       3       43
B       1       1       200
B       1       2       320
B       1       3       12
B       2       1       1757
B       2       2       345
B       2       3       32

Что я пробовал

Я могу достичь общей суммы за source со следующей мерой без фильтрующей части:

percPerSource = 
DIVIDE(
    SUM(input[count]); 
    CALCULATE(
        SUM(input[count]); 
        ALLEXCEPT(input;input[source])
        )
    )*100

enter image description here

Если я включаю режим Drill и нажимаю на столбцы var1, я получаю следующий нежелательный результат (проценты не составляют 100%):

enter image description here

Другой попыткой было использование функции ALLSELECTED:

percSelected = 
    DIVIDE(
        SUM(input[count]); 
        CALCULATE(
            SUM(input[count]); 
            ALLSELECTED(input[var1])
            )
        )*100

Это показывает только 100% на уровне var2:

enter image description here

1 Ответ

0 голосов
/ 18 ноября 2018

Я думаю, что это будет делать то, что вы после:

percPerSource = 
DIVIDE(
    SUM(input[count]);
    CALCULATE(
        SUM(input[count]);
        FILTER(
            ALLSELECTED(input);
            input[Source] IN VALUES(input[Source])
        )
    )
)*100

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

Drilldown


Функция FILTER принимает таблицу в качестве первого аргумента и условие в качестве второго аргумента. Он просматривает каждую строку в таблице, переданной в него, и проверяет, выполняется ли условие, и возвращает таблицу, содержащую только те строки, где условие оценивается как True.

Функция VALUES возвращает список различных значений указанного столбца, оцененных в контексте локального фильтра.

...