Powerpivot-Flag首次出现取决于用户过滤器

时间:2015-02-12 17:43:36

标签: powerpivot

在power pivot中,我试图根据用户过滤的内容,弄清楚如何标记第一次访问。例如,如果他们正在查看2014年的日历年,那么就是数据。如果您不关心第一次计数发生的时间段,则Distinctcount有效。 CY2014 如果用户仅过滤到2014年3月,则会看到 以下内容:

March2014

2 个答案:

答案 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 ,如果您将其添加到表中,结果应如下所示:

enter image description here

也适用于过滤(在这种情况下,过滤器设置在 = 3):

enter image description here

多列情况下使用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] ) ) )

如果您想根据数据的首次访问日期计算患者数量,那将会更加复杂。