首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将唯一值从库斯托中的多个相关列中分离出来,并根据它们进行总结?

如何将唯一值从库斯托中的多个相关列中分离出来,并根据它们进行总结?
EN

Stack Overflow用户
提问于 2021-03-06 17:03:39
回答 1查看 470关注 0票数 0

我有张桌子上有这样的数据:-

代码语言:javascript
复制
-----------------------------------------------------------------------------
Audience | A_Types | B_Types | C_Types | D_Types | IsTall | IsRed | IsHeavy |
-----------------------------------------------------------------------------
 Noah    | 3,4,5   | 1,2,5   |  1,5,6  | 1,2,3   |   0    |   1   |    1    |
-----------------------------------------------------------------------------
 Rebecca | 3,4,4,6 | 1,2,3,4 | 2,3,4,5 | 2,3,4,5 |   1    |   0   |    0    |
-----------------------------------------------------------------------------
 Noah    | 3,4     | 1,2     |  1,5    | 1,2     |   0    |   1   |    1    |
-----------------------------------------------------------------------------

额外信息:

  1. 受众只能接受5个不同的值,不能是空的。

  1. A_Types,B_Types,C_Types,D_Types是一个逗号分隔的正整数字符串,它们可以是空的,但是对于任何给定的行,它们的长度总是相同的。也就是说,对于给定的行,它们都是空的,或者对于给定行具有相同长度的逗号分隔值。

下面的行不允许存在。

代码语言:javascript
复制
-----------------------------------------------------------------------------
Audience | A_Types | B_Types | C_Types | D_Types | IsTall | IsRed | IsHeavy |
-----------------------------------------------------------------------------
 Noah    | 3,4,5   | 1,2     |         | 1,2,3   |   0    |   1   |    1    |
-----------------------------------------------------------------------------
 Rebecca | 3,4    | 1,2,3,4  |         | 2,3     |   0    |   1   |    1    |
-----------------------------------------------------------------------------

对于任何给定的行,

  1. IsTall和IsRed都可以是空的,但是要么两者都是空的,要么两者都是空的。

我想得到在"Is*“列的值、受众和"*_Types”列的单独值上汇总的所有内容的数量。

我写了以下查询:-

代码语言:javascript
复制
TableName
| where Audience in ("Noah", "Rebecca", "Puyol", "Enkir", "Doman")
| extend A_Types = split(A_Types, ",")
| extend B_Types = split(B_Types, ",")
| extend C_Types = split(C_Types, ",")
| extend D_Types = split(D_Types, ",")
| mv-expand A_Type = A_Types to typeof(string)
| mv-expand B_Type = B_Types to typeof(string)
| mv-expand C_Type = C_Types to typeof(string)
| mv-expand D_Type = D_Types to typeof(string)
| summarize count() by
            A_Type,
            B_Type,
            C_Type,
            D_Type,
            IsRed,
            IsTall,
            IsHeavy,
            Audience

我看到一些与上面的查询结果不一致的地方,有人能建议一个更好的查询或者如果这个查询是正确的可以评论吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-07 06:55:22

您需要在一次操作中为相关列执行mv-展开,以便在同一行的每个数组中获得匹配的值。例如:

代码语言:javascript
复制
let Data = datatable(Audience:string,  A_Types:dynamic, B_Types:dynamic, C_Types:dynamic, D_Types:dynamic, IsTall:int, IsRed:int, IsHeavy:int)
["Noah", dynamic([3,4,5]),  dynamic([1,2,5]),    dynamic([1,5,6]),  dynamic([ 1,2,3]), 0 ,1 , 1,
 "Rebecca", dynamic([3,4,4,6]), dynamic([1,2,3,4]), dynamic([2,3,4,5]), dynamic([2,3,4,5]), 1 ,  0 ,0,
 "Noah", dynamic([3,4]),  dynamic([1,2]),    dynamic([1,5]),  dynamic([ 1,2]), 0 ,1 , 1];
Data
| mv-expand A_Types to typeof(int), B_Types to typeof(int), C_Types to typeof(int), D_Types to typeof(int)
| summarize sum(IsTall), sum(IsHeavy), sum(IsRed) by Audience, A_Types, B_Types, C_Types, D_Types

结果:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66508338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档