DataSource.Error:Microsoft SQL:转换为dados的nvarchar em转换为dados datetime的结果,以val进行间隔

时间:2019-09-05 14:59:40

标签: powerbi

enter image description here(数据处理问题解决了nvarchar / nvarchar类型的数据转换问题。)

DataSource.Error:Microsoft SQL:发生日期转换结果的时间间隔的转换。 细节:     DataSourceKind = SQL     DataSourcePath = rabbotdb-production.cld5znexge33.sa-east-1.rds.amazonaws.com; rabbotDB     消息=对话时间,日期时间结果和间隔时间。     数= 242     Class = 16

我尝试使用此代码“ SET DATEFORMAT ymd;”我在上一个查询中遇到的问题,另一个人也遇到了同样的问题,尽管它没有用。 因为即使有可能工作,我也不知道该在代码中插入哪里。

由于存在问题而无法在当地找到自己的食物,所以没有当地的食物,或者由于存在问题而无法得到解决。

设置DATEFORMAT ymd;

let
    Fonte = Sql.Database("serverx", "xx"),
    dbo_vw_PS = Fonte{[Schema="dbo",Item="dbo_vw_PS"]}[Data],
    #"Linhas Filtradas" = Table.SelectRows(ddbo_vw_PS, each [DataMovimentacao] > #datetime(2019, 6, 1, 0, 0, 0)),
    #"Linhas Classificadas" = Table.Sort(#"Linhas Filtradas",{{"DataMovimentacao", Order.Ascending}}),
    #"Tipo Alterado" = Table.TransformColumnTypes(#"Linhas Classificadas",{{"Valor Total do Serviço (REV.)", Currency.Type}, {"Valor Total das Peças (REV.)", Currency.Type}}),
    #"Coluna Duplicada" = Table.DuplicateColumn(#"Tipo Alterado", "DataMovimentacao", "DataMovimentacao - Copiar"),
    #"Tipo Alterado1" = Table.TransformColumnTypes(#"Coluna Duplicada",{{"DataMovimentacao - Copiar", type date}}),
    #"Consultas Mescladas" = Table.NestedJoin(#"Tipo Alterado1", {"IdCarro"}, Carro, {"Id"}, "Carro", JoinKind.LeftOuter),
    #"Carro Expandido" = Table.ExpandTableColumn(#"Consultas Mescladas", "Carro", {"Marca"}, {"Carro.Marca"}),
    #"Erros Removidos" = Table.RemoveRowsWithErrors(#"Carro Expandido", {"Valor Total do Serviço (REV.)"}),
    #"Linhas Filtradas1" = Table.SelectRows(#"Erros Removidos", each [#"Valor Total do Serviço (REV.)"] < 2000),
    #"Coluna Duplicada1" = Table.DuplicateColumn(#"Linhas Filtradas1", "Modelo", "Modelo - Copiar"),
    #"Dividir Coluna por Delimitador" = Table.SplitColumn(#"Coluna Duplicada1", "Modelo - Copiar", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Modelo - Copiar.1", "Modelo - Copiar.2"}),
    #"Tipo Alterado2" = Table.TransformColumnTypes(#"Dividir Coluna por Delimitador",{{"Modelo - Copiar.1", type text}, {"Modelo - Copiar.2", type text}}),
    #"Colunas Renomeadas" = Table.RenameColumns(#"Tipo Alterado2",{{"Modelo - Copiar.1", "Marca"}}),
    #"Texto em Maiúscula" = Table.TransformColumns(#"Colunas Renomeadas",{{"Marca", Text.Upper, type text}})
in
    #"Texto em Maiúscula"

Power Bi无法从SQL Server将类型nvarchar转换为日期时间类型/格式。 DataSource.Error:Microsoft SQL:转换为dados的nvarchar em转换为dados datetime的结果为val进行间隔。 详细信息:

根据建议的解决方案进行编辑

好的,我已经尝试过此步骤,但是没有成功enter image description here

此外,我正在搜索,可能我们必须将数据类型设置为巴西格式,例如:Cast= (Date.ToText([date], "dd/mm/yyyy"))。像这样,我认为错误恰恰是power bi试图从SQL中获取美国日期“ mm / dd”格式,并且无法将其转换为巴西格式,因为它甚至无法从SQL加载查询。

但是我已经检查了SQL,一切都很好,但是SQL方面没有任何问题,因此power bi无法从SQL数据库转换该日期。

在验证过程中添加具有完整查询和周期性错误的步骤

1 个答案:

答案 0 :(得分:1)

看起来错误是d / t直接将VARCHAR字段与datetime值进行比较。

尝试在dbo_vw_PS#"Linhas Filtradas"之间添加一个新步骤,该步骤首先将字段[DataMovimentacao]强制转换为日期类型:

