根据其他列值得出的运行总计

时间:2019-06-21 20:49:21

标签: powerbi dax powerbi-desktop

我需要基于两个库存位置,并且从每个产品的最大值开始计算预测金额的累计总额(由于库存位置,产品编号重复)。例如,产品“ 1”应该用于一次总计。

我的第一个代码,没有根据项目编号独立地得出相同的预测金额。

enter image description here

RunningTotal1 = 
VAR
CurrentAmount= Listing[Forecast Amount]
RETURN
SUMX (
FILTER (
Listing;
Listing[Forecast Amount]>= CurrentAmount);
Listing[Forecast Amount])

我的第二个代码中,运行总计是基于库存位置的,它独立地为每个位置计算的总和仍然不是基于物料编号来独立地得出相同的预测金额。

enter image description here

RunningTotal2 = 
VAR CurrentAmount = Listing[Forecast Amount]
VAR Location = Listing[Stock Location]
RETURN
SUMX (
FILTER (
Listing;
Listing[Stock Location] = Location &&
Listing[Forecast Amount]>= CurrentAmount);
Listing[Forecast Amount])

但是当我在公式中添加第二个位置时,会出现错误。

“ DAX比较操作不支持将Text类型的值与True / False类型的值进行比较。考虑使用VALUE或FORMAT函数来转换值之一。”

RunningTotal3 = 
VAR CurrentAmount = Listing[Forecast Amount]
VAR LocationW = Listing[Stock Location] = "Warehouse"
VAR LocationT = Listing[Stock Location] = "Total Stock"
RETURN
SUMX (
FILTER (
Listing;
Listing[Stock Location] = LocationW ||
Listing[Stock Location] = LocationT &&
Listing[Forecast Amount]>= CurrentAmount);
Listing[Forecast Amount])

我期望的是

enter image description here

你好@RADO,

我尝试添加作为度量,但无法成功,因此我将其添加为新列。我意识到我的代码是错误的,在您的图片项目5和6中编号不同。我的公式是

Forecast Index = RANKX(Listing;Listing[Forecast Amount])

这是结果Forecast Index

致谢

1 个答案:

答案 0 :(得分:0)

您需要在“列表”表中添加一列,以定义运行总计的顺序。您不能为此使用“预测金额”,因为在某些情况下,不同物料的金额相同(例如,物料66和99),并且无法解决这些联系(哪些物料应首先累加-66或99吗?

通常将日期/时间字段用于此目的,但是如果您没有日期/时间字段,则可以根据所需的任何规则添加索引。对于此示例,我手动添加了“预测索引”,如下所示:

enter image description here

这里的预测索引只是一个排序顺序-如果按其排序,您将获得与“所需结果”表完全匹配的布局。

然后,创建一个度量:

RT Expected = 
VAR Current_Index =  MAX ( Listing[Forecast Index] )
VAR Summary_Table =
    SUMMARIZE (
        FILTER (
            ALL ( Listing ),
            Listing[Forecast Index] <= Current_Index  && 
            Listing[Stock Location] <> "Without Stock" ),
        Listing[Item No],
        Listing[Forecast Amount] )
RETURN
    SUMX ( Summary_Table, Listing[Forecast Amount] )

结果:

enter image description here

注意:如果您不想看到第2项和第4项,只需将它们从视觉过滤器中删除即可。

工作原理:

  • 首先,我们使用FILTER创建一个虚拟表,其中a)忽略“无库存”位置,b)仅保留我们需要的总运行量预测值;
  • 第二,我们使用SUMMARIZE按项目号和预测金额对虚拟表进行分组。分组消除重复;
  • 最后,我们使用SUMX来重复数据删除的表,并总结所有相关的金额。

编辑:

您可以使用PowerQuery创建适当的索引:

  1. 在左窗格中,转到“数据”,然后选择“列出”表;
  2. 右键单击表,然后选择“编辑查询”。 Power BI将带您进入Power Query窗口;
  3. 在Power Query中,首先,对“ Forecast Amount”降序进行排序。然后,对“项目编号”升序进行排序。这将按照您在图片中的记录顺序排列您的记录;
  4. 最后,在Power Query窗口中,转到“ Add Column”,然后“ Index Column”,选择“ From 1”。 Power Query将为您创建一个索引列,并将其命名为“ Index”。您可以根据需要将其重命名(即,重命名为“预测索引”);
  5. 单击“关闭并应用”,然后构建建议使用此新索引列作为输入的度量。

如果这些说明不清楚,请参阅本文:

https://www.excelguru.ca/blog/2018/06/14/ranking-method-choices-in-power-query/