【问题标题】:Inconsistent date between SSAS Cube and Tabular ModelSSAS 多维数据集和表格模型之间的日期不一致
【发布时间】:2019-03-05 11:31:45
【问题描述】:

我有一个非常奇怪的问题。我已经建立了一个表格模型,它从 SSAS 多维数据集中获取数据。在数据源多维数据集中,有一个名为“处理日期”的列,它采用英国日期格式 (dd/mm/yyyy)。当我将此列带入我的模型时,日期被弄乱了,日期和月份值被交换为某些日期!

以下是说明这一点的图片,我用红色突出显示了一个特定日期。在数据源 SSAS 多维数据集中,日期为 12/02/2019,当它进入表格模型时,该日期为 2019 年 2 月 12 日。我在表格模型中添加了一个 check_month 列,发现表格模型认为它的 12 月,即日/月已被交换!

data source date

model date

谢谢

JC

编辑:这已通过更改连接中的区域设置标识符来解决。请参阅 userfl89 在下面的答案中的评论。这是由于数据源多维数据集使用的是不同的语言环境(美国英语),然后是我在模型中使用的语言,更改语言环境标识符将覆盖它,从而解决问题

【问题讨论】:

    标签: visual-studio ssas tabular olap-cube ssas-tabular


    【解决方案1】:

    可以从 SSDT 定义日期格式。突出显示日期列并转到属性窗口(按 F4)。对于Data Format 属性,选择所需的日期格式。如果您需要未列出的日期格式,则可以基于原始列创建使用FORMAT 函数的计算列,然后将此列的数据类型设置为Date。下面是一个例子。此外,确认 SSDT 中的区域设置标识符 (LCID)。这可以通过选择 Model > Existing Connections > Edit > Build > All 来查看>> 然后是 Locale Identifier 属性。 Microsoft documentation 提供了有关识别正确 LCID 的详细信息。

    =FORMAT('Process'[Process Date], "dd-MM-yyyy")
    

    【讨论】:

    • 感谢您的回答。我试过了,但它不起作用。我相信不是简单地改变了格式,而是在从源多维数据集查询时交换了“日”和“月”值。我还注意到,这只发生在月份值
    • 您是否尝试过将处理日期列的数据类型更改为文本然后使用计算列,或者将处理日期列作为文本导入(即在 SQL 语句中转换为 VARCHAR)然后应用计算列?
    • 再次感谢您的评论。我尝试将“处理日期”列作为文本。通过这样做,所有日期都是美国格式。然后我执行计算列 =FORMAT('Process'[Process Date], "dd-MM-yyyy") 不会导致任何更改。我尝试做 =FORMAT(Datevalue('Process'[Process Date], "dd-MM-yyyy")),这导致了老问题(日值
    • 它可能与连接中的区域设置标识符有关。可以通过转到模型 > 现有连接 > 编辑 > 构建 > 全部 > 然后是区域设置标识符属性来找到此属性。此评论末尾的链接进一步详细说明了细节。另一种选择是分隔 SQL 中的日期部分并使用 DATE 函数强制日期部分映射,然后将其放入 FORMAT 中,但这会占用更多资源。 docs.microsoft.com/en-us/sql/analysis-services/…
    • 我继续更改连接的区域设置标识符并将其设置为 2057(英语,英国),它可以工作!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多