Страницы: 1
RSS
Подсчет уникальных значений по нескольким условиям в DAX
 
Приветствую друзья, прошу помощи в решении.

Необходимо посчитать кол-во уникальных значений в столбце "адрес", при условии:

1) Статус <> "Выполнено"&& Статус <> "Отложено"
2) Время <> "Вечер"

Общее кол-во считаю, через Filter и Countax  но вот как посчитать уникальные адреса при соблюдении этих условий- не могу понять. Distinctcount принимает только один столбец в качестве аргумента, а у меня на входе получается отфильтрованная таблица
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Пункт 1 формула такая:
Код
Уникальные1:=CALCULATE( 
   DISTINCTCOUNT([Адрес]);
   FILTER( 'Таблица2'; [Статус] <> "Выполнено" && [Статус] <> "Отложено" ) )

вторая
Код
ЕщеНеВечер:=CALCULATE( 
   DISTINCTCOUNT([Адрес]);
   'Таблица2'[Время] <> "вечер" )
Изменено: PooHkrd - 26.03.2019 17:02:11
Вот горшок пустой, он предмет простой...
 
PooHkrd, Спасибо большое!

так же могу сделать?
Код
CALCULATE(    DISTINCTCOUNT([Адрес]);
   FILTER( 'Таблица2'; [Статус] <> "Выполнено" && [Статус] <> "Отложено"&&[Время] <> "вечер" ) )
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, а слабо попробовать?  :D
Вот горшок пустой, он предмет простой...
 
PooHkrd, уже) Все отлично)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Почитайте. Будет проще. И вот здесь. И вот еще чудесный пост.
Изменено: PooHkrd - 26.03.2019 17:14:15
Вот горшок пустой, он предмет простой...
 
Добрый день!

А подскажите, на ту же тем вопрос...

=CALCULATE(
  DISTINCTCOUNT([Артикул]);
  'Меры'[Продажи прошлый период USD]> 0 )

вот эта часть ((('Меры'[Продажи прошлый период USD]))) это мера, а не поле в таблице, с мерами в условии для фильтра такая функция не работает??
 
Сергей К, работает.
1. Ссылаясь на меру, указывайте ее без имени таблицы. Столбец - с именем. Так сразу понятно, мера это или столбец. У Вас все наоборот.
2. Без примера вообще непонятно, где Вы это выражение используете и что хотите получить.
 
вот тут..
 
Цитата
Сергей К написал:
вот тут..
И где мера продаж прошлого периода?
Вернее, где вообще модель данных, и какое отношение к вопросу имеет то, что в файле excel?:)
 
Цитата
Вернее, где вообще модель дан
surkenny, Извините, все переделал
в общем колонка индекс это и есть МЕРА, и нужно по индексу определить АБЦ, и не так как я первый раз написал!!
А  первая 1/3 индексов (от количества индексов) - это А
вторая 1/3 индексов - это Б
третья 1/3 индексов - это Ц
И при этом значение больше 10000 в расчете не должно участвовать, т.е. ищем 1/3 не от 7, а от 6 индексов.
 
Сергей К, можно так:
Код
мера 2 :=
VAR limit = 10000
VAR curSales = [мера 1]
VAR salesTable =
    ADDCOLUMNS (
        SUMMARIZE ( ALL ( 'Таблица2' ); 'Таблица2'[Адрес] );
        "@sales"; [мера 1]
    )
VAR curRank =
    COUNTROWS ( FILTER ( salesTable; [@sales] <= curSales ) )
VAR countOverLimit =
    COUNTROWS ( FILTER ( salesTable; [@sales] > limit ) )
VAR maxRank =
    COUNTROWS ( salesTable )
VAR x =
    DIVIDE ( curRank; maxRank - countOverLimit )
VAR curGroup =
    SWITCH ( TRUE; x <= 1 / 3; "A"; x <= 2 / 3; "B"; "C" )
VAR result =
    IF ( HASONEVALUE ( 'Таблица2'[Адрес] ) && curSales <= limit; curGroup )
RETURN
    result
 
surkenny, спасибо большое! Ничего не понял, но работает)))
Вопрос, если сортировать столбец ABC, по какому принципу происходит сортировка?
И второй вопрос, есть более простой вариант формулы? или пока не научусь, сам этот расчет сделать не смогу?
 
 
Сергей К, сделал классификацию вычисляемым столбцом. Можно рейтинг выводить в строки/столбцы:
Код
ABC =
VAR limit = 10000
VAR curSales =
    CALCULATE ( [мера 1]; ALLEXCEPT ( 'Таблица2'; 'Таблица2'[Адрес] ) )
VAR salesTable =
    CALCULATETABLE (
        ADDCOLUMNS ( SUMMARIZE ( 'Таблица2'; 'Таблица2'[Адрес] ); "@sales"; [мера 1] );
        ALL ( 'Таблица2' )
    )
