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]))
我有一个 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]))