【问题标题】:Calculate date diff between column date for each row and min slicer date计算每行的列日期和最小切片器日期之间的日期差异
【发布时间】:2021-05-04 16:16:10
【问题描述】:

我认为以下公式很好地总结了我想要实现的目标:

date diff = 
ABS (
    DATEDIFF (
        data_table[login_date],
        SELECTEDVALUE ( 'Date'[Date] ),
        DAY
    )
)

但它返回了以下错误

A single value for column 'login_date' in table 'data_table' cannot be determined. This can happen when a measure formula refers to a column that contains many values without specifying an aggregation such as min, max, count, or sum to get a single result.

换句话说,我希望在我的 data_table 中有一个列,其日期差异是根据最小切片器日期选择动态计算的。

我的最终目标是根据切片器日期范围动态过滤掉过去 3 个月未登录的用户。

这是数据集

user_id, login_date
111, 01/02/2021
222, 02/15/2021
444, 03/15/2021
555, 01/15/2021

我希望在日期范围的最大日期与上次连接日期之间的天数大于 90 天时过滤掉用户 ID。

编辑

我正在添加一个我正在研究的不同公式,但几乎没有什么问题可以让它发挥作用

active users = CALCULATE( DISTINCTCOUNT(data_table[id]), ( FILTER ( VALUES ( data_table[id] ),  DATEDIFF(IF( ISBLANK(SELECTEDVALUE(data_table[login_date])),[Min range date],SELECTEDVALUE(data_table[login_date])),[Max range date],DAY) < 90 ) ))

【问题讨论】:

  • 你不能有一个动态更新的列,它必须是一个度量。您可以发布一些示例数据吗?有预期的结果?
  • @Jon 我已经添加了更多细节,希望对您有所帮助。

标签: powerbi


【解决方案1】:

您不能拥有动态计算的列,但您可以使用度量来执行此操作。您的计算存在的问题是它需要逐行进行评估,而不是对一列进行评估。这就是为什么您会收到“无法确定表 'data_table' 中列 'login_date' 的单个值”错误。

在这种情况下,您可以使用SUMX,因为这是一个迭代器,它将逐行执行。所以使用以下措施:

Selected Date = SELECTEDVALUE('Calendar'[Date])

这会读取所选日期。如果需要,您可以根据切片器的设置方式用 MIN/MAX 包装它。您可以将切片器更改为单选,您只需要一个值。

Date Calc = SUMX('Table', DATEDIFF('Table'[Login_date], [Selected Date], DAY))

这使用 SUMX 逐行计算。

然后,您可以使用此度量来驱动您的视觉效果。在这个例子中,我已经过滤掉了登录后超过 30 天的那些

如果您选择新日期,它将立即重新计算。这应该为您的用例设置正确的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2020-02-08
    相关资源
    最近更新 更多