Страницы: 1
RSS
DAX Подсчет уникальных значений через подстановку значений
 
Доброго времени суток. Прошу помощи.  Допустим есть простая таблица с 2 колонками, ID человека и тип договора допустим А, B, C, D и тд, у каждого ID может быть несколько типов договоров.
Как вычислить уникальное количество ID у которых допустим есть договор А и С?
Немного уточню запрос - Цель вычислить сколько уникальных ID с договором А имеет еще любой другой тип договора.
Изменено: Николай - 22.12.2023 07:19:23
 
Я пробовал через IN VALUES и через фильтр, но не могу подобрать правильный контекст
Изменено: Николай - 21.12.2023 23:42:37
 
Цитата
Николай написал:
Как вычислить уникальное количество ID у которых допустим есть договор А и С?
Код
мера = 
CALCULATE(
     DISTINCOUNT('Table[ID]');
     FILTER('table';
         'table[dogovor] = "A" 
         && 'table[dogovor] = "C" 
     ) 
)
Изменено: Vladimir Ch - 22.12.2023 07:06:41
 
Цитата
написал:
Кодмера =
CALCULATE(
    DISTINCOUNT('Table[ID]');
    FILTER('table';
        'table[dogovor] = "A"
        && 'table[dogovor] = "C"
    )
)
Я пробовал таким образом только прописывал условие  =
CALCULATE(DISTINCOUNT('Table[ID]');ALL('table[dogovor]);FILTER('table';'table[dogovor] = "A"&& 'table[dogovor] <> "А"))

При этом ставил внешний фильтр по А, добавлял ALL по фильтру что бы снять его для создания таблицы в которой нужно искать и ставить условия что все договора А, кто заключал и другие договора. Но она не работает(((( никаких значений не находит. И мне кажется это логично, нету же строк которые одновременно имеет вписанный тип говора А и любой другой.
Изменено: Николай - 22.12.2023 07:24:24
 
Цитата
Николай написал:
Но она не работает((((
значит что-то делаете не так. Или модель данных не правильная, или еще что-то. Без примера гадать бысмысленно.
 
Цитата
Николай написал:
'table[dogovor] = "A"&& 'table[dogovor] <> "А"))
это вообще взаимоисключающее условие. ВЫ пишите: покажи мне ID, который одновременно = А и в тот же момент <>А.
 
Можно так:
Код
measure :=
COUNTROWS (
    FILTER (
        VALUES ( data[ID] );
        NOT ISEMPTY ( CALCULATETABLE ( data; data[type of contract] = "A" ) )
            && NOT ISEMPTY ( CALCULATETABLE ( data; data[type of contract] <> "A" ) )
    )
)
 
Цитата
написал:
значит что-то делаете не так. Или модель данных не правильная, или еще что-то. Без примера гадать бысмысленно.

Спасибо огромное за помощь, я понимаю что где-то в формуле условие или контекст ввожу некорректно. Пример ниже прикрепил.
Изменено: Николай - 22.12.2023 09:04:09
 
Цитата
написал:
Можно так:Кодmeasure :=
COUNTROWS (
   FILTER (
       VALUES ( data[ID] );
       NOT ISEMPTY ( CALCULATETABLE ( data; data[type of contract] = "A" ) )
           && NOT ISEMPTY ( CALCULATETABLE ( data; data[type of contract] <> "A" ) )
   )
)
ого спасибо, я так не думал, а можно попросить расписать логику, какую Вы сюда закладываете?
 
Можно еще так попробовать. В этой теме решал похожую задачу
Код
=var _kol_dogovor = 2
var _select = CROSSJOIN(VALUES('Таблица1'[id]); {"A";"C"})
var _tab = SUMMARIZE('Таблица1'; 'Таблица1'[id];'Таблица1'[dogovor])
var _intersect= INTERSECT( _tab;_select)
var _addcol = ADDCOLUMNS(VALUES('Таблица1'[id]);
            "Kol";  
                var _tov =  'Таблица1'[id]
                return 
                COUNTROWS(FILTER(_intersect;'Таблица1'[id]=_tov)))
return 
    COUNTROWS( FILTER(_addcol;[Kol] = _kol_dogovor))
 
Цитата
написал:
Можно еще так попробовать. В этой  теме  решал похожую задачу
Ого спасибо большое, мне кажется там задачка должна как-то просто решаться(((
 
Николай, Вам уже простое решение дал surkenny, когда нужно выбрать один договора "A" и все остальные. А если вдруг нужно выбрать из 10 договоров конкретные два.
 
Доброе время суток.
Цитата
Николай написал:
Цель вычислить сколько уникальных ID с договором А имеет еще любой другой тип договора.
Вариант
Код
=Var AmbOnly = CALCULATETABLE(VALUES('Table1'[ID пациента]); 'Table1'[Тип дог.] = "Амб")
Var notAmbOnly = CALCULATETABLE(VALUES('Table1'[ID пациента]); 'Table1'[Тип дог.] <> "Амб")
Var common = NATURALINNERJOIN(AmbOnly; notAmbOnly)
Return COUNTROWS(common)
Изменено: Андрей VG - 22.12.2023 10:01:07
 
Цитата
написал:
жно еще так попробовать. В этой  теме  решал похожую задачуКод=var _kol_dogovor = 2
var _select = CROSSJOIN(VALUES('Таблица1'[id]); {"A";"C"})
var _tab = SUMMARIZE('Таблица1'; 'Таблица1'[id];'Таблица1'[dogovor])
var _intersect= INTERSECT( _tab;_select)
var _addcol = ADDCOLUMNS(VALUES('Таблица1'[id]);
           "Kol";  
               var _tov =  'Таблица1'[id]
               return
               COUNTROWS(FILTER(_intersect;'Таблица1'[id]=_tov)))
return
   COUNTROWS( FILTER(_addcol;[Kol] = _kol_dogovor))
Спасибо большое, все заработало!!!! Для себя много нового почерпнул, спасибо еще раз!)
 
Цитата
написал:
ожно так:Кодmeasure :=
COUNTROWS (
   FILTER (
       VALUES ( data[ID] );
       NOT ISEMPTY ( CALCULATETABLE ( data; data[type of contract] = "A" ) )
           && NOT ISEMPTY ( CALCULATETABLE ( data; data[type of contract] <> "A" ) )
   )
)
Так тоже все работает, спасибо огромное!)
Страницы: 1
Наверх