Как рассчитать количество непустых строк на основе значения, используя dax - PullRequest
0 голосов
/ 16 января 2019

У меня есть таблица с числовыми значениями и пустыми записями. Я пытаюсь рассчитать количество строк, которые не являются пустыми и больше 20.

+--------+
| VALUES |
+--------+
|      2 |
|      0 |
|     13 |
|     40 |
|        |
|      1 |
|    200 |
|      4 |
|    135 |
|        |
|     35 |
+--------+

Я пробовал разные варианты, но постоянно получаю следующую ошибку: «Невозможно преобразовать значение» типа Text в тип Number ». Я понимаю, что пустые ячейки обрабатываются как текст, и поэтому мой фильтр (> 20) не работает. Преобразование пробелов в «0» не вариант, так как позже мне понадобятся те же значения для вычисления AVG и медианы.

CALCULATE(
    COUNTROWS(Table3),
    VALUE(Table3[VALUES]) > 20
    )

ИЛИ получить «10» в результате:

=CALCULATE(
    COUNTROWS(ALLNOBLANKROW(Table3[VALUES])),
    VALUE(Table3[VALUES]) > 20
    )

Окончательный результат в примере таблицы должен быть: 4

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

1 Ответ

0 голосов
/ 16 января 2019

Во-первых, функция VALUE ожидает строку. Он преобразует строки типа "123" в целое число 123, поэтому давайте не будем его использовать.


Самый простой подход - использовать функцию итератора, такую ​​как COUNTX.

CountNonBlank = COUNTX(Table3, IF(Table3[Values] > 20, 1, BLANK()))

Обратите внимание, что нам здесь не нужен отдельный регистр для BLANK() (ноль), поскольку BLANK() > 20 оценивается как False.

Есть множество других способов сделать это. Другое решение итератора будет:

CountNonBlank = COUNTROWS(FILTER(Table3, Table3[Values] > 20))

Вы можете использовать тот же FILTER внутри CALCULATE, но это немного менее элегантно.

CountNonBlank = CALCULATE(COUNT(Table3[Values]), FILTER(Table3, Table3[Values] > 20))

Редактировать

Я не рекомендую CALCULATE версию. Если у вас есть больше столбцов с большим количеством условий, просто добавьте их в FILTER. Э.Г.

CountNonBlank =
COUNTROWS(
    FILTER(Table3,
        Table3[Values] > 20
            && Table3[Text] = "xyz"
            && Table3[Number] <> 0
            && Table3[Date] <= DATE(2018, 12, 31)
    )
)

Вы также можете сделать логику ИЛИ с помощью || вместо && для AND.

...