当 COUNT 不可用时获得不重复计数

问题

如何在 COUNTD 不可用时获取字段的不重复计数。

环境

Tableau Desktop

答案

步骤 1: 创建 WINDOW_SUM 计算

  1. 在 Tableau Desktop 中,连接到 Superstore 示例数据。
  2. 选择“分析”>“创建计算字段”
  3. 在打开的“计算字段”对话框中,输入字段的名称。“COUNT 替代项”示例工作簿使用“Distinct Customers”(不同的客户)
  4. 在公式字段中,键入以下公式,然后单击“确定”
    WINDOW_SUM(MIN(1))
  5. “Distinct Customers”(不同的客户)从“度量”拖到“列”
  6. 将需要其非重复计数的维度从“维度”拖到“详细信息”。示例工作簿使用“Customer Name”(客户名称)
  7. 右键单击“列”上的“Distinct Customers”(不同的客户),然后选择“计算依据”>“Customer Name”(客户名称)

步骤 2: 筛选索引

  1. 选择“分析”>“创建计算字段”以创建其他计算字段。
  2. 在“计算字段”对话框中,键入该字段的名称。示例工作簿使用“Table Calc Filter”(表计算筛选器)
  3. 在公式字段中,键入以下公式,然后单击“确定”
    INDEX()=1
  4. “Table Calc Filter”(表计算筛选器)从“度量”拖到“筛选器”,然后单击“确定”(不要勾选任何可用选项)。
  5. “Product Category”(产品类别)从“维度”拖到“行”
  6. 右键单击“筛选器”上的表计算筛选器,选择“计算依据”>“Customer Name”(客户名称),选择“True”,然后单击“确定”

其他信息

视图中的任何其他度量也需要使用表计算,如 WINDOW_SUM。

日期函数

dateadd

