在DAX中测量以仅为Power BI计算所选月份的YTD

Prz*_*min 6 measure dax powerbi

如何构建DAX度量来计算特定月份的YTD值之和?

在这里,我们将FactTable按月分组.FactTable充满了实际数据和预测数据.知道何时实际结束的唯一方法是[年末截止日期]列[年末截止日期]中的信息.在[年终截止日期]列[年末截止日期]中 - 它是一个单值表 - 我们有一个有趣的选择月份,我们希望看到YTD的计算.在我们的例子中,它是三月.FactTable每月不定期更新,通常延迟一个月.由于不规则的更新,无法将其链接到像TODAY这样的时间函数.

在此输入图像描述 在此输入图像描述 我们希望在黄色Card Visual中显示正确的YTD值[月末] [YTD].当我们点击"2018-03"上的切片机时,我们几乎得到了我们想要的东西 - 在黄卡中正确值为66.但是这种解决方案不是自动的.我想在[年末]月份变化时自动查看正确的值,在我们的情况下是4月或5月.我不希望用户完成它.

我的绝望努力可以从文件:DAX YTD.pbix下载

我以各种方式追赶鹿:

  1. 通过在DAX测量中使用FILTER功能.但似乎FILTER功能是苛刻的.它首先应用于事实表,仅选择一个月,然后错误地计算YTD值.因此,如果有任何强制计算和过滤顺序的选项,那么就会有希望.
  2. 我尝试使用SWITCH函数显示特定月份的正确结果,0或其他月份显示null.虽然我在这方面取得了成功,但我无法利用它.在过滤方面,我和以前一样无望.顺便说一句,如果SWITCH在表格末尾产生总数,我就能做到,但事实并非如此.出奇.
  3. 我希望RELATED函数能够在[Cut off date]表中显示正确的结果.到目前为止,我还没有走出迷雾.

我很感激你的帮助.

在赏金之前更新. 走向更高的水平.我已经向FactTable引入了一个Category列.请按category.pbix下载DAX YTD.所以过滤现在变得更加复杂.我想为苹果类别提供正确的YTD数据.

Fox*_* Ng 4

您是否使用了表Date中的列Calendar,而不是 中的列FactTable

如果您使用 的日期列FactTable,那么当您对日期应用过滤器时,它将过滤 3 月份的事实记录,然后进行计算,从而得到结果33

如果您使用 from Calendar,当您对其应用过滤器时,它会过滤其上的记录Calendar(您要在图表中显示的记录),因此基础计算仍将保持不变。


一个工作示例:

Calendar = CALENDAR(DATE(2010, 1, 1), DATE(2020, 12, 31))

日期

我建议您更改度量的计算以避免在某些情况下丢失值:

Total = SUM(FactTable[Value])
MTD = TOTALMTD([Total], 'Calendar'[Date])
YTD = TOTALYTD([Total], 'Calendar'[Date])
Run Code Online (Sandbox Code Playgroud)

结果


更新:

我现在更清楚你想要实现什么,但对我来说这仍然是一个XY 问题

我了解您希望按原样显示仪表板,以便用户不需要每次都单击/输入来查看他们应该看到的内容。这就是为什么我不明白为什么你需要创建一个新表来存储Cut off date (End of YTD). 它如何自动维护?

上面的解决方案relative date filtering实际上仍然适用于您共享的 .pbix 文件。如果您将Date列从Calendar表格拖到黄卡的视觉级别过滤器并添加相对日期过滤,它应该如下工作:

黄牌

对于End of YTD视觉效果,您可以使用以下度量来获取上一个日历月的第一天,因此您不需要为其创建另一个表:

End of YTD = EOMONTH(TODAY(), -2) + 1
Run Code Online (Sandbox Code Playgroud)

希望这就是您想要实现的目标:

最后结果

更新了文件供您参考。


再次更新:

我认为您必须编写自己的YTD计算,而不是使用内置的计算,以便您可以利用在另一个表中定义的截止日期。这里我假设你有且只有一行'Cut off date'[End of YTD]。请注意,我已添加ALL()到过滤器,以便在单击其他一些行/过滤器时黄卡保持不变 (66),而不是显示空白:

YTD_Special = 
CALCULATE(
    [Total],
    FILTER(
        ALL(FactTable),
        FactTable[Date] >= DATE(YEAR(VALUES('Cut off date'[End of YTD])), 1, 1) &&
        FactTable[Date] <= VALUES('Cut off date'[End of YTD])
    )
)
Run Code Online (Sandbox Code Playgroud)

年初至今特别