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数据库转换该日期。
在验证过程中添加具有完整查询和周期性错误的步骤
答案 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"