Формула DAX для отображения неповторяющихся значений и их подсчета - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть таблица, для которой столбец «КОД» имеет такие значения:

FTRA2
BRB92
RBRB4
XYZ
SXM4
RBRB4
NLDR
XYZ
FTRA2
POEU
FTRA2

У меня есть эта формула

="[ Unique values " & DISTINCTCOUNT(MyTable[CODE]) & "] 
" & CONCATENATEX(DISTINCT(MyTable[CODE]), MyTable[CODE] ,", ")

, который выводит это:

[ Unique values 7 ]
FTRA2, BRB92, RBRB4, XYZ, SXM4, NLDR, POEU

Я хотел бы показать все уникальные значения и их количество (кроме значений со строкой «XYZ»), а ниже показать, сколько значений «XYZ», например:

[ Unique values 6 ]
FTRA2, BRB92, RBRB4, SXM4, NLDR, POEU

[2 XYZ values]

В этом случае есть 2 значения «XYZ», но они также могут быть нулевыми значениями XYZ.

Я использую Excel 2016.

Как я могу это сделать? Заранее спасибо.

Update1

Я получаю эту ошибку, пытаясь решить проблему Джо. enter image description here

UPDATE2

Джо, я смог заставить вашу первую часть изменить, как это:

= VAR ExcludeValue = "XYZ"
RETURN
    CALCULATE(
        "[ Unique values " & DISTINCTCOUNT(MyTable[Code]) & " ]"
        " & CONCATENATEX(DISTINCT(MyTable[Code]), [Code], ", ")
        , MyTable[Code] <> ExcludeValue
    )

Но когда я добавляю вторую часть, она говорит об этой ошибке

This formula is invalid or incomplete: 'Calculation error in
measure 'MyTable[Code]: The function COUNT takes an argument 
that evaluates to numbers or dates and cannot work with values 
of type String.'.   

Я также удалил UNICHAR, так как не работает в Excel.

Update3

Решение Джо работает правильно после того, как я изменил COUNT(MyTable[Code]) на COUNTROWS(MyTable)

Окончательное решение выглядит следующим образом.

=VAR ExcludeValue = "XYZ"
RETURN
    CALCULATE(
        "
        [ Unique values " & DISTINCTCOUNT(MyTable[Code]) & " ]
        " & CONCATENATEX(DISTINCT(MyTable[Code]), [Code], ", ")
        , MyTable[Code] <> ExcludeValue
    )  & "

" & CALCULATE(
        "[" & COUNTROWS(MyTable) & " " & ExcludeValue & " values]"
        , MyTable[Code] = ExcludeValue
    ) & "
"   

Update4

Ничего не печатать, если нет значений "XYZ", работает с добавлением IF (). Я пытался следовать вашей логике, чтобы сделать то же самое, когда нет никаких значений вообще. Я добавил IF () для подсчета, если MyTable[Code] <> ExcludeValue больше 0 и если true, сделать исходный CALCULATE, если не BLANK (), но не работает.

CountLabel = 
VAR ExcludeValue = "XYZ"
RETURN
IF(
    CALCULATE(COUNTROWS(MyTable), MyTable[Code] <> ExcludeValue) > 0, 
    CALCULATE(
        "[ Unique values " & DISTINCTCOUNT(MyTable[Code]) & " ]"
        & UNICHAR(10) & 
        CONCATENATEX(DISTINCT(MyTable[Code]), [Code], ", ")
        , MyTable[Code] <> ExcludeValue
    ),
    BLANK()
    )
    & IF(
        CALCULATE(COUNTROWS(MyTable), MyTable[Code] = ExcludeValue) > 0,
        UNICHAR(10) & " " & UNICHAR(10) & 
        CALCULATE(
            "[" & COUNTROWS(MyTable) & " " & ExcludeValue & " values]"
            , MyTable[Code] = ExcludeValue
        ),
        BLANK()
    )

ФИНАЛЬНОЕ ОБНОВЛЕНИЕ

Это последняя формула, которая работает как ожидалось. Благодаря помощи Джо в этом случае.

