我不明白为什么会出现此错误?
我确信列
MM-DD Sort
在表中具有唯一值
这是我在 Power BI 中使用的日历表查询:
DECLARE @MinDate DATE = '2017-07-01',
@MaxDate DATE = CAST(GETDATE() + 7 as DATE)
;WITH cte_Calendar AS (
SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)
FROM sys.all_objects a
CROSS JOIN sys.all_objects b
) SELECT Date,
MonthNum = MONTH(Date)
,Year = Year(Date)
,Month = FORMAT(Date, 'MMM')
,'MM-DD' = FORMAT(Date, 'MMM') + '-'+ FORMAT(Date, 'dd')
,'MM-DD Sort' = FORMAT(Date, 'yyMMdd')
FROM cte_Calendar
那么这是 Power BI 中的某种错误吗?
MM-DD Sort
中的值是唯一的,但MM-DD
中的值不是唯一的。
例如,如果您的日期表跨越 2019 年和 2020 年,那么您将在多行中显示
Jun-30
,并在排序列中显示 190630
和 200630
。因此 Power BI 不知道使用哪个索引来进行排序。
您可以使用建议的日期排序列(其中确实包括年份),但由于
MM-DD
中没有年份,因此您不能将年份包含在 MM-DD Sort
中并期望它能够工作。
特殊字符也会影响这一点。 我有一个 dim_Hour 表,其中包含 [Hour_Number]、[Military_Hour_Notation]、[AM_PM_Hour_Notation] 和 [ProductionDaySort] 列。 该表有24条记录。 [Military_Hour_Notation] 类似于“14:00”,[AM_PM_Hour_Notation] 为“2 PM”。 工厂生产日为08:00至次日07:59。 我设置了 [ProductionDay Sort] 列,以便能够相应地显示生产图表(使用事实表中的数据)。
我可以要求 PowerBI 在 [ProductionDaySort] 上“按列排序”[AM_PM_Hour_Notation],但当我尝试 [Military_Hour_Notation] 时,我收到错误“我们无法按 'ProductionDaySort' 对 'Military_Hour_Notation' 列进行排序。可以' “Military_Hour_Notation”中的相同值不能超过“ProductionDaySort”中的值,请选择不同的列进行排序或更新“ProductionDaySort”中的数据。
这绝对是一个错误。
(我可以发誓这在一周前就有效了。不知道在此期间 PowerBI 是否有更新)