DAX - 为满足过滤要求的每个组计算一行

DAX - Count one row for each group that meet filter requirement

我有一个 UserLog table 记录“添加”、“删除”或“更新”操作以及 date/timestamp。

在 Power BI 中,我想准确显示过滤时间段内新用户和删除用户的数量。由于可能已添加然后删除了用户,因此我需要确保我只从日志中为每个用户获取最后一条记录 (ADDED/DELETED)。

首先,我尝试设置一个获得最大值的度量 date/timestamp:

LastUpdate = CALCULATE(MAX(UserLog[LogDate]), UserLog[Action] <> "UPDATED")

然后我尝试创建显示新用户数量的度量:

AddedCount = CALCULATE(COUNT(UserLog[userId]), FILTER(UserLog, [Action] = "ADDED" && [LogDate] = [LastUpdate]))

但结果不准确,因为它仍然计算所有“已添加”记录,无论它是否是最后一条记录。

我发现针对非结构化数据编写公式要困难得多。如果你给数据增加一点结构,它就会变得容易得多。有很多方法可以做到这一点。这是一个。

向您的 UserLog table 添加 2 列以帮助计算添加和删除:

Add = IF([Action]="ADDED",1,0)
Delete = IF([Action]="DELETED",1,0)

然后创建一个摘要table,这样您就可以知道是否在同一个 [LogDate]:

中添加和删除了同一个用户
Counts = SUMMARIZE('UserLog',
    [LogDate],
    [userId],
    "Add",SUM('UserLog'[Add]),
    "Delete",SUM('UserLog'[Delete]))

那么措施写起来就简单了。对于 AddedCount,只过滤 [Delete]=0 的行,对于 DeletedCount,只过滤 [Add]=0:

的行
AddedCount = CALCULATE(SUM(Counts[Add]),
    Counts[Delete]=0,
    FILTER(Counts,Counts[LogDate]=[LastUpdate]))
DeletedCount = CALCULATE(SUM(Counts[Delete]),
    Counts[Add]=0,
    FILTER(Counts,Counts[LogDate]=[LastUpdate]))