Power BI M或DAX-将子查询(或度量)的结果汇总在一起与表的每一行结合,然后按日期汇总

问题描述 投票:0回答:1

我正在寻找一种方法来汇总子查询的时间和DAX或M中的时间序列的汇总。我能想到的解决方案是在DAX中对汇总中的每一行应用度量,或加入子查询M中的表达式,但我无法在文档中找到实现此功能的函数。

SQL解决方案示例:

SELECT
    t1.Date,
    t1.Month,
    DailyOccupancy - Capacity 'Availability',
    r.Rate,
    (DailyOccupancy - Capacity) * r.Rate 'OverUnderCost'
FROM
    Rate r 
    INNER JOIN
(SELECT 
    d.Date,
    d.Month,
    SUM(c.Capacity) 'DailyCapacity',
    SUM(o.Occupancy) 'DailyOccupancy'
FROM
    DimDate d
    INNER JOIN Capacity c ON d.Date > c.StartDate AND d.Date < c.EndDate
    INNER JOIN Occupancy o ON d.Date = o.Date
GROUP BY
    d.Date,
    d.Month,
    r.Rate
) t1 ON o.Date = t1.Date

DAX度量值(在单个时间步上有效,但是当使用“容量”度量值和一个月的占用率时,我得到单个“容量”值和30个“占用率”值之和)

DailyCapacity =
VAR currentDate = MAX ( DimDate[Date] )
RETURN
CALCULATE ( SUM('Capacity'[Capacity]),
FILTER ( 'Capacity',
( 'Capacity'[StartDate] <= currentDate
&& 'Capacity'[EndDate] >= currentDate )))

Available =  CALCULATE(SUM('Occupancy'[Occupancy]) - ('Capacity'[DailyCapacity ]))
(Works for each individual time step, doesn't roll up over time)

是否有DAX方法将“容量”度量值减去“可用总量” [[每个时间步长?

另一种方法是使用M创建一个“ DailyCapacity”表。在SQL中:

SELECT d.Date, SUM(c.Capacity) 'DailyCapacity', FROM DimDate d INNER JOIN Capacity c ON d.Date > c.StartDate AND d.Date < c.EndDate GROUP BY d.Date

但是我无法找到一种方法来仅在键中加入M中的布尔表达式。有没有一种方法可以联接

boolean expression

,而不是M中的keys我的桌子:

DimDate (Date, day, Month, Year, Billing Month, FY) ---------- 1/1/2019, 1, 1, 2019, 1, 2019 1/2/2019, 2, 1, 2019, 1, 2019 ... Every time step possible Capacity (StartDate, EndDate, Capacity, Notes) ---------- 1/1/2019, 12/31/2019, 40, "Annual Cap" 6/1/2019, 9/15/2019, 30, "Summer Peak" Occupancy (Date, Occupancy, Location) ---------- 1/1/2019, 20, 1 1/1/2019, 17, 2 1/2/2019, 30, 1 1/2/2019, 9, 2 1/3/2019, 22, 1 1/3/2019, 20, 2 Rate (Date, Rate) ---------- 1/1/2019, $49.99 1/2/2019, $64.99 ... etc.

所需的输出

Available Space: ---------- 1/1/2019, 3 1/2/2019, 1 1/3/2019, -2 1/4/2019, 0

并汇总汇总的时间步骤:

每月,每季度,每年等的总和(可用空间*当日汇率)。包括容量过大和不足的总数为负和正。

powerbi dax powerquery m
1个回答
1
投票
要在DAX中执行此操作,让我们编写一个DailyCapacity度量(非常类似于您的度量),我们将在另一个度量中使用它。 (我在这里使用SELECTEDVALUE,因此如果我要处理多个值,但您的MAXSUM也应该工作,这会更加明显。)

DailyCapacity = VAR currentDate = SELECTEDVALUE ( DimDate[Date] ) RETURN CALCULATE ( SELECTEDVALUE ( Capacity[Capacity] ), FILTER ( Capacity, Capacity[StartDate] <= currentDate && Capacity[EndDate] >= currentDate ) )

现在已计算出可用空间,我们将遍历Occupancy的每一行并调用我们刚刚定义的度量(假设DimDate表具有过滤Occupancy的关系。

AvailableSpace = SUMX ( Occupancy, [DailyCapacity] - Occupancy[Occupancy] )

此度量应按预期汇总,因为它正在计算每一行的每日容量,而不是一次。

类似地,如果您像为DailyRate一样为DailyCapacity编写度量,则可以编写机会成本度量SUMX ( DimDate, [AvailableSpace] * [DailyRate] )

© www.soinside.com 2019 - 2024. All rights reserved.