DAX рассчитывает значения для каждой подгруппы без применения фильтров значений - PullRequest
0 голосов
/ 10 октября 2018

У меня есть сводная таблица с 2 срезами для управления населением (утро / полдень; тип посещения), 3 подгруппы с идентификаторами и именами в виде строк и 3 вычисляемых показателя в виде столбцов:
1. Основная формула подсчета:
=COUNTROWS(Visit)
2. Длинная формула медианы:

=(MINX (FILTER (VALUES (Visit[Colum1]),  
  CALCULATE (COUNT (Visit[Colum1]), Visit[Colum1]   
<= EARLIER (Visit[Colum1])) > COUNT ( Visit[Colum1]) / 2), Visit[Colum1]...

3.Формула Lookup / SUM:
=IF(CALCULATE(SUM(PE_new[DenominatorNBR2]), RELATEDTABLE(Visit)) < 30, BLANK(), CALCULATE(SUM(PE_new[NumeratorNBR2]), RELATEDTABLE(Visit)) / CALCULATE(SUM(PE_new[DenominatorNBR2]), RELATEDTABLE(Visit)))

Проблема, которую я пытаюсь найти, состоит в том, чтобы в столбце C отображались только строки со значениями, которые равны или превышают 10 (показатель 1 (Sum)).Я могу сделать это, используя «фильтры значений» для столбцов ID или Names, но в этом случае также будут меняться промежуточные итоги (уменьшая количество записей), но мне нужно показывать промежуточные итоги для каждой группы в целом, а не только вычисления для этих строк.с более чем 10 значениями.

Есть ли способ написать / изменить формулу DAX для промежуточных итогов, где она будет рассчитывать значения для всей группы, не принимая во внимание «фильтры значений»?Или, может быть, есть другие варианты, чтобы отображать только строки со значениями, которые равны или превышают 10, но вычисляют значения для всей группы в промежуточных итогах?

Буду благодарен за любую помощь!

Этоисходная таблица:

enter image description here

Это то, что я получаю сейчас (промежуточные итоги основаны на текущих / отфильтрованных сводных записях: значения, которые равны или превышают 10в столбце C (Мера 1 (Сумма))):

enter image description here

Поиск этого результата (промежуточные итоги показаны для каждой группы в целом):

enter image description here

Снимок экрана с фильтром "фильтров значений":

enter image description here

1 Ответ

0 голосов
/ 10 октября 2018

Вы можете настроить свою меру для расчета по-разному в зависимости от того, является ли она промежуточным итогом или не использует функции, такие как HASONEVALUE из ISFILTERED.Поэтому, если вы использовали «фильтры значений» для ограничения количества строк, которые вы видите, вы все равно можете получить промежуточные итоги, включая все строки, используя соответствующий контекст фильтра.

Например, для основного подсчета вы можете написать что-то вродеthis

CountMeasure = 
IF(HASONEVALUE(Visit[ID]),
    COUNT(Visit[Column1]),
    CALCULATE(COUNT(Visit[Column1]), ALLEXCEPT(Visit, Visit[Group]))
)

Функция ALLEXCEPT удаляет весь контекст фильтра, кроме указанных вами столбцов.Этот же шаблон должен работать и для других мер:

SubtotalMeasure = 
IF(HASONEVALUE(Visit[ID]),
    [Measure],
    CALCULATE([Measure], ALLEXCEPT(Visit, Visit[Group]))
)

Редактировать: В ответ на ваши комментарии немного сложно получить отдельные выборки среза из фильтрации значений, так какмера DAX относится к ним аналогично.Однако, если они нарезают / фильтруют по разным столбцам, это должно быть возможно.

Например, если у вас есть срез на ID, вы можете передать этот столбец в функцию ALLEXCEPT какдругой аргумент: ALLEXCEPT(Visit, Visit[Group], Visit[ID]).Это предотвратит удаление фильтрации слайсера на ID.

Стандартный способ удаления контекста фильтра при сохранении выбора слайсера - использование ALLSELECTED.Однако это также сохранит фильтрацию значений.

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

SubtotalMeasure =
VAR CurrentGroup = MAX(Visit[Group])
RETURN
IF(HASONEVALUE(Visit[ID]),
    [Measure],
    CALCULATE([Measure],
        ALLSELECTED(Visit),
        ALL(Visit[Name]),
        Visit[Group] = CurrentGroup
    )
)

Комбинирует все эти аргументы в стиле AND.ALLSELECTED(Visit) сохранит всю фильтрацию среза и значения (но не контекст сводной таблицы), ALL(Visit[Name]) удалит фильтрацию значения в столбце Name (но также и любые выборки среза в этом столбце) и Visit[Group] установит контекст фильтра для столбца Group равным только значению Group для текущей строки в текущей таблице, которая определяется указанной выше переменной.

Я не могу гарантировать, что этот конкретныйКомбинация будет работать для вашей конкретной установки, так как я не знаю, какие у вас есть все столбцы, слайсеры и т. д., но она должна дать вам представление о том, какие вещи вы можете попробовать.

...