我正在寻找一种方法来汇总子查询的时间和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中的布尔表达式。有没有一种方法可以联接,而不是M中的keys?我的桌子:boolean expression
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
并汇总汇总的时间步骤:每月,每季度,每年等的总和(可用空间*当日汇率)。包括容量过大和不足的总数为负和正。
DailyCapacity
度量(非常类似于您的度量),我们将在另一个度量中使用它。 (我在这里使用SELECTEDVALUE
,因此如果我要处理多个值,但您的MAX
和SUM
也应该工作,这会更加明显。)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] )
。