#powerbi #dax
#powerbi #dax
Вопрос:
У меня есть SQL-запрос, который извлекает данные, аналогичные следующему примеру:
Чего я пытаюсь достичь, так это отобразить первое вхождение каждой роли на основе даты начала. Я добавил пример на картинке выше в последнем столбце.
Таким образом, условия будут:
- Набор навыков 1 должен отличаться от набора навыков 2
- Если Набор навыков 1 и набор навыков 2 содержат первое вхождение, но они находятся в разных строках, объедините их
- Если Набор навыков 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,"")
Вот окончательный результат для вашего примера данных-