Могу ли я отобразить первое вхождение значения на основе нескольких условий?

#powerbi #dax

#powerbi #dax

Вопрос:

У меня есть SQL-запрос, который извлекает данные, аналогичные следующему примеру: введите описание изображения здесь

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

Таким образом, условия будут:

  1. Набор навыков 1 должен отличаться от набора навыков 2
  2. Если Набор навыков 1 и набор навыков 2 содержат первое вхождение, но они находятся в разных строках, объедините их
  3. Если Набор навыков 1 пуст, но набор навыков 2 содержит требуемое значение, отобразите набор навыков 2 (также применяется наоборот)

До сих пор я пытался использовать пользовательский столбец Dax, который содержит следующий фрагмент кода, но это не то, что я хочу:

 FirstOC = 
var skill1 = IF( NOT( ISBLANK( Table[Skillset 1] ) ),
    COUNTROWS(
        FILTER(
            'Table',
            [Project] = EARLIER([project]) amp;amp;
            [Skillset 1] = EARLIER([Skillset 1])amp;amp;
            [index] <= EARLIER([index])
        )
    ) = 1)
var skill2 = IF( NOT( ISBLANK( Table[Skillset 2] ) ),
    COUNTROWS(
        FILTER(
            'Table',
            [Project] = EARLIER([project]) amp;amp;
            [Skillset 2] = EARLIER([Skillset 2])amp;amp;
            [index] <= EARLIER([index])
        )
    ) = 1)
var date = CALCULATE ( MIN ( Table[Start Date].[Date] ), ALLEXCEPT ( Table, Table[Index] ) )
return 
SWITCH(TRUE(),
 NOT(ISBLANK( skill1)) amp;amp; skill1 <> skill2,Table[Skillsset 1],
not(ISBLANK(skill2)) amp;amp; skill2 <> skill1,Table[Skillset 2]
)
  

Возможно ли это с помощью DAX или даже SQL?

Комментарии:

1. Изображение — не лучший вариант для отображения ваших выборочных данных. чтобы предоставить решение, всегда требуется работать с данными, поэтому данные в табличном формате — лучший вариант. Также исключите столбцы, которые не требуются для этой цели.

Ответ №1:

Попробуйте использовать следующий DAX / Measure-

Учитывая имя вашей таблицы: concanate

 concanate_skillset = 

VAR current_row_skill_1 = MIN(concanate[skillset 1])
VAR current_row_skill_2 = MIN(concanate[skillset 2])
VAR current_row_start_date = MIN(concanate[start date])

VAR find_prev_occurance_skill_1 =
COUNTROWS(
    FILTER(
        ALL(concanate),
        (concanate[skillset 1] = current_row_skill_1 || concanate[skillset 2] = current_row_skill_1)
            amp;amp; concanate[start date] < current_row_start_date
    )
)   0

VAR find_prev_occurance_skill_2 =
COUNTROWS(
    FILTER(
        ALL(concanate),
        (concanate[skillset 1] = current_row_skill_2 || concanate[skillset 2] = current_row_skill_2)
            amp;amp; concanate[start date] < current_row_start_date
    )
)   0

RETURN IF(find_prev_occurance_skill_1 = 0,current_row_skill_1,"") 
    amp; IF(
        current_row_skill_1 = BLANK() || current_row_skill_2 = BLANK(),
        "",
        IF(
            find_prev_occurance_skill_1 = 0 amp;amp; find_prev_occurance_skill_2 = 0, 
            ","
            ,""
        )
    )
    amp; IF(find_prev_occurance_skill_2 = 0,current_row_skill_2,"") 
  

Вот окончательный результат для вашего примера данных-

введите описание изображения здесь