如何实现一份报表,不同人看不同的数据

简介: 背景: 随着公司的发展,我们的业务由最初的北上广深4个城市扩展到了16个城市。为了达成公司整体的战略目标,每个城市经理都背负着自己城市必须达成的目标。 因此数据对每个城市经理至关重要。城市经理需要通过数据去掌握城市业务的整体情况,及时发现异常,对数据下钻来定位问题,高效的进行管理。

1.背景:
随着公司的发展,我们的业务由最初的北上广深4个城市扩展到了16个城市。为了达成公司整体的战略目标,每个城市经理都背负着自己城市必须达成的目标。

因此数据对每个城市经理至关重要。城市经理需要通过数据去掌握城市业务的整体情况,及时发现异常,对数据下钻来定位问题,高效的进行管理。

而作为数据团队,我们的任务是要让每个城市经理看到自己城市的各项数据。要实现这个目标,除了梳理业务需求并实现报表,对报表做数据权限的管控也至关重要。
必须进行数据权限管控的首要原因,当然就是数据安全。其次不相关的数据对报表使用者是打扰。想象一下北京的城市经理必须要从16个城市的数据中寻找自己城市各项数据的场景,就知道权限控制多么必要了。

2.业务场景:
实现各个城市的各个行政区交易笔数的每日走势,并通过行级权限的控制,让各个城市经理只看到自己城市行政区的数据走势。

我们的基础数据来自日常日志服务和RDS数据库。这些数据定期传输到MaxCompute并在上面进行ETL和任务调度。计算结果回传到RDS库,使用Quick BI连接RDS结果库进行前端展示。
架构图如下:

image

下面详细介绍一下在Quick BI上的操作。

首先在数据库中建立一个数据表,包括了日期,城市,行政区,以及行政区的交易笔数。在Quick BI中打开这个表:

image

然后在分析面板上,把城市和行政区拖由行,拖拽到列:

image

用当前的数据建立仪表盘,选择折线图,可以看到所有城市,所有行政区的交易笔数走势:

image

在数据源处,用行级权限功能给测试账号添加上海地区的权限,并把报表分享给测试账号。
用测试账号登陆后,仅看到上海地区所有行政区的交易走势:

image

目录
相关文章
|
关系型数据库 Go PostgreSQL
golang pgx自定义PostgreSQL类型
golang的pgx驱动提供了大约70种PostgreSQL类型支持,但还是有一些类型没有涵盖,本文介绍如何自己编写代码支持特殊的类型。
|
缓存 算法 安全
终极算法入门:Go语言实现经典链表操作
终极算法入门:Go语言实现经典链表操作
486 0
|
7月前
|
Go C++
Go语言方法与接收者 -《Go语言实战指南》
本文介绍了 Go 语言中方法的相关概念和用法。方法是绑定到特定类型上的函数,包含值接收者和指针接收者两种形式。值接收者不会改变原始数据,而指针接收者可修改原始数据,且在处理大型结构体时性能更优。文章详细对比了方法与普通函数的区别,并说明了选择指针接收者的原因,如修改原始值、提升性能及保持一致性。此外,Go 支持为任意自定义类型定义方法,不仅限于结构体。最后通过表格总结了方法的核心概念和使用场景。
205 34
|
缓存 Java Serverless
Golang中的闭包详解
Golang中的闭包详解
|
12月前
|
Linux
【Linux】System V信号量详解以及semget()、semctl()和semop()函数讲解
System V信号量的概念及其在Linux中的使用,包括 `semget()`、`semctl()`和 `semop()`函数的具体使用方法。通过实际代码示例,演示了如何创建、初始化和使用信号量进行进程间同步。掌握这些知识,可以有效解决多进程编程中的同步问题,提高程序的可靠性和稳定性。
618 19
|
SQL 安全 Java
golang为什么不支持可重入锁?
本文对比分析了Java与Go语言中锁机制的不同。在Java中,无论是`synchronized`关键字还是`ReentrantLock`都支持可重入特性,通过维护一个计数器来跟踪锁的嵌套级别,确保同一线程可以多次获取同一把锁而不会造成死锁。然而,Go语言的`sync.Mutex`并不支持这一特性,其设计理念认为可重入锁往往指向代码设计问题,鼓励开发者重构代码以避免此类需求。文章进一步解释了这种设计理念背后的原因,并提供了替代方案示例。总体而言,Go语言试图从设计层面避免潜在的代码问题,尽管这可能会增加一定的开发复杂性。
340 3
golang为什么不支持可重入锁?
|
XML API 网络架构
API协议 的十种技术特点及适用场景
本文介绍了十种常见的API协议技术,包括REST、GraphQL、gRPC、SOAP、WebSocket、AMF和XML-RPC等,每种技术都有其特点和适用场景,如REST适用于轻量级Web服务开发,gRPC适合高性能分布式系统,而WebSocket则适用于需要低延迟交互的应用。
|
分布式数据库 流计算 Docker
实时计算 Flink版操作报错合集之在Docker上启动JobManager(JM)时遇到报错,,该怎么处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
NoSQL Redis 数据安全/隐私保护
使用redis-cli登录远程redis服务并批量导入数据
使用redis-cli登录到远程部署的redis服务
727 0
|
调度 Unix 数据库
进程,轻量级进程,内核线程,用户线程的区别关系
  在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合资源集。进程中的线程是动态的对象;代表了进程指令的执行。
2636 0

热门文章

最新文章