2015-03-26 5 views
0

У меня есть проблема, которая пилит меня за пару дней ...Удалить строки из текущего контекста

Моя проблема о людях (dimSomeOne), которые пытаются что-то (dimThing) на определенный день (dimDate) .each попробовать завершается статусом (dimStatus). Возможно, что у отдельного человека есть одна или несколько попыток для одной и той же вещи в ту же дату. Это видно на 19-ом марше, здесь кто-то 1 попробовал 2 раза вещь А и закончил со статусом 1. То, что я ищу, - это количество отдельных ЧЕЛОВЕК в определенный день для определенного статуса. Если кто-то достигнет другого статуса в тот же день, этот человек просто рассчитывается для его статуса MAX.

Для контекста dimTraining: A и dimDate: 20.03.2015 есть 5 активных строк: theRowNumber 3,4,5,8,11I хочу удалить строки 3,4,5 из-за того, что они "принадлежат «кому-то 1 и тому факту, что у кого-то 1 есть максимальные статы 3 в эту дату.

Я в состоянии произвести запрос DAX, который возвращает результат, который имеет правильное число кого-то это для даты и статуса

evaluate(
summarize(
filter(
    addcolumns(
     summarize(
      'fact',[aDate],[someone],[aStatus] 
      --,[theRowNumber] 
     ) 
    ,"maxstatus" 
    ,calculate(max(fact[aStatus]),all(fact[aStatus])) 
    ) 
,fact[aStatus] = [maxstatus] 
) 
,[aDate],[someone],[aStatus],[maxStatus] 
--,[therownumber] 
) 
) 
order by 
[aDate],[someone],[aStatus] 

, но я не в состоянии использовать это в рассчитанная мера. Как всегда любая помощь ценится

Кстати Вот это XLSX файл, который содержит мои данные выборки и есть также две меры, которые, к сожалению, не решить мою проблему:

https://www.dropbox.com/s/anxn0vmrjzpiewx/TheDistinctSomeOneThing.xlsx?dl=0

ответ

2

Что, наконец, сделал трюк заключается в том, чтобы добавить вычисляемый столбец, который приводит к состоянию curerent, если текущий статус действителен (для кого-то, на вещи в, в определенный день), если это не так, как формула возвращает значение NULL, используя функция BLANK():

validStatus=IF([aStatus]=CALCULATE(MAX([aStatus]); FILTER(fact; [aThing]=EARLIER([aThing]) && [someone]=EARLIER([someone]) && [aDate]=EARLIER([aDate])));[aStatus];blank()) 

Затем я использую довольно простую расчетную меру, которая использует DISTINCTCOUNT на самом деле [кто-то], с небольшой фильтрацией. Фильтр необходимо в связи с тем, что активные строки для текущего контекста фильтра все еще содержат строки с недействительным статусом (NULL)

ожидается

distinctCountSomeOne=calculate(distinctcount(fact[someone]) 
;not(isblank(fact[ValidStatus]))) 

Это приводит к следующему ...

enter image description here

Обратите внимание, что между этим сообщением и моим первоначальным вопросом я добавил строку в таблицу dimSomeOne и к факту таблицы (newSomeOne для athing: 1 на dimDate: 2015-03-20 с dimStatus: 2 до demonst возможно, неожиданное поведение функции DAX DISTINCTCOUNT.

А вот link to my question on the PowerPivot форума, благодаря Imke напоминая мне о хорошем использовании вычисляемых столбцов ...

+0

Спасибо за размещение, что работает для вас. Чтобы лучше помочь другим с одинаковой ситуацией, лучше расширять детали ссылки, поскольку ссылки не всегда навешиваются навсегда. – guitarthrower

+1

@guitarthrower отредактирован ;-) –

Смежные вопросы