【问题标题】:Create New Column containing value based on conditions on date and hour根据日期和小时的条件创建包含值的新列
【发布时间】:2021-08-19 14:06:23
【问题描述】:

我的 Power BI 中有一个表,其中包含以下字段:

数据预览:

  • “平台”列有 3 个可能的值:应用程序、商店、网站
  • “天”是日期类型
  • “小时”属于“日期/时间”类型(与“日”相同的信息 + 有小时)

我添加了一个度量来计算转换率(订单/访问):

conversion_rate = DIVIDE(SUM(Table[orders]), SUM(Table[visits]))

然后我计算了 7 天前每天的转化率(以便能够比较它们):

conversion_rate_7_j = CALCULATE(Table[conversion_rate],
                         DATEADD(Table[day],-7,DAY)
                       )

现在我的数据如下所示:

我想要做的是计算 7 天前但同一小时的转化率。

但是,在考虑小时的情况下,我找不到减去日期/时间类型字段的函数。

我想到的一个解决方案是分别计算订单和访问量-7天同一小时,然后除以转化率-7天同一小时:

orders_7_j_hourly = 
    VAR h = Table[hour] - 7
    VAR p = Table[platform]
    Return CALCULATE(
     MAX(Table[orders]),
     Table,
     Table[hour] = h,
     Table[platform] = p
    )

由于我的数据按小时(日期/时间)和平台分组,

而且由于有时在某个小时内我对平台 =“应用程序”而不是“商店”有值,

我的功能不起作用,尤其是我使用的是 MAX,这将订单数量关联到错误的平台。

你能帮忙吗?

样本数据:https://ufile.io/y1blqgqn

【问题讨论】:

  • 有机会提供样本数据吗?
  • 如果您从 Hour 到 Hour_date 和 Hour_hour 列中创建 2 列怎么办?现在您在单独的列中有小时值,您可以轻松地按小时应用额外的分组。这有意义吗?
  • @mkRabbani 我的“平台”问题仍然存在,因为“小时”的每个值都重复 X 次(X = 平台数,有时 3 有时更少)
  • 然后显示所有可能场景的示例数据。然后从它们添加您的预期输出。请避免为示例数据添加图片。
  • @mkRabbani 示例数据添加到原始帖子

标签: powerbi dax powerquery powerbi-embedded


【解决方案1】:

日期时间值以天为单位存储。因此,您可以简单地将 hour 在您的度量中移动 7。

conversion_rate prev_week =
VAR CurrHour = SELECTEDVALUE ( Table1[hour] )
RETURN
    CALCULATE (
        [conversion_rate],
        ALL ( Table1[day] ),
        Table1[hour] = CurrHour - 7
    )

示例结果:

【讨论】:

    【解决方案2】:

    您是否尝试使用 HOUR 功能??

    conversion_rate_7_hour = CALCULATE( [conversion_rate],
    FILTER( ALL(Table),
                             SELECTEDVALUE(Table[day]) - 7 = Table[day]
    &&  HOUR(SELECTEDVALUE(Table[hour]) - 7) = HOUR( Table[hour])
                           ))
    

    当我们将 Table[hour] 用于可视化时,它应该可以工作。

    附言。最佳实践 => 如果您在计算中引用度量,请不要包含表前缀

    【讨论】:

    • 这不起作用,返回错误:DAX 错误:函数“SELECTEDVALUE”已在用作表过滤器表达式的 True/False 表达式中使用。这是不允许的。
    • 在末尾添加 FILTER( ALL(Table), and additional ")"
    【解决方案3】:

    您可以在数据集中创建一个名为 hour 的附加列

    一旦你有了它,你把时间带入可视化,下面的措施可以给你想要的东西

    convRate-7 = CALCULATE([convRate],DATEADD('Table'[day],-7,DAY))
    

    【讨论】:

    • 您的解决方案在像您的示例一样在表格中显示信息时有效!但是当我试图想象它时,我不能用天+小时来做到这一点。你有解决办法吗?
    • 您能否在表格中提供您的预期输出,以便我了解您想要什么?您希望计算发生在 day->hour 级别,但您不想在 viz 中显示小时。那你想在切片机中度过这几个小时吗?请告诉我。
    • 这是我的输出:ibb.co/vVDMWmH 但我想要显示轴 Y = conversion_rate AND conversion_rate_7J,轴 X = date+hour。
    猜你喜欢
    • 2020-04-06
    • 2022-11-12
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多