Ошибка DAX «несколько столбцов» при попытке вернуть N-е ранжированное текстовое значение - PullRequest
0 голосов
/ 22 октября 2018

Я работал над решением для вычисления чего-то похожего на FirstSortedValue Qlikview в DAX для Power BI.

Насколько мне известно, не существует готового решения для получения функциональности получения текстового значения (очень похоже на категорию), которая по своему рангу находится на n-й позиции.

Мой вопрос: почему это работает с одним столбцом, но возвращает ошибку с несколькими столбцами при использовании в таблице?

CALCULATE (
    SAMPLE (
        1,
        FILTER (
            'table_name',
            RANKX (
                ALL ( 'table_name'[column_name] ),
                CALCULATE ( COUNT ( 'table_name'[column_name] ) ),
                , , SKIP
            )
                = Nth
        ),
        TRUE ()
    )
)

также другой вариант:

CALCULATE (
    SAMPLE ( 1, VALUES ( 'table_name'[column_name] ), TRUE () ),
    FILTER (
        'table_name',
        RANKX (
            ALL ( 'table_name'[column_name] ),
            CALCULATE ( COUNT ( 'table_name'[column_name] ) ),
            , , DENSE
        )
            = Nth
    )
)

Обе эти и многие другие мои попытки работают, когда это один столбец, но почему бы это не сработало при использовании в таблице с несколькимистолбцы?Он должен вернуть образец 1 текстового значения в соответствии с N-м рангом, который я выбрал?Сродни ответу на вопрос «Какое N-е наименование продаваемого продукта по количеству продаж?».

Я в тупике, все еще пытаюсь найти ответ.Firstnonblank - это не вариант, потому что мне все равно, какое решение получить только за 1-й рейтинг;не предлагайте этого.

Ответы [ 2 ]

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

Я придумала решение, которое работает на многостолбцовых таблицах с оговорками, поскольку в формуле предпочтительнее использовать SAMPLE (1 ...) в формуле:

SAMPLE(1, FILTER(ALL('X'[Name]), RANKX(ALL(X[Name]), CALCULATE(COUNT('X'[Name])),,,skip) = Nth), TRUE())

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

РЕДАКТИРОВАТЬ: 23 октября 2018 г. Вот оно!Окончательная краткая версия: отлично работает!

Measure =

VAR Nth = [number] RETURN CONCATENATEX(DISTINCT('table_name'[column_name]), CALCULATE(FILTER(VALUES('table_name'[column_name]), RANKX(ALL('table_name'[column_name]), CALCULATE(COUNT('table_name'[column_name])),,,Dense) = Nth)),",")
0 голосов
/ 22 октября 2018

Самый простой способ заставить это работать из того, что у вас есть, состоит в том, чтобы превратить вашу таблицу в один столбец, используя SELECTCOLUMNS.

Следующее даст вам таблицу из одного столбцас именем столбца «Имя столбца».

SELECTCOLUMNS( FILTER( [...] ), "Column Name", 'table_name'[column_name] )

CALCULATE (
    SAMPLE (
        1,
        SELECTCOLUMNS(
            FILTER (
                'table_name',
                RANKX (
                    ALL ( 'table_name'[column_name] ),
                    CALCULATE ( COUNT ( 'table_name'[column_name] ) ),
                    , , SKIP
                )
                = Nth
            ),
            "Column Name",
            'table_name'[column_name]
        ),
        TRUE ()
    )
)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...