【问题标题】:Power BI - Select Slicer Date Between 2 ColumnsPower BI - 在 2 列之间选择切片器日期
【发布时间】:2020-08-03 19:55:20
【问题描述】:

希望能快速解释一下我希望完成的工作,然后是我们一年多来一直在研究的方法。

想要的结果 我有一个包含两列 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/Date 组合的一行。

扩展的原始表格

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 可以选择所选日期介于表的两列日期之间的记录?

【问题讨论】:

  • 据我所知,这是满足您要求的唯一选择。你是如何创建扩展表的?使用 CROSSJOIN 是一种选择。
  • 问题:您的切片器中有单日选择吗?如果是,可能有解决方法。
  • @mkRabbani,是的,切片器有单独的日期。因此,在我的示例中,用户希望选择 2020-08-02 并希望查看返回的 ID=1 记录。
  • 在 SQL 端使用 CROSS JOIN 不是问题,我们就是这样做的。相反,一个相当小的表会爆炸超过 30 亿行,每天增加 2-3 百万行。考虑到我们数据仓库的规模,将构成我们现在仓库规模的约 50%。
  • 是的,他们一次只会选择 1 天。让我在下面尝试您的解决方案,我会尽快回复您。谢谢。

标签: powerbi slicers


【解决方案1】:

让我解释一下解决方法,希望这能帮助您解决问题。让我猜你有以下 2 张桌子-

  1. “日期”表,其中包含“日期”列,您从中生成日期切片器。
  2. “your_main_table”,带有“scd_valid_from”和“scd_valid_to”列。

第 1 步:如果表“Dates”和“your_main_table”之间没有关系,这很好,否则您必须创建一个像“Dates2”这样的新表。对于此解决方法,您不能在这些表之间建立关系。

如果您已经在这些表之间建立了关系,请使用以下代码创建一个新的自定义表-

Dates2 = 
SELECTCOLUMNS(
    Dates,
    "Date", Dates[Date]
)

从这里开始,我会将“Dates2”视为您的日期切片器的来源。但是,如果您有与表“your_main_table”没有关系的“日期”表,则只需在下面的度量创建中考虑用“日期”代替“日期2”。现在,在您的表“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”时显示。

最终输出如下图-

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多