Сложность DAX Подсчет строк и присвоение ранга

#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 разных дат, которые мне нужно отфильтровать, и я бы сошел с ума от нескольких функций взаимодействия пользователей или нескольких таблиц календаря.) Поскольку вычисляемая таблица статична, вы не можете динамически изменять ее содержимое с помощью фильтров. (Если вы можете, кто-нибудь, пожалуйста, скажите мне, как это сделать.)