希望对我希望完成的工作做一个简短的解释,然后再进行我们一年多的工作。
所需结果 我有一个包含两列SCD_Valid_From和SCD_Valid_To的SCD值表。有没有一种方法可以在我的模型中联接日期表(或者简单地使用不带联接的切片器),以便能够选择介于两个SCD列之间的特定日期并返回该行数据? >
原始表
ID | SCD_Valid_From | SCR_Valid_To | Cost
1 2020-08-01 2020-08-03 5.00
选择的切片器日期为2020-08-02。我希望此ID = 1记录返回。
到目前为止我们尝试过的事情 去年,我们有一名顾问来帮助我们启动Power BI。他的解决方案是创建一个扩展表,其中每个ID /日期组合都包含一行。
展开的原始表格
ID | SCD_Valid_Date | Cost
1 2020-08-01 5.00
1 2020-08-02 5.00
1 2020-08-03 5.00
这最初是在Power BI端发生的,我们将使用增量刷新来控制每天要推送多少表。简而言之,这效率极低,并且刷新速度太慢,无法生效-对于5年的数据量,我们每个ID需要2000多个行才能选择维记录。
有没有一种使用切片器的方法,Power BI可以选择记录的选定日期位于表的两列中的日期之间?
答案 0 :(得分:2)
让我解释一个解决方法,希望这将帮助您解决问题。我猜你下面有2张桌子-
步骤1:如果您在表“ Dates”和“ your_main_table”之间没有关系,那么就可以了,因为您必须创建一个新表,例如“ Dates2”。为此, 您不能在这些表之间建立关系。
如果您已经在这些表之间建立了联系,请使用以下代码创建一个新的自定义表-
Dates2 =
SELECTCOLUMNS(
Dates,
"Date", Dates[Date]
)
在这里,我将把“ Dates2”视为您的日期切片器的来源。但是,如果您具有与表“ your_main_table”没有任何关系的“ Date”表,则在下面的度量创建中考虑使用“ Dates”代替“ Dates2”。现在,在您的表“ your_main_table”中创建以下4个度量
1。
date_from_current_row = max(join_using_date_range[SCD_Valid_From])
2。
date_to_current_row = max(join_using_date_range[SCD_Valid_to])
3。
date_selected_in_slicer = SELECTEDVALUE(Dates2[Date])
4。
show_hide_row =
if(
[date_selected_in_slicer] >= [date_from_current_row]
&& [date_selected_in_slicer] <= [date_to_current_row]
,
1,
0
)
现在您已准备好所有乐器。使用表格“ your_main_table”中的列创建视觉效果
最终步骤:现在,只需添加带有度量“ show_hide_row”的可视级过滤器,设置值仅在“ show_hide_row = 1”时显示。
最终输出将类似于下图-