我有一张桌子,每个人都有一年中每一天的记录。我使用此功能基于每日余额列实现了总计
CALCULATE(
SUM(Leave[Daily Balance]),
FILTER(
ALLEXCEPT(Leave, Leave[Employee Id]),
Leave[Date] <= EARLIER(Leave[Date])
))
但是如果Type = Working并且Daily Balance的运行总数小于零并且上一行的Type不等于Working,则我需要从1重新开始运行。下面是Excel的屏幕截图。所需的功能列是我需要达到的。
这不仅是具有条件的运行总计,而且是嵌套/集群的总计,因为逻辑必须应用于ID级别。对于大表,M比DAX更好,因为它不占用太多RAM。(我在这里写过博客:链接到Blogpost
以下功能使该逻辑适应当前情况,并且必须应用于ID级别:(必需的列名称为:“类型”,“每日津贴”,“调整”)
(MyTable as table) =>
let
SelectJustWhatsNeeded = Table.SelectColumns(MyTable,{"Type", "Daily Allowance", "Adjustments"}),
ReplaceNulls = Table.ReplaceValue(SelectJustWhatsNeeded,null,0,Replacer.ReplaceValue,{"Adjustments"}),
#"Merged Columns" = Table.CombineColumns(ReplaceNulls,{"Daily Allowance", "Adjustments"}, List.Sum,"Amount"),
TransformToList = List.Buffer(Table.ToRecords(#"Merged Columns")),
ConditionalRunningTotal = List.Skip(List.Generate(
() => [Type = TransformToList{0}[Type], Result = 0, Counter = 0],
each [Counter] <= List.Count(TransformToList),
each [
Result = if TransformToList{[Counter]}[Type] = "working" and [Result] < 0 and [Type] <> "working"
then TransformToList{[Counter]}[Amount]
else TransformToList{[Counter]}[Amount] + [Result] ,
Type = TransformToList{[Counter]}[Type],
Counter = [Counter] + 1
],
each [Result]
)),
Custom1 = Table.FromColumns( Table.ToColumns(MyTable) & {ConditionalRunningTotal}, Table.ColumnNames(MyTable) & {"Result"} )
in
Custom1
这样就解决了问题。完美运行,并且没有降低报告速度。谢谢