DAX处理不同月份的周期

我有2桌子。

第一张表:在销售周期开始时显示汽车可用单位的维表,以及这些单位可用多长时间。

在这里输入图像说明

第二张表格:显示在“可用周期”内某个特定月份销售了多less辆汽车。

在这里输入图像说明

我想比较每个周期内的“销售行为”。 因此,我想要显示周期内每个阶段销售的单位旁边的总初始单位。 第二个维度工作正常,但不是第一个。

这是我得到的:

在这里输入图像说明

这是所需的输出(请注意行4和5 for available_units)

在这里输入图像说明

我试了下面的DAX代码没有成功:

SumAvailableUnits:=CALCULATE(SUM([available_units]),FILTER(ALL(Table1[month_within_cycle]),[month_within_cycle]>=MAX([months_available]))) 

首先, DAX格式化程序是你的朋友。 你可能喜欢写不可读的单行措施,但没有人喜欢读它们。

我也放弃了清理你的表名和添加完全合格的列引用的自由。 (忽略维度不是纯维度,因为它包含您在度量中聚合的数值)

 SumAvailableUnits := CALCULATE ( SUM ( DimCar[available_units] ), FILTER ( ALL ( FactSale[month_within_cycle] ), FactSale[month_within_cycle] >= MAX ( DimCar[months_available] ) ) ) 

我们马上就会看到一个问题。 使用完全限定的列引用,很显然,您正在试图通过基表(多边)过滤查找表(一边)。 在Power Pivot for Excel中,我们没有双向关系(虽然它们在Power BI中可用,而在Excel 2016中可用)。 我们的关系的filter上下文只从查找表stream向基表,通常从维度stream向事实。

此外,通过持有[available_units]和[months_available],您的DimCar对隐含的假设进行编码,即某个特定的[car_id]只能引用单个不变的批次。 你将永远不会看到[car_id] = 1的另一行。这不太可能。 即使是这样的情况,更好的解决scheme是一个模型的变化。

一般来说,任何进入行或列的标签都应该来自一个维度,而不是事实。 同样,任何你在一个措施中汇总的东西都应该放在事实表中。 通常的例外是尺寸计数 – 无论是裸露还是作为衡量标准。 遵循这些将使您在尺寸build模方面获得80%的成功。 您可以在下面的图片中看到我已经结束的表格和模型图。

这里是度量定义

 SumAvailableUnits:=SUM( FactAvailability[available_units] ) SumSold:=SUM( FactSale[cars_sold] ) 

这里是我的源表,我的模型图与关系,以及从这些片段和上面的措施构build的数据透视表。 请注意数据透视表中[month_within_cycle]的来源。

模型

最后,你可能会注意到,我的总体行为与原来的不同。 由于价值是每月重复,我们得到一个更大的总额。 如果您需要以最后一个月(您在样本中看起来像)的总和结束,则可以使用下面提供的替代度量。 我不明白为什么这将是你想要的总计,但你可以很容易地实现。 就个人而言,我可能会在总体水平上将这一措施置之度外。

 SumAvailableUnits - GrandTotal:= SUMX( TOPN( 1 ,FactAvailability ,FactAvailability[month_within_cycle] ,0 ) ,FactAvailability[available_units] ) 

这使用SUMX()来遍历由TOPN()定义的表。 TOPN()返回FactAvailability中的第一行(在这种情况下),包括在[month_within_cycle]sorting后的关系,在filter上下文中可用的所有行中。 在特定月份的情况下,您将获得与该月份相关的所有行 – 与简单总和相同。 在总的情况下,你会得到与上个月相关的行。

SUMX()迭代该表并累计[available_units]的值。