【问题标题】:Measure does not work for Month Threshold措施不适用于月阈值
【发布时间】:2020-02-15 15:51:54
【问题描述】:

我构建了这个 Dax 度量

_Access_Daily = CALCULATE(
    DISTINCTCOUNTNOBLANK(ApplicationAccessLog[ApplicationUserID]),
FILTER('Date','Date'[DateId]=SELECTEDVALUE('DateSelector'[DateId],MAX('DateSelector'[DateId]))))+0

_Access__PreviousDay = CALCULATE(
DISTINCTCOUNTNOBLANK(ApplicationAccessLog[ApplicationUserID]),  FILTER('Date','Date'[DateId]=SELECTEDVALUE('DateSelector'[DateId],MAX('DateSelector'[DateId]))-1 ))+0

日期选择器表是一个断开连接的表,其中包含从 1 月 20 日到现在的日期。 Dateid 是一个整数,例如 20200131。 Date 表是一个标准的日期表,其中包含 1970 年到 2038 年之间的所有日期。Date id 是一个整数,例如 20200131。 但是,它似乎不适用于 1 月和 2 月之间的月份阈值?因此,如果选择的日期是 2020 年 1 月 2 日,那么它不会在 2020 年 1 月 31 日正确返回。

【问题讨论】:

  • 您应该使用常规日期而不是整数。如果你从 20200201 中减去 1,你将得到 20200200。这是一个合法的数字,但不是一个合法的日期
  • 为这种洞察力干杯。帮助我思考破解它。解决方案是这个过滤器, FILTER('Date','Date'[DayDateNext]=SELECTEDVALUE('DateSelector'[DayDate],MAX('DateSelector'[DayDate])) ))+0
  • 把解决方案放进去,我给你加分。

标签: sql-server powerbi dax


【解决方案1】:

正如 cmets 中所述,这里的根本问题是您使用的整数不是日期。结果,当您减去 1 并跨月(或年)边界时,没有日历智能可以正确调整数字。

您的解决方案(使用“日期”[DayDateNext])可能会起作用,如果出于其他一些考虑,此设计是必须的,请继续使用。但是,我建议重新审视整体方法并使用真实日期而不是“DateId”。然后,您将能够使用内置的 DAX 时间智能,您的代码将更加优雅和快速。

例如,如果您的“Date”和“DateSelector”表有常规日期字段,您的代码可以重写如下:

_Access_Daily =
VAR Selected_Date = SELECTEDVALUE ( 'DateSelector'[Date], MAX ( 'DateSelector'[Date] ) )
VAR Result =
    CALCULATE (
        DISTINCTCOUNTNOBLANK ( ApplicationAccessLog[ApplicationUserID] ),
        'Date'[Date] = Selected_Date
    )
RETURN
    Result + 0

和:

_Access_PreviousDay =
CALCULATE ( [_Access_Daily], PREVIOUSDAY ( 'Date'[Date] ) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    相关资源
    最近更新 更多