使用日期 table 的期末进行中事件的 dax
dax for events in progress at end of period using date table
我需要按日期汇总所有开放机会的总金额。每条记录都附有一个 [valid from] 和一个 [valid to] 日期。当数据库中的机会更新时,将添加一个新行,其中包含 [valid from] date = today 和 [valid to] date = end of time (12/31/2100)。上一行的 [valid to] 日期为昨天的日期。
推理:因为机会每天可以更改多次,所以我们只关心每天超过 11:59:59 阈值的版本。当机会发生变化时,之前的版本仅在前一天结束前有效,因此它的 [valid to] 字段获取前一天的日期。
当按大于日期的单位细分时,我需要当时机会的最后一个正确版本。例如,1 月份的美元金额是 1 月 31 日 11:59:59.
机会的最新美元价值的金额
这是我的架构的简化版本:
这是一些示例数据:
Opp Number Dollars Opp Created Date Header Valid From Header Valid To
1 100 1/1/2019 1/1/2019 1/3/2019
1 50 1/1/2019 1/4/2019 1/5/2019
1 75 1/1/2019 1/6/2019 12/31/2100
2 200 1/3/2019 1/3/2019 1/4/2019
2 210 1/3/2019 1/5/2019 1/6/2019
2 250 1/3/2019 1/7/2019 12/31/2100
给定此示例数据集,主元 table 应如下所示:
Dates Sum of Dollars
1/1/2019 100
1/2/2019 100
1/3/2019 300
1/4/2019 250
1/5/2019 260
1/6/2019 285
1/7/2019 325
1/8/2019 325
...
1/31/2019 325
January 325
我尝试了几种方法,但都无济于事。以下是我尝试过的参考资料:
https://www.sqlbi.com/wp-content/uploads/DAX-Query-Plans.pdf
https://community.powerbi.com/t5/Desktop/DAX-formula-for-value-at-point-in-time-dynamic/td-p/601977
- https://www.sqlbi.com/articles/analyzing-events-with-a-duration-in-dax/
我能够让它在 dax studio 中按预期工作,但我无法将其转化为度量。
EVALUATE
ADDCOLUMNS (
VALUES ( 'DIM Date'[Date]),
"Open Orders",
SUMX (
FILTER (
GENERATE (
SUMMARIZE (
'FACT Opportunity',
'FACT Opportunity'[header valid from],
'FACT Opportunity'[header valid to],
"Rows",
DISTINCTCOUNT ( 'FACT Opportunity'[Opp Number])
),
DATESBETWEEN (
'DIM Date'[Date],
'FACT Opportunity'[header valid from],
'FACT Opportunity'[header valid to]
)
),
'DIM Date'[Date] = EARLIER ('DIM Date'[Date])
),
[Rows]
)
)
我明白了。我缺少一个 ALL() 函数来消除由 CALCULATE() 函数完成的上下文转换。我还在 VALUES() 函数周围使用 LASTDATE() 来获取任何给定上下文中的最后日期。这给了我层次结构中任何给定 month/qtr/year 中最后日期的总和。
这是我使用的代码:
Active Opps:=
SUMX(
LASTDATE( VALUES ( 'DIM Date'[Date] ) ),
VAR CurrentDate = 'DIM Date'[Date]
VAR OrderedBeforeCurrentDate =
FILTER (
ALL ( 'FACT Opportunity'[header valid from]),
'FACT Opportunity'[header valid from] <= CurrentDate
)
VAR ShippedAfterCurrentDate =
FILTER (
ALL ( 'FACT Opportunity'[header valid to] ),
'FACT Opportunity'[header valid to] >= CurrentDate
)
RETURN
CALCULATE (
DISTINCTCOUNT( 'FACT Opportunity'[Opp Number]),
OrderedBeforeCurrentDate,
ShippedAfterCurrentDate,
ALL ( 'DIM Date' )
)
)
在此处找到模式:https://www.sqlbi.com/articles/analyzing-events-with-a-duration-in-dax/
我需要按日期汇总所有开放机会的总金额。每条记录都附有一个 [valid from] 和一个 [valid to] 日期。当数据库中的机会更新时,将添加一个新行,其中包含 [valid from] date = today 和 [valid to] date = end of time (12/31/2100)。上一行的 [valid to] 日期为昨天的日期。
推理:因为机会每天可以更改多次,所以我们只关心每天超过 11:59:59 阈值的版本。当机会发生变化时,之前的版本仅在前一天结束前有效,因此它的 [valid to] 字段获取前一天的日期。
当按大于日期的单位细分时,我需要当时机会的最后一个正确版本。例如,1 月份的美元金额是 1 月 31 日 11:59:59.
机会的最新美元价值的金额这是我的架构的简化版本:
这是一些示例数据:
Opp Number Dollars Opp Created Date Header Valid From Header Valid To
1 100 1/1/2019 1/1/2019 1/3/2019
1 50 1/1/2019 1/4/2019 1/5/2019
1 75 1/1/2019 1/6/2019 12/31/2100
2 200 1/3/2019 1/3/2019 1/4/2019
2 210 1/3/2019 1/5/2019 1/6/2019
2 250 1/3/2019 1/7/2019 12/31/2100
给定此示例数据集,主元 table 应如下所示:
Dates Sum of Dollars
1/1/2019 100
1/2/2019 100
1/3/2019 300
1/4/2019 250
1/5/2019 260
1/6/2019 285
1/7/2019 325
1/8/2019 325
...
1/31/2019 325
January 325
我尝试了几种方法,但都无济于事。以下是我尝试过的参考资料:
https://www.sqlbi.com/wp-content/uploads/DAX-Query-Plans.pdf
https://community.powerbi.com/t5/Desktop/DAX-formula-for-value-at-point-in-time-dynamic/td-p/601977
- https://www.sqlbi.com/articles/analyzing-events-with-a-duration-in-dax/
我能够让它在 dax studio 中按预期工作,但我无法将其转化为度量。
EVALUATE
ADDCOLUMNS (
VALUES ( 'DIM Date'[Date]),
"Open Orders",
SUMX (
FILTER (
GENERATE (
SUMMARIZE (
'FACT Opportunity',
'FACT Opportunity'[header valid from],
'FACT Opportunity'[header valid to],
"Rows",
DISTINCTCOUNT ( 'FACT Opportunity'[Opp Number])
),
DATESBETWEEN (
'DIM Date'[Date],
'FACT Opportunity'[header valid from],
'FACT Opportunity'[header valid to]
)
),
'DIM Date'[Date] = EARLIER ('DIM Date'[Date])
),
[Rows]
)
)
我明白了。我缺少一个 ALL() 函数来消除由 CALCULATE() 函数完成的上下文转换。我还在 VALUES() 函数周围使用 LASTDATE() 来获取任何给定上下文中的最后日期。这给了我层次结构中任何给定 month/qtr/year 中最后日期的总和。
这是我使用的代码:
Active Opps:=
SUMX(
LASTDATE( VALUES ( 'DIM Date'[Date] ) ),
VAR CurrentDate = 'DIM Date'[Date]
VAR OrderedBeforeCurrentDate =
FILTER (
ALL ( 'FACT Opportunity'[header valid from]),
'FACT Opportunity'[header valid from] <= CurrentDate
)
VAR ShippedAfterCurrentDate =
FILTER (
ALL ( 'FACT Opportunity'[header valid to] ),
'FACT Opportunity'[header valid to] >= CurrentDate
)
RETURN
CALCULATE (
DISTINCTCOUNT( 'FACT Opportunity'[Opp Number]),
OrderedBeforeCurrentDate,
ShippedAfterCurrentDate,
ALL ( 'DIM Date' )
)
)
在此处找到模式:https://www.sqlbi.com/articles/analyzing-events-with-a-duration-in-dax/