#dax #rank #summarize
#dax #ранг #подводить итоги
Вопрос:
Я пытаюсь выбрать строки из таблиц, подсчитать строки для каждого Брокера в списке, а затем получить рейтинг для каждого Брокера. Мой код работает до последнего шага. Я знаю это, потому что мера, которая использовала код до таблицы 2, дает мне правильные результаты. Но я делаю что-то не так при расчете ранга. Вы можете сказать мне, в чем проблема? Я попытался использовать ALL(Table3), но это дало мне синтаксическую ошибку («Всем нужна ссылка на таблицу, а не табличное выражение»).
Это сводит меня с ума. Я потратил часы, пробуя варианты, ища примеры, читая документацию, но здесь есть что-то, чего я просто не понимаю. Наконец-то я получил последовательность ФИЛЬТРОВ, ВЫДЕЛЕННЫХ столбцов, СУММИРОВАНИЯ и добавления столбцов, работающую правильно. (Хотя использование СУММИРОВАНИЯ для добавления столбца, по-видимому, не рекомендуется, но, похоже, здесь это работает нормально.)
BrkPricedCtRank = VAR Table0 = FILTER ( 'Cases', not ISBLANK( [Date To Pricing] ) amp;amp; [Date Initiated] gt;= date(2021,1,1) amp;amp; [Date Initiated] lt;= DATE(2021,12,31) ) VAR Table1 = SELECTCOLUMNS( Table0, "Broker", [Broker] ) VAR Table2 = SUMMARIZE( Table1, [Broker], "PricedCt", COUNTROWS( Table1 ) ) --For measure BrkPricedCt. the code continues with these 2 lines. --That measure gives me what I want. -- RETURN -- MINX( Table2, [PricedCt] ) VAR Table3 = ADDCOLUMNS( Table2, "Rank", RANKX( Table2, [PricedCt] ) ) return MINX( Table3, [Rank] )
Ответ №1:
При использовании RANKX в таблице 2 и последующем добавлении его в визуальный элемент вы добавляете фильтр в каждую строку, который будет оцениваться как 1 для всех строк (все они имеют номер 1 в своей собственной строке = контекст). Но мы хотим иметь рейтинг для всех строк, который мы достигаем, изменив на RANKX( ВСЕ(Таблица 2), [PricedCt] ) или RANKX( ВСЕ ВЫБРАННЫЕ(таблица 2), [PricedCt]), если вы все еще хотите, чтобы рейтинг был 1, 2, 3 при фильтрации только определенных брокеров.
Комментарии:
1. Да, я думал о чем-то подобном, но это не работает. RANKX( ALL(Table2), [PricedCt] ) выдает синтаксическую ошибку, как я уже упоминал в своем вопросе: функция ALL ожидает ссылку на таблицу для аргумента «1», но было использовано табличное выражение. Спасибо, что объяснили, почему это дает мне 1-е место в каждой строке. Это полезно. Процесс добавления или выбора столбцов-это то, над чем я, похоже, никогда не смогу работать. «`
2. Ладно, извини, что это не помогло. В общем, это должно работать как «RANKX( ВСЕ(‘Dim Kunder’), [Utfall kkr])», но я думаю, что есть что-то еще. Вы пытались вернуть только часть ранга? Можете ли вы попробовать разделить таблицу 2 как собственную таблицу (создать таблицу), а затем использовать ранг в другом измерении, чтобы увидеть, что происходит? Или, возможно, используйте DAX Studio для облегчения отладки. У вас есть какие-либо примеры данных?
3. Я использовал DAX Studio, но это только немного помогло. Это говорит мне, что я правильно построил таблицу. Я попытался вернуть только часть ранга. Когда я использую RETURN RANKX( Таблица 2, [PricedCt]) Я получаю сообщение об ошибке «Значение «PricedCt» не может быть определено. Либо столбец не существует, либо для этого столбца нет текущей строки». Я подумаю о том, чтобы сделать таблицу 2 своей собственной таблицей, когда у меня будет немного времени.
4. Вычисляемая таблица работает, вроде как, но без необходимой мне функциональности. Проблема в том, что я не хочу жестко кодировать даты, как в исходном примере кода. Я хочу использовать показатели сбора урожая из таблицы календарных дат [minDate] и [maxDate]. (Я не устанавливал связь между таблицами и Календарем, потому что у меня есть 5 разных дат, которые мне нужно отфильтровать, и я бы сошел с ума от нескольких функций взаимодействия пользователей или нескольких таблиц календаря.) Поскольку вычисляемая таблица статична, вы не можете динамически изменять ее содержимое с помощью фильтров. (Если вы можете, кто-нибудь, пожалуйста, скажите мне, как это сделать.)