【问题标题】:How to get corresponding price of the smallest date chosen in date slicer in Power BI如何获取Power BI中日期切片器中选择的最小日期的相应价格
【发布时间】:2020-06-25 16:10:41
【问题描述】:

我对使用 DAX 和 Power BI 很陌生,所以请不要评判。我的问题似乎(并且可能)很简单。无论如何,我们开始吧:

我有一个包含 3 列的数据集:日期(日期)、价格(浮动)、性能(%)

属性说明: Date 和 Price 是从外部数据源中提取的常量。性能是价格随时间变化的百分比变量。它是时间序列选择中当前日期到第一个日期的价格变化百分比(日期切片器视觉选择的“从日期”)。

我想创建一个动态折线图来显示一段时间内的性能。这里的困难是当我更改“起始日期”时,我希望性能是可变的。意思是,所选“起始日期”的价格是新的基础价格,应相应计算。

公式: 日期 = t,日期 t 的价格 = pt,日期 t 的性能 = pert

日期范围: 2000 年 1 月 1 日至 2010 年 12 月 31 日

日期切片器视觉中的“日期从”= 1.1.2000 时的初始情况:

  • t0 = 1.1.2000
  • pt0 = 5,00
  • pert0 = 0%

  • t5 = 6.1.2000
  • pt5 = 5,054
  • pert5 = (pt5-pt0)/pt0 = 1.08%

更改日期切片器后,“开始日期”现在是 10.10.2009:

  • t0new = 10.10.2009
  • pt0new = 9,938
  • pert0new = 0%

  • t5new = 15.10.2009
  • pt5new = 9,832
  • pert5new = (pt5-pt0)/pt0 = -1,05%

如上所述,我希望从日期切片器中选择的任何起点作为性能计算的新基值,并且折线图应相应调整。

我知道如何制作动态折线图,但我无法弄清楚我需要这样做的度量和计算列。

非常感谢任何帮助!

干杯, 多路复用器

【问题讨论】:

    标签: charts powerbi visualization dax powerbi-desktop


    【解决方案1】:
    1. 将基准计算为与第一个日期相关的价格 时期。 SELECTEDVALUE 假设您每个日期只有一个价格, 否则使用聚合器(例如MINMAXAVERAGE)。我使用 ALLSELECTED,因此 Benchmark 仅受过滤器上下文(切片器)的影响,您可以轻松地在更改上下文的可视化中使用它。
    2. 将我们的基准测试保存在一个变量中以备后用
    3. 将每个价格除以基准。这里我们需要对价格应用一个聚合器, 我使用 AVERAGE 假设您每天只有一个价格,因此,结果是 价格本身。

    这是衡量标准:

    Price vs Dynamic Benchmark :=
    VAR vbenchmark = CALCULATE(SELECTEDVALUE(Dataset[Price]),FILTER(ALL( Dataset[Date]), Dataset[Date] = CALCULATE(min(Dataset[Date])), ALLSELECTED(Dataset))
    return
    AVERAGE(Price) / vbenchmark
    

    【讨论】:

    • 嗨 Seymour,感谢您的意见,这似乎很有意义。但是,我确实很难将您的代码应用于度量。根据我的数据集对其进行编辑后,我仍然遇到错误:无法解析名称“日期”。它不是有效的表、变量或函数名。如果这是一个微不足道的问题,请提前道歉,但是 Date 是另一个需要定义的变量还是还有其他问题?感谢您的时间和精力!
    • 日期应该是数据集[日期]。固定。
    • 嗨西摩!再次感谢您的时间和精力。这也没有解决它。这是调整后的查询,但现在我得到一个不同的错误,但这次与 CALCULATE 函数相关。 (函数 'CALCULATE' 已在用作表过滤器表达式的 True/False 表达式中使用。这是不允许的。)Price vs Dynamic Benchmark = VAR vbenchmark = CALCULATE(SELECTEDVALUE('Input Data'[Price]), 'Input Data'[NAV_Date] = CALCULATE(MIN('Input Data'[NAV_Date]), ALLSELECTED('Input Data'))) RETURN AVERAGE('Input Data'[Price]) / vbenchmark
    • 正确,我们必须使用过滤器才能在行上下文中应用过滤器。
    • 再次感谢您的帮助@Seymour!请查看解决我的问题的最终代码:``` DynamicPerformance = VAR vdate = CALCULATE ( MIN ( 'Input Data'[NAV_Date] ), ALLSELECTED ( 'Input Data' ) ) VAR vbenchmark = CALCULATE ( SELECTEDVALUE ( 'Input Data' [Price] ), 'Input Data'[NAV_Date] = vdate ) RETURN (AVERAGE ('Input Data'[Price]) - vbenchmark)/vbenchmark
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2023-04-10
    • 2019-06-19
    • 2021-10-30
    相关资源
    最近更新 更多