sql - 如何降低复杂性?数据准备,SQL + Tableau
问题描述
我需要准备一些数据来连接到 tableau,而我正在苦苦挣扎,因为数据的大小对于 tableau 来说太大而无法处理,所以我正在寻找在 SQL 中有效地编写代码的想法。
设置:
- 我有200万用户
- 有 30 个不同的类别,每个用户都可以分为很多。例如:
- 用户 1 - A、B 和 C 类
- 用户 2 - F 类
- 用户 3 - A、B 类
我想要的是:
- 选择三个类别并分配优先级 1、优先级 2 和优先级 3
- 这些选择不是静态的,所以今天我可能会选择 A、B、C,但明天这些类别可以是 D、G、A
所以如果我有:
- 优先级 1:A
- 优先级 2:B
- 优先级 3:C
- 我想要属于 A 类的用户数量
- 我想要属于 B 类且不属于 A 类的用户数量
- 我想要属于 C 类且不在 A 类或 B 类中的用户数量
我最初的想法是创建一个表,每个用户一行,每个类别一个是/否列,然后聚合,但最终表的大小仍然太大,无法处理。
有任何想法吗?
更新:我的想法是准备一个包含汇总数字和最多几千行的表格,以便可以使用 tableau 进行处理
解决方案
您可以为 30 个类别中的每一个分配一个唯一的占位符 1 到 30。此后,每个用户将根据他所属的类别分配一个 30 位的二进制数。然后可以将这个二进制数转换为其中最大的十进制数为 2^31-1 即 10 位数字,可以不使用 exp 格式存储。
每当您必须查看用户所属的类别时,可以通过应用反向转换来完成,即十进制转换为二进制,然后转换为左侧填充零的字符串。从此字符串中,您可以在所需位置搜索 1 的位置。
我认为您可以尝试这种方法。
推荐阅读
- javascript - 如何在另一个文件的函数中使用这个值
- flutter - 是否可以创建一个泛型类型,它是 Flutter 中某个类型的后代?
- hazelcast - 使用索引时 hazelcast 迁移缓慢
- java - Spring web mvc + Thymeleaf ModelAttribute 编辑对象中的列表
- java - 如何在已弃用的 Gradle 方法上找到替代方法?
- javascript - nodejs 默认情况下会阻止目录/路径遍历吗?
- laravel - 如何在laravel中重定向到客户登录页面
- .net - Docker Environment 多容器结构中 PostgreSQL 和 .Net Core 的 docker-compose 文件应该如何配置?
- python - 如何在 Python 中使用映射泛型
- c# - 不知道如何遍历 DbContext 中的类型,一般调用 ToListAsync