这是我的示例输入数据表:
entry_id entry_date company_id objective_title objective_status key objective_rank
1 2024-03-01 company_1 objective_1 Completed company_1_objective_1 1
2 2024-12-30 company_1 objective_1 In Progress company_1_objective_1 2
3 2024-01-02 company_2 objective_2 Not Started company_2_objective_2 1
4 2023-11-10 company_3 objective_3 Completed company_3_objective_3 1
如您所见,我已经创建了一个计算列,用于使用以下 DAX 公式进行排名:
objective_rank =
RANKX(
FILTER(
table_1,
table_1[key] = EARLIER(table_1[key])
),
table_1[entry_date],
,
DESC
)
当我尝试查看所有日期的每个最新目标状态的关键计数时,这给了我正确的结果(排名 = 1):
objective_status count_key
Not Started 1
In Progress 0
Completed 2
现在我想要一个切片器,允许用户选择特定的日期范围(基于entry_date)。
因此,如果entry_date 是例如< 2023-12-31 then I'd like to see the following output:
objective_status count_key
Not Started 0
In Progress 1
Completed 1
因为虽然 Objective_1“进行中”,但它不是最新的整体,而是给定日期范围内的最新的。
如何实现?
我曾尝试在 Microsoft Fabric 社区上使用对类似问题的回复,但它们似乎对我的案例不起作用。
我使用SelectedMaxDate根据切片器选择动态捕获最新的entry_date。 然后我创建了一个表变量LatestEntries来按键汇总table_1,查找最大entry_date并将其与日期选择范围内每个键的最新objective_status相对应。
LatestStatusCount =
VAR SelectedMaxDate = MAX(table_1[entry_date])
VAR LatestEntries =
FILTER(
ADDCOLUMNS(
SUMMARIZE(table_1, table_1[key], "MaxDate", MAX(table_1[entry_date])),
"LatestStatus", CALCULATE(MAX(table_1[objective_status]), FILTER(table_1, table_1[entry_date] = [MaxDate]))
),
[MaxDate] <= SelectedMaxDate
)
RETURN
SUMX(
LatestEntries,
CALCULATE(
COUNTROWS(table_1),
FILTER(
ALLSELECTED(table_1[objective_status]),
table_1[key] = EARLIER(table_1[key]) && table_1[objective_status] = EARLIER([LatestStatus])
)
)
)