let
    Fonte = Sql.Database("serverx", "xx"),
    dbo_vw_PS = Fonte{[Schema="dbo",Item="dbo_vw_PS"]}[Data],
    CastToDate =
        Table.TransformColumnTypes(
            dbo_vw_PS,
            {{"DataMovimentacao", type date}}),
    #"Linhas Filtradas" =
        Table.SelectRows(
            CastToDate,
            each [DataMovimentacao] > #datetime(2019, 6, 1, 0, 0, 0)),
    ...

您正在引入一个新步骤,变量CastToDate,并且您正在更改#"Linhas Filtradas"以引用该变量。查询的其余部分将保持不变。

修改

好吧,首先,您在共享的屏幕快照中看到的错误意味着您有一个无效的M查询。请发布更新后的完整查询。

第二,原始错误表明您的SQL类型实际上是VARCHAR,而不是任何日期类型,因此我们不能使用任何Date.To...函数。我们不处理日期。我们正在处理文本。我们正在尝试使文本成为日期。

我们可以使用DateTime.FromText(<date string>, <culture string>)从文本字段中获取日期时间值。一个具体的例子是DateTime.FromText("22/10/2018 16:15:21", "pt-BR") // => #datetime(2018,10,22,16,15,21)

我最初的希望是,只要将其转换为日期时间就可以检测格式,但是在PQ中情况并非如此。

因此,我们可以如下更新新步骤。代替类型转换,我们将显式转换字符串。为避免M语法问题,我将更新后的查询的全文放在下面。

具体的转换步骤:

    CastToDate =
        Table.TransformColumns(    // Note we're using Table.TransformColumns instead of Table.TransformColumnTypes
            dbo_vw_PS,
            {{"DataMovimentacao", each DateTime.FromText(_, "pt-BR"), DateTime.Type}}),

完整查询。

let
    Fonte = Sql.Database("serverx", "xx"),
    dbo_vw_PS = Fonte{[Schema="dbo",Item="dbo_vw_PS"]}[Data],
    CastToDate =
        Table.TransformColumns(    // Note we're using Table.TransformColumns instead of Table.TransformColumnTypes
            dbo_vw_PS,
            {{"DataMovimentacao", each DateTime.FromText(_, "pt-BR"), DateTime.Type}}),
    #"Linhas Filtradas" =
        Table.SelectRows(
            CastToDate,
            each [DataMovimentacao] > #datetime(2019, 6, 1, 0, 0, 0)),
    #"Linhas Classificadas" = Table.Sort(#"Linhas Filtradas",{{"DataMovimentacao", Order.Ascending}}),
    #"Tipo Alterado" = Table.TransformColumnTypes(#"Linhas Classificadas",{{"Valor Total do Serviço (REV.)", Currency.Type}, {"Valor Total das Peças (REV.)", Currency.Type}}),
    #"Coluna Duplicada" = Table.DuplicateColumn(#"Tipo Alterado", "DataMovimentacao", "DataMovimentacao - Copiar"),
    #"Tipo Alterado1" = Table.TransformColumnTypes(#"Coluna Duplicada",{{"DataMovimentacao - Copiar", type date}}),
    #"Consultas Mescladas" = Table.NestedJoin(#"Tipo Alterado1", {"IdCarro"}, Carro, {"Id"}, "Carro", JoinKind.LeftOuter),
    #"Carro Expandido" = Table.ExpandTableColumn(#"Consultas Mescladas", "Carro", {"Marca"}, {"Carro.Marca"}),
    #"Erros Removidos" = Table.RemoveRowsWithErrors(#"Carro Expandido", {"Valor Total do Serviço (REV.)"}),
    #"Linhas Filtradas1" = Table.SelectRows(#"Erros Removidos", each [#"Valor Total do Serviço (REV.)"] < 2000),
    #"Coluna Duplicada1" = Table.DuplicateColumn(#"Linhas Filtradas1", "Modelo", "Modelo - Copiar"),
    #"Dividir Coluna por Delimitador" = Table.SplitColumn(#"Coluna Duplicada1", "Modelo - Copiar", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Modelo - Copiar.1", "Modelo - Copiar.2"}),
    #"Tipo Alterado2" = Table.TransformColumnTypes(#"Dividir Coluna por Delimitador",{{"Modelo - Copiar.1", type text}, {"Modelo - Copiar.2", type text}}),
    #"Colunas Renomeadas" = Table.RenameColumns(#"Tipo Alterado2",{{"Modelo - Copiar.1", "Marca"}}),
    #"Texto em Maiúscula" = Table.TransformColumns(#"Colunas Renomeadas",{{"Marca", Text.Upper, type text}})
in
    #"Texto em Maiúscula"