Я импортирую CSV-файл в PowerBI, который размещен в SharePoint. Файл содержит значения датчиков с метками времени, например:
zoneid | attributeid | dt_stamp | val
1 | attr1 | 20191201T13:59:00Z | 1
1 | attr1 | 20191201T14:29:00Z | 0
2 | attr1 | 20191201T15:36:00Z | 1
1 | attr1 | 20191201T16:13:00Z | 1
2 | attr1 | 20191201T17:59:00Z | 0
3 | attr1 | 20191201T18:50:00Z | 1
1 | attr1 | 20191201T18:51:00Z | 0
2 | attr1 | 20191201T18:52:00Z | 1
1 | attr1 | 20191201T18:53:00Z | 1
3 | attr1 | 20191201T18:53:00Z | 0
Это прекрасный формат для хранения данных, но для целей отчетности я хочу интерполировать временные ряды между сигналами для каждой зоны и атрибута. Хранение интерполированных данных создаст горы данных, так как у нас есть десятки зон и атрибутов для мониторинга. Интерполяция данных временных рядов в python с pandas проста, поэтому я собирался сделать это таким образом. однако, при попытке запустить любой сценарий python на этом источнике данных я получаю сообщение об ошибке:
Formula.Firewall: Query 'raw_occ' (step 'Run Python script') references other queries or steps, so it may not directly access a data source. Please rebuild this data combination.
за эту ссылку , я пытался поместить импорт файла в его собственный запрос, чтобы я мог ссылаться на встроенный запрос как шаг вместо внешнего источника данных. Raw_o cc - это дополнительный запрос, который ссылается на родительский запрос, импортирующий файл, например:
raw_occ
let
Source = raw_fusion,
#"Run Python script" = Python.Execute("# 'dataset' holds the input data for this script#(lf)import pandas as pd#(lf)dataset = dataset.drop_duplicates()",[dataset=Source])
in
#"Run Python script"
(запрос python намеренно оставлен простым для целей тестирования)
Запрос родительского импорта (raw_fusion) выглядит следующим образом (URL-адреса изменены для анонимности):
let
raw_fusion
Source = SharePoint.Files("https://<tenantroot>.sharepoint.com/sites/<sitename>", [ApiVersion = 15]),
#"Filtered Rows" = Table.SelectRows(Source, each Text.Contains([Folder Path], "fusion_receive_location")),
#"test_fusion_output csv_https://<tenantroot> sharepoint com/sites/<sitename>/Shared Documents/_datastore/fusion_receive_location/compass/" = #"Filtered Rows"{[Name="test_fusion_output.csv",#"Folder Path"="https://<tenantroot>.sharepoint.com/sites/<sitename>/Shared Documents/_datastore/fusion_receive_location/compass/"]}[Content],
#"Imported CSV" = Csv.Document(#"test_fusion_output csv_https://<tenantroot> sharepoint com/sites/<sitename>/Shared Documents/_datastore/fusion_receive_location/compass/",[Delimiter=";", Columns=5, Encoding=1252, QuoteStyle=QuoteStyle.None]),
#"Promoted Headers" = Table.PromoteHeaders(#"Imported CSV", [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"RoomID", type text}, {"AttributeID", type text}, {"DigitalValue", Int64.Type}, {"AnalogValue", Int64.Type}, {"RoundedTimeStamp", type datetime}}),
#"Duplicated Column" = Table.DuplicateColumn(#"Changed Type", "RoundedTimeStamp", "_fusion_timekey"),
#"Duplicated Column1" = Table.DuplicateColumn(#"Duplicated Column", "RoundedTimeStamp", "_fusion_datekey"),
#"Changed Type1" = Table.TransformColumnTypes(#"Duplicated Column1",{{"_fusion_timekey", type time}, {"_fusion_datekey", type date}}),
#"Trimmed Text" = Table.TransformColumns(#"Changed Type1",{{"RoomID", Text.Trim, type text}})
in
#"Trimmed Text"