datedadd (date_part, interval, date) 表示在日期 date 的基础上, 以date_part 为单位, 与之间隔 interval的日期
dateadd ("month", -3, #2020/3/8#) 则返回 2019/12/8 0:00:00;
dateadd("day", -7, #2020/3/8#) 则返回 2020/3/1 0:00:00 查看过去一周, 半年, 3个月等的日期会用到.

datediff

datediff (date_part, start_date, end_date, [start_of_week]) 计算两日期的差, 以 date_part 为单位.
datediff("week", #2020/3/8#, #2020/3/9#) 返回 0 , 3/8 与 3/9 相差 0 周
datediff("week", #2020/3/8#, #2020/3/9#, "monday") 返回 1 因为 3/8 是周日, 一周开始若为周一, 则相差一周啦.

isdate

isdate (string) 判断一个字符串是否为有效日期. 是则返回 "真", 否则 "伪"
isdate("2020/3/8") ; isdate("2020-03-8") 返回 "真"

makeday

makeday (year, month, day) 构造一个包含 年, 月, 日 的日期值, 常用于数据提取, 日期比较等
makeday (2020, 3, 8) 则返回 2020/3/8

maketime

maketime (hour, minute, second) 构造一个包含 时, 分, 秒 的日期值
maketime (8, 30, 0) 则返回 1899/12/30 8:30:00

max, min

max (date1, date2) 也可用于比较两个时间, 返回 较近/ 较远 的一个距今
max (#2020/1/1#, #2020-3-8#) 返回 2020/3/8; min 则是相反的用法

now

now () 返回当前的日期和时. 配合 date, year, month 就很灵活了.
now () 返回 2020/3/8 23: 22:26
year(now()), month (now ()), date(now()) 分别返回 2020, 3, 2020/3/8

today

返回今天的日期. today () 则返回 2020/3/8 . 经常用作与一个 动态的参数值. 比如日报中算环比, 同比都会用到

类型转换

date

将给定的 字符串, 数字, 日期 表达式转为日期类型. 常用于强行转换, 比如对 数据库中的各种时间强行转换

date("2020/3/8") 和 date("2020-3-8 2:22:22") 和 date(2020, 3, 8) 都返回 2020/3/8 这样就能准确比较了

datetime

跟 date () 一样的, 只不过更加精确到 时, 分秒. 也是会用在时间的比较上的

datetime ("2020-3-8 22:22:22") 返回 2020/3/8 22:22:22; 而 datetime ("2020/3/8") 返回 2020/3/8 0:00:00

float, int

将表达式转为 浮点数或整数. 注意的是 int 不是四舍五入, 而是直接取整.

时间其实也是一个 数字类型. int (#2020-3-8#) 返回 43896; int("666") 返回 666; int("aaa") 则啥都没有.

str

将表达式转为字符串类型. 可用于, 字符串的拼接. 如 字段拼接, 构造唯一值等场景. 大类, 小类 排序会用到

逻辑函数

if

if 条件 then 表达式 end
if 条件 then 表达式1 else 表达式2 end

# 多层嵌套

if [当期值] > 10000
then if [同期值] > 10000
then "1好"
else "2好"
end
elseif [当期值] <= 10000 and [当期值] > 5000
then "较好"
else "不好"
end
 if 产品名称 = ‘衣服’ or  产品名称 = ‘裤子’ then '服装' elseif  产品名称 = ‘饼干’ or  产品名称 = ‘巧克力’ then  '食品' else '其他' end
#语句的意思是 如果产品名称为'衣服'或者'裤子',那么输出'服装',如果产品名称为''饼干,'巧克力',那么输出'食品',如果是别的,就输出'其他'`
IF [Failure Rate Type] = 'INW'  AND [保修状态] = '保内' THEN [维修量]
ELSEIF [Type] = 'OOW' AND [保修状态] = '保外' THEN [维修量]
ELSEIF [Type] = 'TOTAL' THEN [维修量]
ELSE 0
END
IF [Failure Rate Type] = 'INW'  AND [保修状态] = '保内' THEN [产品保有量]
ELSEIF [Type] = 'OOW' AND ([保修状态] = '保内' OR [保修状态] = '保外') THEN [产品保有量]
ELSEIF [Type] = 'TOTAL' THEN [产品保有量]
ELSE 0
END

case

跟 if 的作用基本一样, 但使用更加方便, 尤其在返回结果比较多的情况下

case 表达式
when 值1 then return1
when 值2 then return2
when 值3 then return3
...
else reurnx
end

比如, 对 "省市" 字段进行 区域的划分 (创建计算字段 "大区")

case [省市]
when "吉林" or "辽宁" or "黑龙江" then "东北"
when "安徽" or "江苏" or "浙江" or "福建" then "华东"
when "江西" or "河南" or "湖北" then "华中"
else "未划分"
end

ifnull

ifnull (expr1, expr2) 如果结果不是 null, 则返回 expr1 否则 返回 expr2 判断时可对 if xxx else ... 优化
ifnull ([当期值], [同期值]) 等价于, 将当期值的 缺失值 用 同期值填充了.

isnull

isnull (expr) 返回布尔值. 如果表达式为 null 则返回 "真" 否则返回 "伪"
注意的是, isnull (null) 返回 "真"; isull(" ") 返回 "伪". 空字符串不是空哦, 注意跟有点编程语言的区分

聚合函数

Tableau 的拖拽字段到行列, 其实就是执行了大致 SQL: 聚合函数(度量字段) group by [维度]. 默认是 sum. 这就解释了在计算字段的时候, 有的时候需要手动加 sum, 有时候又不需要. 这就需要想想它 原本的 sql 大致是怎样的逻辑即可

count

对离散或度量字段, 进行计数, 会忽略 null 值, 不去重

countd

对离散或度量字段, 进行计数, 会忽略 null 值, 会去重

统计门店数据量, 大区啥的都经常会用到. 注意, 表连接(混合数据源) 不能用 countd. 可通过 sql来 Union 解决

sum

只能对度量字段 求和, 会忽略 Null 值. Tableau 默认对度量字段聚合,要看每一条则在 数据 -> 取消聚合 即查看

avg

只能用于度量字段 求均值, 会忽略 Null 值

max, min

度量字段的最值; 传字符串则返回原值; 也可用做两个时间比较(如上提到)

attr

attr ([expr]) 如果 expr 的每一行都有值, 则返回该值. 否则返回 * , 会忽略 Null 值

median

只能用于度量字段, 求中位数, 会忽略 Null 值

表计算函数

total

返回给定表达式的总计, 常用于计算 各自分区中 的全部行的 聚合值等

total (sum([销售量])) 表示计算 各自分区中的全部行的 sum([销售量])

index

返回分区中当前行的索引, 不包含于是值相关的任何排序. 常用于对某个字段和 [手机品牌] 按特定的顺序排列

....

这部分很多, 但目前很多, 没用到, 或者是不会用.

详细级别函数

也称为 " LOD" 表达式 或 "LOD" 计算.

是除视图级别外, 的其他维度上支持聚合, 能实现将 一或多个 维度 附加到 任何的聚合表达式.

与表计算, 参考线等不同在于, LOD 是在数据源中计算的. 针对大型数据源, 会大幅度提高性能 但同时也会导致 Tableau 运行更加复杂的查询 (如多表连接), 在基础数据源缓慢的情况下, 影响性能.

固定 (fixed) : 灵活选择 高于 或 低于 视图层, 各个维度进行 group by 再 aggregation

包含 ( include): 用于创建 高于 视图层的, 来分组聚合.

排除 ( eclude): 用于创建 低于 视图层的, 来进行分组聚合.

表达也似乎不大准确, 举个栗子就好了.

fixed

{fixed [维度1], [维度2]... : 聚合函数 (度量字段)} 表示 对维度 dim1, dim2 ... 的维度进行聚合操作.

fixed 计算 在维度筛选器 之前应用, 但会受到 上下文筛选器, 数据源筛选器, 和数据提取筛选器的影响. 如果想要将筛选器应用于 fixed 表达式级别 而又不想用 上下文筛选器. 则可将其改为 include 或 exclude 表达式

通常用 fixed 这样的 LOD 表达式, 可以生成度量或维度.

{fixed [商品ID] : sum ([销量])} 是计算, 每件商品, 销量的总和

{fixed [商品ID], [年份] : sum ([销量]) 是计算每件商品, 每年 的销量总和

{fiexd [商品ID] : min ([订单日期]) 是计算, 每件商品的, 最早订单日期

来个栗子, 以超市数据为例, 计算 每个地区中, 每个省份的销售量, 先建一个计算字段.

然后再将 "地区" 和 "省" 放到列, 再将 地区映射到 颜色做区分.

与之相关的还有 include 和 exclude 的 LOD 表达式,

{fixed A:countd(B)},在维度A下对指标B进行去重,即可去除重复值计数。

Tableau返回当月的最后一天的方法

我们想显示某个月的第一天经常会很简单,因为第一天都是1号。但是每个月的最后一天却是变化的,当我们想返回某个月的最后一天要怎么办呢?
其实在Tableau中,有一个构造日期的函数‘MAKEDATE’,参数也很简单:MAKEDATE(年,月,日),可以利用year/month等函数将日期的年月日拆出来,如果是字符串如‘2020-11’的格式,可以用split来拆分年月,对于日期值填写1-31返回对应日期值,那么填写0即为上个月的最后一天,-1为上个月的倒数第二天,以此类推,那么返回当月最后一天就需要月份+1。因此例如给出‘2020-11’,返回2020年11月的最后一天的计算方法即为:

MAKEDATE(split(‘2020-11’,’-’,1),split(‘2020-11’,’-’,2)+1,0)

注:报错情况下,记得转化格式
MAKEDATE(int(split(‘2020-11’,’-’,1)),int(split(‘2020-11’,’-’,2))+1,0)

addweek oracle_Tableau技巧——日期函数

一:项目级别设置

菜单“数据”——“数据源”——“日期属性”,可以在项目级别对数据源中所有的日期字段统一设置如下三个属性:

1.国内通常将周一作为周开始,因此“周开始”可以设置为“周一”。

2.一次性统一设置日期格式,免得后面需要对每个工作表的每个日期字段单独设置,避免麻烦。

二:常用的日期函数

本周第一天:DATE(DATETRUNC("week",[订单日期]))

本周最后一天:DATE(DATEADD('day',-1,DATEADD('week',1,DATETRUNC('week',[订单日期]))))

本月第一天:DATE(DATETRUNC("month",[订单日期]))

本月最后一天:DATE(DATEADD("day",-1,DATEADD("month",1,DATETRUNC("month",[订单日期]))))

本季度第一天:DATE(DATETRUNC("quarter",[订单日期]))

本季度最后一天:DATE(DATEADD("day",-1,DATEADD("quarter",1,DATETRUNC("quarter",[订单日期]))))

本年第一天:DATE(DATETRUNC("year",[订单日期]))

本年最后一天:DATE(DATEADD("day",-1,DATEADD("year",1,DATETRUNC("year",[订单日期]))))

第几周:DATEPART("week",[订单日期],"monday"),注意要转换为维度使用

datetime(‘week’,[时间],‘monday’) #时间加了'[]'是指的数据源表中的字段名,拖进函数框,字段名都会自带'[]' 将字段命名为‘周’,左下角显示计算有效后,然后点击确认,维度框下就会多一个周的字段。

三、提取指定字符串

提取(前的字符串LEFT([产品名],FIND([产品名],"(")-1)
提取(前的字符串LEFT([产品名],FIND([产品名],"(")-1)
提取)后的字符串RIGHT([产品名],len([产品名])-FIND([产品名],")"))
FINDNTH(string,substring,occurrence)
返回指定字符串内第n个子字符串的位置, 其中n由occurrence参数定义。 例如,
FINDNTH(“Calculation”,“a”,2)=7。
LEFT(string,number)
返回字符串最左侧一定数量的字符。 例如,
LEFT(“Matador”,4)=“Mata”。
LEFT(string,number)
返回字符串最左侧一定数量的字符。 例如,
LEFT(“Matador”,4)=“Mata”。
REPLACE(string,substring,replacement)
在string中搜索substring, 并将其替换为replacement。 如果未找到substring, 字符串就保持不变。 例如,REPLACE(“Version8.5”,“8.5”,“9.0”)=“Version9.0”。
RIGHT(string,number)
返回string中最右侧一定数量的字符。 例如,
RIGHT(“Calculation”,4)=“tion”。
SPLIT(string,delimiter,tokennumber)
返回字符串中一个子字符串, 并使用分隔符字符将字符串分为一系列标记。 字符串将被解释为分隔符和标记的交替序列。 例如, 字符串abc-defgh-i-jkl的分隔符字符为“-”, 标记为abc、 defgh、 i和jkl。 将这些标记想象为标记1到4。 SPLIT将返回与标记编号对应的标记。 如果标记编号为正, 就从字符串左侧开始计算标记; 如果标记编号为负, 就从右侧开始计算标记。 例如, SPLIT(’a-b-c-d’, ’-’,2)=’b’,SPLIT(’a|b|c|d’,’|’,-2)=’c’。

tableau 常用函数整理相关推荐

  1. mysql数据库 常用函数_《MySQL数据库》常用函数整理

    原标题:<MySQL数据库>常用函数整理 以下内容,是我整理出来的比较常用的字符串函数,数值函数,日期函数. 第一类:字符串函数 1.conv(n,from_base,to_base):对 ...

  2. pandas 常用函数整理

    pandas常用函数整理,作为个人笔记. 仅标记函数大概用途做索引用,具体使用方式请参照pandas官方技术文档. 约定 from pandas import Series, DataFrame im ...

  3. DL4J的矩阵处理模块ND4J的常用函数整理

    ND4J矩阵变换的常用函数整理 由本人阅读nd4j源码整理,nd4j是dl4j为了矩阵运算整出来的一套工具.对应python里的numpy,但是并没有numpy那么普及,不过至少使用dl4j搭建神经网 ...

  4. opencv常用函数整理

    opencv常用函数整理 一.常见函数整理 1.1 cv2.resize函数(图像size重定义) 1.2 cv2.getStructuringElement函数(构造卷积核) 1.3.cv2.put ...

  5. oracle有哪些常用函数,Oracle常用函数整理

    点击关注上方"SQL数据库开发", 设为"置顶或星标",第一时间送达干货 之前已经给小伙伴们整理了SQL Server和Mysql的常用函数,还没有看的可以戳下 ...

  6. C++-string常用函数整理(建议收藏)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 最近刷笔试题,涉及到许多字符串相关的题目,所以将一些常用的函数整理一下,便于后面查看.本文后续持 ...

  7. STM32F103标准固件库寄存器及常用函数整理

    学习STM32其实就是学习它的寄存器以及函数的使用,能用单片机的资源实现自己想要的功能,从最开始的点亮一个led,到使用按键,串口,ADC/DAC,定时器计时计数,输出PWM,驱动电机,使用IIC,S ...

  8. mysql常用函数整理

    mysql常用函数: 1⃣️concat(str1,str2,str3-) 同一条记录中多个字段进行连接 2⃣️group_concat(字段名) 一对多关联查询时,如果返回一条记录对应另外一张表多条 ...

  9. 最详细的HIve常用函数整理及案例演示

    Hive常用函数 一.测试数据集 1.1 测试数据集: 1.2 结果展示 二.常用函数 2.1 关系运算 2.1.1 常见关系运算符 2.1.2 空值判断 2.1.3 非空判断 2.1.4 LIKE ...

  10. SQL 常用函数整理_日期函数(一)

    SQL日期函数 1.DATEADD 函数作用:按照指定的单位datepart和幅度delta修改date的值. 语法示例:dateadd(datetime date, bigint delta, st ...

最新文章

  1. c语言最小费用流_策略算法工程师之路-图优化算法(一)(二分图amp;最小费用最大流)...
  2. python设计问答器_Python文件包装器,最佳设计?
  3. HtmlAgilityPack中SelectSingleNode的XPath和CSS选择器
  4. cocos2d-x游戏实例(13)-简易摇杆控制主角
  5. Ext.js 进入页面直接加载数据、输入框设置初始值
  6. iOS cell添加点击时改变字体的颜色及背景
  7. 【转】从TXT导入到dataGridView
  8. [转]JAVA自动装箱和拆箱
  9. win11WiFi无法连接网络怎么办 Windows11WiFi无法连接网络的解决方法
  10. 解决PyScripter中文乱码问题
  11. C#里的三种定时器类型
  12. UVALive5379 UVA270 Lining Up【输入输出+水题】
  13. struts2 模型驱动封装
  14. 如何获取maven命令执行后成功与否的返回值
  15. atitit.表格的绑定client side 最佳实践
  16. 谷歌翻译用不了解决办法
  17. 离线安装linux的gcc,nvidia等错误
  18. web前端第一次作业
  19. 腾讯秋招--微信支付面经
  20. linux学习篇 之 复制、黏贴、删除、撤销

热门文章

  1. 【聚客通scrm】-微信个人号sdk实现的微信云控方案
  2. 1. 查询表customer——查询姓名和联系人相同的顾客信息
  3. 读者问题答疑:4 个超级简单的 Linux 基础考试题!
  4. 两行Python代码实现视频负片特效
  5. QT---创建桌面快捷方式
  6. 使用Python-Flask框架开发Web网站系列课程(四)构建前端
  7. 网站服务器入侵检查,如何检查服务器是否被入侵?
  8. Linux沙箱技术介绍
  9. python创建工作簿_【Python操作Excel】02_操作工作簿与工作表
  10. 程序员如何规划自己的职业生涯