Excel 自行删除了我的查询连接并给我一些错误消息
Excel removes my query connection on it's own and gives me several error messages
我知道这真的很长 post 但我不确定我的过程中的哪一部分导致我的文件崩溃,所以我试图详细说明我为到达错误信息。
所以,首先,我在 Kusto 上创建了一个查询,它看起来与此类似,但实际上是 160 行代码,这只是我的代码可能执行的操作的摘要版本,只是为了展示我的工作过程。
- 首先,我在 Session_Id_List 中所做的是创建一个包含过去一天所有不同 Session ID 的列表。
- 然后在 treatment_alarms1 我计算每个 session 期间激活的每种类型的警报数量。
- 然后,在 treatment_alarms2 我创建了一个列表,它看起来像这样
1x Alarm_Type_Number1
30x Alarm_Type_Number2
7x Alarm_Type_Number3
每次治疗都是这样,所以我有一份针对该治疗的所有警报的列表。
最后,我使用 Session_Id_List 和 treatment_alarms2 创建了一个左外连接。这意味着我将看到所有治疗 ID,甚至是那些没有任何活动警报的 ID。
let _StartTime = ago(1d);
let _EndTime = ago(0d);
let Session_Id_List = Database1
| where StartTime >= _StartTime and StartTime <= _EndTime
| summarize by SessionId, SerialNumber, StartTime
| distinct SessionId, StartTime, SerialNumber;
let treatment_alarms1 = Database1
| where StartTime >= _StartTime and StartTime <= _EndTime and TranslatedData_Status == "ALARM_ACTIVE"
| summarize number_alarms = count() by TranslatedData_Value, SessionId
| project final_Value = strcat(number_alarms, "x ", TranslatedData_Value), SessionId;
let treatment_alarms2 = Database1
| where StartTime >= _StartTime and StartTime <= _EndTime and TranslatedData_Status == "ALARM_ACTIVE"
| join kind=inner treatment_alarms1 on SessionId
| summarize list_of_alarms_all = make_set(final_Value) by SessionId
| project SessionId, list_of_alarms_all;
let final_join = Session_Id_List
| join kind=leftouter treatment_alarms2 on SessionId;
final_join
| project SessionId, list_of_alarms_all
然后我将这个查询放入Excel,使用下面的方法
- 我在 Kusto Explorer 上转到“工具”->“查询 Power BI”
- 我转到数据 -> 获取数据 -> 从其他来源 -> 空白查询
- 我去高级编辑
- 我复制并粘贴我的查询,然后按底部的“完成”
- 如果您现在看到,我的数据预览将在 list_of_alarms_all 列中显示“列表”,而不是显示列表的实际值。
- 要解决此问题,我首先按 header 列
上的箭头
- 我按下“提取值”
- I select 自定义 -> 使用特殊字符连接 -> 换行 -> 按确定
- 这对所有确实有警报的 ID 都有效,它将它们显示为列表并告诉我有多少,问题是 ID 没有任何处理我得到“ Excel 预览中的错误”。一旦我按下“关闭并加载”,数据就被放在工作表上并且看起来很好,“错误”都消失了,取而代之的是我得到了“错误”所在的空单元格。
当我关闭文件并尝试再次打开它时,问题现在开始了。
首先我收到这条消息。所以我按是尝试输入文件。
然后我收到另一条消息。此消息的问题在于它说我打开了文件,但事实并非如此。我什至尝试重新启动我的笔记本电脑并再次打开该文件,但实际上我没有打开该文件时我仍然会收到消息。
然后我收到此消息,告诉我与查询的连接已删除。
所以我的问题是 1) 我无法再编辑该文件,除非我制作一个副本,因为我不断收到消息说我已经打开了该文件并且它已被锁定以供编辑,并且 2) 我想用 VBA 刷新此查询,也许从现在开始每周一次,但我不能,因为当我保存文件时,与查询的连接被 excel 本身删除。
我不确定为什么会这样,我猜这是因为当我尝试从列表中提取值时我在空单元格上遇到了“错误”。如果有人知道我如何解决这个问题,这样我就不会收到这些错误消息,请告诉我。
我无法重现您的问题,但是有些事情您可能想尝试一下。
- 在 ADX 中,您可以用一个函数包装您的查询,这样您就不必将一大段代码复制到您的 Excel。
- 您可以处理查询中已有的空值(这是为您提供
Error
值的原因)。注意 coalesce
. 的使用
// I used datatable to mimic your query results
.create-or-alter function SessionAlarms()
{
datatable (SessionId:int,list_of_alarms_all:dynamic)
[
1, dynamic([10,20,30])
,2, dynamic([])
,3, dynamic(null)
]
| extend list_of_alarms_all = coalesce(list_of_alarms_all, dynamic([]))
}
- 您可以使用 Power Query ADX 连接器并复制您的query/function原样
- 如果您没有在 KQL 中处理空值,您可以使用
Replace Errors
处理 Excel 中的错误
我知道这真的很长 post 但我不确定我的过程中的哪一部分导致我的文件崩溃,所以我试图详细说明我为到达错误信息。
所以,首先,我在 Kusto 上创建了一个查询,它看起来与此类似,但实际上是 160 行代码,这只是我的代码可能执行的操作的摘要版本,只是为了展示我的工作过程。
- 首先,我在 Session_Id_List 中所做的是创建一个包含过去一天所有不同 Session ID 的列表。
- 然后在 treatment_alarms1 我计算每个 session 期间激活的每种类型的警报数量。
- 然后,在 treatment_alarms2 我创建了一个列表,它看起来像这样
1x Alarm_Type_Number1
30x Alarm_Type_Number2
7x Alarm_Type_Number3
每次治疗都是这样,所以我有一份针对该治疗的所有警报的列表。
最后,我使用 Session_Id_List 和 treatment_alarms2 创建了一个左外连接。这意味着我将看到所有治疗 ID,甚至是那些没有任何活动警报的 ID。
let _StartTime = ago(1d);
let _EndTime = ago(0d);
let Session_Id_List = Database1
| where StartTime >= _StartTime and StartTime <= _EndTime
| summarize by SessionId, SerialNumber, StartTime
| distinct SessionId, StartTime, SerialNumber;
let treatment_alarms1 = Database1
| where StartTime >= _StartTime and StartTime <= _EndTime and TranslatedData_Status == "ALARM_ACTIVE"
| summarize number_alarms = count() by TranslatedData_Value, SessionId
| project final_Value = strcat(number_alarms, "x ", TranslatedData_Value), SessionId;
let treatment_alarms2 = Database1
| where StartTime >= _StartTime and StartTime <= _EndTime and TranslatedData_Status == "ALARM_ACTIVE"
| join kind=inner treatment_alarms1 on SessionId
| summarize list_of_alarms_all = make_set(final_Value) by SessionId
| project SessionId, list_of_alarms_all;
let final_join = Session_Id_List
| join kind=leftouter treatment_alarms2 on SessionId;
final_join
| project SessionId, list_of_alarms_all
然后我将这个查询放入Excel,使用下面的方法
- 我在 Kusto Explorer 上转到“工具”->“查询 Power BI”
- 我转到数据 -> 获取数据 -> 从其他来源 -> 空白查询
- 我去高级编辑
- 我复制并粘贴我的查询,然后按底部的“完成”
- 如果您现在看到,我的数据预览将在 list_of_alarms_all 列中显示“列表”,而不是显示列表的实际值。
- 要解决此问题,我首先按 header 列 上的箭头
- 我按下“提取值”
- I select 自定义 -> 使用特殊字符连接 -> 换行 -> 按确定
- 这对所有确实有警报的 ID 都有效,它将它们显示为列表并告诉我有多少,问题是 ID 没有任何处理我得到“ Excel 预览中的错误”。一旦我按下“关闭并加载”,数据就被放在工作表上并且看起来很好,“错误”都消失了,取而代之的是我得到了“错误”所在的空单元格。
当我关闭文件并尝试再次打开它时,问题现在开始了。
首先我收到这条消息。所以我按是尝试输入文件。
然后我收到另一条消息。此消息的问题在于它说我打开了文件,但事实并非如此。我什至尝试重新启动我的笔记本电脑并再次打开该文件,但实际上我没有打开该文件时我仍然会收到消息。
然后我收到此消息,告诉我与查询的连接已删除。
所以我的问题是 1) 我无法再编辑该文件,除非我制作一个副本,因为我不断收到消息说我已经打开了该文件并且它已被锁定以供编辑,并且 2) 我想用 VBA 刷新此查询,也许从现在开始每周一次,但我不能,因为当我保存文件时,与查询的连接被 excel 本身删除。
我不确定为什么会这样,我猜这是因为当我尝试从列表中提取值时我在空单元格上遇到了“错误”。如果有人知道我如何解决这个问题,这样我就不会收到这些错误消息,请告诉我。
我无法重现您的问题,但是有些事情您可能想尝试一下。
- 在 ADX 中,您可以用一个函数包装您的查询,这样您就不必将一大段代码复制到您的 Excel。
- 您可以处理查询中已有的空值(这是为您提供
Error
值的原因)。注意coalesce
. 的使用
// I used datatable to mimic your query results
.create-or-alter function SessionAlarms()
{
datatable (SessionId:int,list_of_alarms_all:dynamic)
[
1, dynamic([10,20,30])
,2, dynamic([])
,3, dynamic(null)
]
| extend list_of_alarms_all = coalesce(list_of_alarms_all, dynamic([]))
}
- 您可以使用 Power Query ADX 连接器并复制您的query/function原样
- 如果您没有在 KQL 中处理空值,您可以使用
Replace Errors
处理 Excel 中的错误