在power pivot中,我试图根据用户过滤的内容,弄清楚如何标记第一次访问。例如,如果他们正在查看2014年的日历年,那么就是数据。如果您不关心第一次计数发生的时间段,则Distinctcount有效。 如果用户仅过滤到2014年3月,则会看到 以下内容:
答案 0 :(得分:1)
这一开始看起来很棘手,但可以用DAX轻松完成:
=
IF (
CALCULATE (
MIN ( Visits[VisitID] ),
ALL ( Visits[VisitID] ),
ALL ( Visits[AdmitDate] )
)
- MAX ( [VisitID] )
= 0,
1,
0
)
这样做非常简单 - 它会删除 VisitID 和 AdmitDate 上的过滤器,并通过这样做计算每个患者ID的最小值。然后它减去给定行的 VisitID 的MAX。 如果差值等于0(表示这是第一次访问),则该值设置为1 ,否则该值设置为0.
我已将此措施命名为 Check ,如果您将其添加到表中,结果应如下所示:
也适用于过滤(在这种情况下,过滤器设置在月 = 3):
多列情况下使用RANKX的替代方法
此外,RANKX可用于实现此目的 - 它似乎是一个更灵活的解决方案,但我不确定在一个非常大的数据集中的性能。
=
IF (
HASONEVALUE ( Visits[PatientID] ),
IF (
RANKX (
FILTER (
ALLSELECTED ( Visits ),
Visits[PatientID] = MAX ( Visits[PatientID] )
),
[MIN Visit],
,
1,
DENSE
)
= 1,
1,
0
),
DISTINCTCOUNT ( Visits[PatientID] )
)
即使您过滤任何列,此功能也非常有效。理解起来有点复杂,但是可以使用它并检查链接的文档。公式基本上做的是由[PatiendID] 确定的组间动态RANK。
访问ID 正在排名的关键项 - 您必须使用我命名为 MIN访问的新度量:
=MIN([VisitID])
第一次IF检查,如果当前行是总行,如果是,则执行不同的计算以获得首次访问的患者总数(通过计算 Patiend ID )。
我也更新了源Excel文件。这是link (2013 version)。
希望这有帮助。
答案 1 :(得分:0)
这取决于你最终想要看到的内容。
如果您只想要第一次访问日期,则需要添加计算字段,例如:
CALCULATE( FIRSTDATE( 'Date'[Date]), FILTER( Fact, Fact[AdmitDate] >= MIN( 'Date'[Date] ) ) )
如果您想根据数据的首次访问日期计算患者数量,那将会更加复杂。