从当前上下文中删除行

时间:2015-03-26 15:54:36

标签: powerpivot

我有一个问题困扰了我几天......

我的问题是人们(dimSomeOne)在某一天尝试某事(dimThing)(dimDate)。每次尝试都以状态(dimStatus)结束。不同的人可能在同一日期对同一事物有一个或多个特洛伊。这可以在3月19日看到,这里有人1尝试了2次A,并以状态1结束。 我正在寻找的是特定日期特定日期的不同SOMEONES的数量。如果某人在同一天获得不同的身份,则此人只能计入他的MAX状态。

对于上下文dimTraining:A和dimDate:20.03.2015有5个活动行:theRowNumber 3,4,5,8,11我想删除行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

1 个答案:

答案 0 :(得分:2)

最后的诀窍是添加一个计算列,该列会导致当前状态有效(如果当前状态是有效的(对于某人,某事物在某一天),如果情况不是这样的话公式使用函数BLANK()

返回NULL值
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 for athing:1 on dimDate:2015-03-20 with dimStatus:2来演示可能是DAX函数DISTINCTCOUNT的意外行为。

这是一个link to my question on the PowerPivot论坛,感谢Imke提醒我好好使用计算列......