VAR curRank =
    COUNTROWS ( FILTER ( salesTable; [@sales] <= curSales ) )
VAR countOverLimit =
    COUNTROWS ( FILTER ( salesTable; [@sales] > limit ) )
VAR maxRank =
    COUNTROWS ( salesTable )
VAR x =
    DIVIDE ( curRank; maxRank - countOverLimit )
VAR curGroup =
    SWITCH ( TRUE; x <= 1 / 3; "A"; x <= 2 / 3; "B"; "C" )
VAR result =
    IF ( curSales <= limit; curGroup )
RETURN
    result

Цитата
Сергей К написал:
есть более простой вариант формулы?
В данном случае особой сложности в выражении и нет :) Магических функций на все нужные Вам вычисления нет и никогда не будет. Нужно все-таки изучать DAX.
P.S. Странная у Вас классификация, наибольшие продажи имеют рейтинг "C" :)
Изменено: surkenny - 23.05.2022 11:05:51
 
Вот в чем хитрость!  Этот столбец можно использовать в заголовках!
Я учусь..)) перечитал все что нашел на всемирных просторах, уже что-то получается))
но справочники без наставников и примеров тяжело даются!
P.S. По поводу классификации по суммам, идея не в сумме, а в оборачиваемости, поэтому поставил рейтинг "отбалды".
Своими и вашими методами я уже справился, но если вдруг интересно посмотреть на сколько Вы умный (в хорошем смысле слова))) могу не кусочек, а реальный отчет прислать, как "выпускной экзамен". Но только если будете смотреть))) а то придется повозиться с подготовкой..

 
 
Всем привет!  Нужчна помощь.
Есть набор данных в виде таблицы с посещаемостью сотрудников по дням (за один день может быть несколько посещений)
Необходимо посчитать кол-во сотрудников, которые посещают объект менее 5 раз в месяц.
Мои действия :
1. Создаю столбец :  Сцепка для посещаемости = 'Посещаемость офисов'[Сотрудник (Посетитель)] & 'Посещаемость офисов'[Дата]
2. Считаю кол-во уникальных значений по столбцу : Посещения = DISTINCTCOUNT('Посещаемость офисов'[Сцепка для посещаемости])

Далее не пойму как посчитать людей, у кого посещения в месяц менее 5 раз.

Help!!!
 
1. Зачем Вы пишете в чужой теме? Почему не создать свою?
2.
Цитата
Антон написал:
Есть набор данных в виде таблицы с посещаемостью сотрудников по дням
У Вас он есть, а у нас нет. Не хочу гадать.
 
Мне казалось так удобнее. Темы связанные.
Простите если, что не так.

Могу создать новую.
 
Антон, ладно-ладно :) Я сегодня раздражительный :)
Тема подходит, но пример где?
 
Да, сори.
Набор данных выглядит так. (вложил)  
 
Антон, можно так (в группе месяцев будет число сотрудников, у которых хотя бы в одном месяце от 1 до 4 посещений):
Код
few attendance :=
VAR cond = 5
VAR employees =
    SUMMARIZE ( attendance; attendance[Идентификатор]; attendance[YM] )
VAR filterByCondition =
    FILTER ( employees; CALCULATE ( COUNTROWS ( attendance ) ) < cond )
VAR result =
    CALCULATE ( DISTINCTCOUNT ( attendance[Идентификатор] ); filterByCondition )
RETURN
    result

Если нужно в расчете учитывать и такие месяцы, где у сотрудника вообще не было посещений, то:
1. Намного проще будет, если будет календарь и справочник сотрудников.
2. В справочнике сотрудников должна быть информация, в какие период(-ы) ему нужно проверять число посещений (грубо, с даты приема на работу).
Но я не буду за вас создавать нужную модель данных :) Это уже комплексная задача для платного раздела.
Изменено: surkenny - 26.07.2022 12:50:25
 
Спасибо, надо осмыслить.
 
Если не трудно, можете немного описать логику, я что то запутался (((
 
Антон,
1. Для каждого месяца, который есть в данных, берем всех работников, которые есть в данных за этот месяц (хотя бы 1 раз проходили): SUMMARIZE ( attendance; attendance[Идентификатор]; attendance[YM] )
2. Для каждой строки этой таблицы считаем сколько было проходов у этого работника в этом месяце. И удаляем строки, где 5 и более проходов: FILTER ( employees; CALCULATE ( COUNTROWS ( attendance ) ) < cond )
3. Считаем, сколько в этой таблице уникальных ID: CALCULATE ( DISTINCTCOUNT ( attendance[Идентификатор] ); filterByCondition ).
4. Если в столбцы/строки выведите месяцы, то будет число работников, которые в этот месяц хотя бы раз были, но общее число проходов меньше 5. Для итогов/года/любой группы месяцев - это число работников, для которых условие прошли хотя бы раз, но менее 5 раз, выполнено хотя бы в одном месяце.
Страницы: 1
Наверх