#sql #powerbi #dax #measure
Вопрос:
Я создал эту простую таблицу в SQL:
create table testTable (
date date not null,
leader varchar(20),
name varchar(20)
)
insert into testTable
values
('2021-01-01', 'KIM', 'Anders'),
('2021-01-02', 'KIM', 'Annika'),
('2021-01-03', 'KIM', 'Anna'),
('2021-01-04', 'KIM', 'Anna'),
('2021-01-03', 'KIM', 'Annika'),
('2021-01-01', 'JOHAN', 'Sara'),
('2021-01-02', 'JOHAN', 'Sara'),
('2021-01-03', 'JOHAN', 'Sara')
Я пытаюсь получить эквивалентное решение для следующего кода в измерении dax, если это возможно
select max(leader), name, count(name)
from testTable
group by name
having count(name) >= 2
Результат, который я ищу, таков.
Лидер | Мера |
---|---|
ким | 2 |
ЙОХАН | 1 |
Ответ №1:
Подумайте о HAVING
фильтре, который появляется после группировки. Так что что-то вроде
Measure = COUNTROWS(filter(SUMMARIZECOLUMNS('Table'[Name],"Count",count('Table'[Name])), [Count]>=2))
И вот простой способ представить тестовые данные для вопросов DAX, полностью в DAX:
testTable = SELECTCOLUMNS
(
{
(date(2021,01,01),"KIM","Anders")
,(date(2021,01,02),"KIM","Annika")
,(date(2021,01,03),"KIM","Anna")
,(date(2021,01,04),"KIM","Anna")
,(date(2021,01,03),"KIM","Annika")
,(date(2021,01,01),"JOHAN","Sara")
,(date(2021,01,02),"JOHAN","Sara")
,(date(2021,01,03),"JOHAN","Sara")
}, "date", [Value1]
, "leader", [Value2]
, "name", [Value3]
)
Это гораздо более простой способ воспроизвести сценарий, чем создание таблицы в SQL Server и загрузка ее с помощью Power Query или использование формы «Ввод данных» в PowerBI, которая создает таблицу в Power Query.
Комментарии:
1. Спасибо! 🙂 он сам по себе получает правильное значение, но он несовместим с включением лидера в таблицу. Контекст фильтра не работает
2. Поэтому добавьте желаемый результат к своему вопросу.
3. Я думал, что это подразумевается, но да, я мог бы быть более конкретным
4. Возможно ли теперь использовать SUMMARIZECOLUMNS внутри мер?
Ответ №2:
Изменить: после добавления желаемого результата в вопрос ответ меняется следующим образом
Возможным решением является реализация меры, которая подсчитывает количество имен, которые появляются более одного раза для выбранного лидера
# Names ge 2 =
COUNTROWS (
FILTER (
VALUES ( Test[name] ),
CALCULATE ( COUNTROWS ( Test ), ALLEXCEPT ( Test, Test[name], Test[leader] ) ) > 1
)
)
вот рабочий пример на dax.do
DEFINE
TABLE Test =
DATATABLE (
"date", DATETIME,
"leader", STRING,
"name", STRING,
{
{ "2021-01-01", "KIM", "Anders" },
{ "2021-01-02", "KIM", "Annika" },
{ "2021-01-03", "KIM", "Anna" },
{ "2021-01-04", "KIM", "Anna" },
{ "2021-01-03", "KIM", "Annika" },
{ "2021-01-01", "JOHAN", "Sara" },
{ "2021-01-02", "JOHAN", "Sara" },
{ "2021-01-03", "JOHAN", "Sara" }
}
)
MEASURE Test[# Names ge 2] =
COUNTROWS (
FILTER (
VALUES ( Test[name] ),
CALCULATE ( COUNTROWS ( Test ), ALLEXCEPT ( Test, Test[name], Test[leader] ) ) > 1
)
)
EVALUATE
SUMMARIZECOLUMNS (
Test[leader],
"# Names ge 2", [# Names ge 2]
)
и результирующий результат
Я оставил меру моего предыдущего ответа на оригинале dax.do, который вернул этот вывод