温馨提示:本文翻译自stackoverflow.com,查看原文请点击:powerbi - Power BI Desktop DAX restart running total column
dax powerbi powerbi-desktop

powerbi - Power BI Desktop DAX重新启动运行总计列

发布于 2020-04-08 11:33:06

我有一张桌子,每个人都有一年中每一天的记录。我使用此功能基于每日余额列实现了总计

CALCULATE(
SUM(Leave[Daily Balance]),
FILTER(
   ALLEXCEPT(Leave, Leave[Employee Id]),
   Leave[Date] <= EARLIER(Leave[Date])
))

但是如果Type = Working并且Daily Balance的运行总数小于零并且上一行的Type不等于Working,则我需要从1重新开始运行。下面是Excel的屏幕截图。所需的功能列是我需要达到的。

在此处输入图片说明

查看更多

提问者
LynseyC
被浏览
134
ImkeF 2020-02-27 21:04

这不仅是具有条件的运行总计,而且是嵌套/集群的总计,因为逻辑必须应用于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