=VAR ExcludeValue = "XYZ"
RETURN
    IF(
        CALCULATE(DISTINCTCOUNT(MyTable[Code]), MyTable[Code] <> ExcludeValue) > 0 && 
        MyTable[Count of Code]>0,
        CALCULATE(
            "
            [ Unique values " & DISTINCTCOUNT(MyTable[Code]) & " ]
            " & CONCATENATEX(DISTINCT(MyTable[Code]), [Code], ", ")
            , MyTable[Code] <> ExcludeValue
        ),
        BLANK()
    )
    &
    IF(
        CALCULATE(DISTINCTCOUNT(MyTable[Code]), MyTable[Code] <> ExcludeValue) > 0 &&
            CALCULATE(COUNTROWS(MyTable), MyTable[Code] = ExcludeValue) > 0,
        " 

        " &
        BLANK()
    )
    & IF(
        CALCULATE(COUNTROWS(MyTable), MyTable[Code] = ExcludeValue) > 0,
        CALCULATE(
            "[" & COUNTROWS(MyTable) & " " & ExcludeValue & " values]"
            , MyTable[Code] = ExcludeValue
        ),
        BLANK()
    ) & "
"

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

ОБНОВЛЕНИЕ: - Изменил мою формулу с использования COUNT на COUNTROWS на основе обратной связи с OP.

ОБНОВЛЕНИЕ 2: - Добавить IFоператор в формулу для исключения исключенного числа, когда 0.

ОБНОВЛЕНИЕ 3: - добавление IF оператор в формулу для исключения отдельного числа, когда 0.


Iскажет, что я создал это решение в Power BI, но Excel 2016 должен иметь те же функциональные возможности, что и DAX (с небольшими изменениями).

Я создал меру с вашей формулой и просто обернул каждую часть (отличный счет и повторный счет) с помощью оператора CALCULATE, который используется для фильтрации вашей таблицы MyTable по кодам, которые вас интересуют.

Я использовал переменную для "XYZ"значение в случае, если это необходимо изменить.Теперь вы можете просто изменить его в одном месте (в начале формулы), и остальная часть формулы будет отражать это изменение.

Я также использовал UNICHAR(10), чтобы добавить разрывы строк вместо того, чтобы рассчитывать нановые строки в формуле.

С операторами IF ...

  • Первая будет проверять, больше ли число элементов, не равное указанному значению, больше нуля,Если нет, то ничего не будет отображаться.
  • Второй проверит, больше ли значения счетчика и числа строк указанного значения больше нуля.Если это так, он добавит разрыв строки.
  • Третий проверит, больше ли число строк элементов, равное указанному значению, больше нуля.Если нет, то ничего не отобразится.

Окончательная формула:

CountLabel = 
VAR ExcludeValue = "XYZ"
RETURN
    IF(
        CALCULATE(DISTINCTCOUNT(MyTable[Code]), MyTable[Code] <> ExcludeValue) > 0,
        CALCULATE(
            "[ Unique values " & DISTINCTCOUNT(MyTable[Code]) & " ]"
            & UNICHAR(10) & 
            CONCATENATEX(DISTINCT(MyTable[Code]), [Code], ", ")
            , MyTable[Code] <> ExcludeValue
        ),
        BLANK()
    )
    &
    IF(
        CALCULATE(DISTINCTCOUNT(MyTable[Code]), MyTable[Code] <> ExcludeValue) > 0 &&
            CALCULATE(COUNTROWS(MyTable), MyTable[Code] = ExcludeValue) > 0,
        UNICHAR(10) & " " & UNICHAR(10),
        BLANK()
    )
    & IF(
        CALCULATE(COUNTROWS(MyTable), MyTable[Code] = ExcludeValue) > 0,
        CALCULATE(
            "[" & COUNTROWS(MyTable) & " " & ExcludeValue & " values]"
            , MyTable[Code] = ExcludeValue
        ),
        BLANK()
    )

Вот как выглядит результат (снова в Power BI).

Result

0 голосов
/ 05 апреля 2019

Придумали что-то похожее, но немного другое, используя COUNTROWS вместо CALCULATE, чтобы отфильтровать таблицу по уникальному элементу.Также я только изучаю DAX, поэтому не знаю, является ли это «правильным» способом сделать это, но, похоже, это работает.

Measure = 
VAR Exclusion = "XYZ"
RETURN
"[ Unique values " & COUNTROWS(FILTER(DISTINCT(MyTable[CODE]), [CODE] <> Exclusion)) & "] 
" & CONCATENATEX(FILTER(DISTINCT(MyTable[CODE]), [CODE] <> Exclusion), [CODE] ,", ") &
"

[" & COUNTROWS(FILTER(MyTable, MyTable[CODE] = Exclusion))+0 & " " & Exclusion & " values]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...