如何使用DAX

时间:2017-10-27 18:29:22

标签: excel-formula powerbi dax powerquery

我在SSRS中有一份报告,其中包含我需要转换为DAX的计算。 目标是计算ProjectedYTD

enter image description here

但为了做到这一点,首先我要计算当天的保费和预算。 所以我在SSRS中的做法是:

1)我通过将当前的总预算除以本月的天数来计算当月的每日预算。所以每天10月的预算是

2,579,757 / 31 = 83,217.97

2)接下来,我将每天的预算乘以当月开始到今天之间的天数。所以如果今天是10月27日那么

83,217.97 * 27 = 2,246,885

3)最后一步是我将当前月份(10月)之前的整个预算添加到10月份的预算到今天:

23,385,769 + 2,246,885 = 25,632,654

然后我计算每个月的差异和直到今天的总数。

Variance = (Total Premium - Budget till current day)/ Budget till current day * 100

这是:

 (28,477,194 - 25,632,654) / 25,632,654 * 100 = 11.1%

最后计算Projected YTD

(Total Budget for whole year  -  Budget till current day) * (1 + Variance) + TotalPremium

这是:

(30,148,763 - 25,632,654) * (1 + 0.11) + 28,477,174 = 33,494,470

所以我假设我必须在Power BI中创建所有这些变量,然后执行计算。

在Power BI中我看到类似的东西:

enter image description here

.ipbx文件可以在这里访问:

https://www.dropbox.com/s/io1yumnqlrzj067/PremiumByDivisions.pbix?dl=0

请帮忙。

更新1

乔,非常感谢你的时间。 我认为它没有正确计算BudgetTillCurrentDay。屏幕截图为25,965,526,是预算到10月底的总和。

enter image description here

但我需要直到今天。因此,如果今天是30日,那么2,579,757 / 31 * 30 = 2,496,539 - 这是从10月初到今天(10月30日)的预算

然后总和(截至9月底的全年预算)+ 2,496,539 = 25,882,308。

enter image description here

抱歉混淆。

1 个答案:

答案 0 :(得分:1)

在进入我的解决方案之前的一些评论:

  • 您分享的文件中的数字与您问题中的数字完全一致,因此希望此解决方案符合预期的数字。
  • 此解决方案的末尾有一个屏幕截图,显示我正在处理的报告页面,以便您可以看到我正在使用的结构作为示例。
  • 要评论您问题中的最后一句话,您在技术上不必采取所有这些措施;你可以将公式合并为一个(类似于我在下面的第一个预算相关公式中所做的那样),但我认为将它们分解为单独的措施,就像我做的那样,报告工作会更好。

在考虑预算之前,我在Premiums表中创建了一些措施,以便稍后简化其他公式。

PremiumsMTD = TOTALMTD(SUM(Premiums[Premium]), Dates[Date])

PremiumsYTD = TOTALYTD(SUM(Premiums[Premium]), Dates[Date])

首先,为了创建一个月初至今的预算指标,我使用了以下公式。一步一步,这个公式1)计算出该月的总天数,2)将该月的总预算除以天数,3)计算出该月过去的天数(全部)如果是过去一个月,0表示未来月份,当前月份的当前日期),最后4)将每天的预算乘以已过去的天数。

BudgetMTD = 
VAR DaysOfMonth = MAXX(Dates, DAY(EOMONTH(Dates[Date], 0)))
VAR BudgetPerDayForMonth = SUM(BudgetData[Amount]) / DaysOfMonth
VAR DaysInMonthToToday = MAXX(Dates,
    IF(Dates[Date] < TODAY(), DAY(Dates[Date]),
        IF(Dates[Date] > TODAY(), 0,
            DAY(TODAY())
        )))

RETURN BudgetPerDayForMonth * DaysInMonthToToday

接下来,对于YTD,只需使用Power BI的内置TOTALYTD功能(就像为Premiums措施所做的那样),将新创建的BudgetMTD度量作为表达式,并将其过滤到非未来天。

BudgetYTD = TOTALYTD(BudgetData[BudgetMTD], Dates[Date], Dates[Date] <= TODAY())

然后你可以通过使用之前创建的MTD和YTD度量进行简单的数学运算来获得差异。

BudgetVarianceMTD = (Premiums[PremiumsMTD] - BudgetData[BudgetMTD]) / BudgetData[BudgetMTD]

BudgetVarianceYTD = (Premiums[PremiumsYTD] - BudgetData[BudgetYTD]) / BudgetData[BudgetYTD]

这是我正在处理的报告页面。请注意,我使用的是矩阵(虽然它可以有许多不同的视觉效果),MonthName作为轴/类别。由于视觉是一个月的颗粒,因此年初至今的价值观在同一个视觉中没有一个好地方存在(Power BI小计自动赢得了与自定义测量相匹配的小计),这就是为什么那里是具有年初至今价值的卡片。

Working report