精华内容
下载资源
问答
  • 用到的TCODE: ...RSA6 数据源目录 RSO2 维护一般数据源(事务数据/主数据属性/文本) RSA3 提取器检验程序(数据源测试) Step1:TCODE: SE11 创建数据库 表名:ZHBSJ Step2:TCODE: SE11 创建数

    用到的TCODE:

    SE37/SE80函数构建器

    SE11 ABAP字典(包括数据库表/视图/数据类型等)

    SE16 数据浏览器

    RSA6 数据源目录

    RSO2 维护一般数据源(事务数据/主数据属性/文本)

    RSA3 提取器检验程序(数据源测试)


    Step1:TCODE: SE11 创建数据库表

    表名:ZHBSJ


    Step2:TCODE: SE11 创建数据结构

    数据结构名:ZDS_ZHBSJ_STR


    Step3:TCODE: SE80 创建函数组和函数

    函数组:ZDS_ZHBSJ_GRP,函数:ZDS_ZHBSJ

    筛选出“函数组”,以“RSAX”作为关键字搜索我们要作为函数组模板的对象,并右击选择“复制”


    函数组创建完成后,需要复制函数模块,这里我们只需要复制“RSAX_BIW_GET_DATA_SIMPLE”,并输入新函数模块名“ZDS_ZHBSJ”,然后点击“复制”


    这时候我们再查看这个函数组,如下图所示:


    Step4:TCODE: SE37 更改函数信息,修改源代码

    下图中关联类型更改为我们刚创建的数据结构ZDS_ZHBSJ_STR


    这时候,我们就需要更改源代码了

    FUNCTION ZDS_ZHBSJ.
    *"----------------------------------------------------------------------
    *"*"本地接口:
    *"  IMPORTING
    *"     VALUE(I_REQUNR) TYPE  SRSC_S_IF_SIMPLE-REQUNR
    *"     VALUE(I_DSOURCE) TYPE  SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL
    *"     VALUE(I_MAXSIZE) TYPE  SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL
    *"     VALUE(I_INITFLAG) TYPE  SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL
    *"     VALUE(I_READ_ONLY) TYPE  SRSC_S_IF_SIMPLE-READONLY OPTIONAL
    *"     VALUE(I_REMOTE_CALL) TYPE  SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF
    *"  TABLES
    *"      I_T_SELECT TYPE  SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL
    *"      I_T_FIELDS TYPE  SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL
    *"      E_T_DATA STRUCTURE  ZDS_ZHBSJ_STR OPTIONAL
    *"  EXCEPTIONS
    *"      NO_MORE_DATA
    *"      ERROR_PASSED_TO_MESS_HANDLER
    *"----------------------------------------------------------------------

    * Example: DataSource for table SFLIGHT
      TABLES: ZHBSJ.

      DATA: it_data TYPE TABLE OF ZDS_ZHBSJ_STR.
      DATA: wa_data LIKE LINE OF e_t_data.

     TYPES:BEGIN OF TY_T001,
              BUKRS TYPE BUKRS,
              WAERS TYPE WAERS,
            END OF TY_T001.
      DATA:LS_T001 TYPE TY_T001,
           LT_T001 TYPE TABLE OF TY_T001.


    * Auxiliary Selection criteria structure
      DATA: L_S_SELECT TYPE SRSC_S_SELECT.

    * Maximum number of lines for DB table
      STATICS: S_S_IF TYPE SRSC_S_IF_SIMPLE,

    * counter
              S_COUNTER_DATAPAKID LIKE SY-TABIX,

    * cursor
              S_CURSOR TYPE CURSOR.
    * Select ranges
      RANGES: L_R_RYEAR  FOR ZHBSJ-RYEAR,
              L_R_POPER  FOR ZHBSJ-POPER,
              L_R_DOCNR  FOR ZHBSJ-DOCNR,
              L_R_CPUDT  FOR ZHBSJ-CPUDT,
              L_R_RBUKRS  FOR ZHBSJ-RBUKRS.


    * Initialization mode (first call by SAPI) or data transfer mode
    * (following calls) ?
      IF I_INITFLAG = SBIWA_C_FLAG_ON.

    ************************************************************************
    * Initialization: check input parameters
    *                 buffer input parameters
    *                 prepare data selection
    ************************************************************************

    * Check DataSource validity
        CASE I_DSOURCE.
          WHEN 'ZDS_ZHBSJ'.
          WHEN OTHERS.
            IF 1 = 2. MESSAGE E009(R3). ENDIF.
    * this is a typical log call. Please write every error message like this
            LOG_WRITE 'E'                  "message type
                      'R3'                 "message class
                      '009'                "message number
                      I_DSOURCE   "message variable 1
                      ' '.                 "message variable 2
            RAISE ERROR_PASSED_TO_MESS_HANDLER.
        ENDCASE.

        APPEND LINES OF I_T_SELECT TO S_S_IF-T_SELECT.

    * Fill parameter buffer for data extraction calls
        S_S_IF-REQUNR    = I_REQUNR.
        S_S_IF-DSOURCE = I_DSOURCE.
        S_S_IF-MAXSIZE   = I_MAXSIZE.

    * Fill field list table for an optimized select statement
    * (in case that there is no 1:1 relation between InfoSource fields
    * and database table fields this may be far from beeing trivial)
        APPEND LINES OF I_T_FIELDS TO S_S_IF-T_FIELDS.

      ELSE.                 "Initialization mode or data extraction ?

    ************************************************************************
    * Data transfer: First Call      OPEN CURSOR + FETCH
    *                Following Calls FETCH only
    ************************************************************************

    * First data package -> OPEN CURSOR
        IF S_COUNTER_DATAPAKID = 0.

    * Fill range tables BW will only pass down simple selection criteria
    * of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.
          LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'RYEAR'.
            MOVE-CORRESPONDING L_S_SELECT TO L_R_RYEAR.
            APPEND L_R_RYEAR.
          ENDLOOP.

          LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'POPER'.
            MOVE-CORRESPONDING L_S_SELECT TO L_R_POPER.
            APPEND L_R_POPER.
          ENDLOOP.

          LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'DOCNR'.
            MOVE-CORRESPONDING L_S_SELECT TO L_R_DOCNR.
            APPEND L_R_DOCNR.
          ENDLOOP.

          LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'CPUDT'.
            MOVE-CORRESPONDING L_S_SELECT TO L_R_CPUDT.
            APPEND L_R_CPUDT.
          ENDLOOP.

          LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'RBUKRS'.
            MOVE-CORRESPONDING L_S_SELECT TO L_R_RBUKRS.
            APPEND L_R_RBUKRS.
          ENDLOOP.


    * Determine number of database records to be read per FETCH statement
    * from input parameter I_MAXSIZE. If there is a one to one relation
    * between DataSource table lines and database entries, this is trivial.
    * In other cases, it may be impossible and some estimated value has to
    * be determined.
          OPEN CURSOR WITH HOLD S_CURSOR FOR
          SELECT * FROM ZHBSJ WHERE RYEAR IN L_R_RYEAR AND
                                         POPER IN L_R_POPER AND
                                         DOCNR IN L_R_DOCNR AND
                                         CPUDT IN L_R_CPUDT AND
                                         RBUKRS IN L_R_RBUKRS.


        ENDIF.                             "First data package ?

    * Fetch records into interface table.
    *   named E_T_'Name of extract structure'.
        FETCH NEXT CURSOR S_CURSOR
                   APPENDING CORRESPONDING FIELDS
                   OF TABLE it_data
                   PACKAGE SIZE S_S_IF-MAXSIZE.

        IF SY-SUBRC <> 0.
          CLOSE CURSOR S_CURSOR.
          RAISE NO_MORE_DATA.
        ENDIF.

        SELECT BUKRS WAERS FROM T001 INTO CORRESPONDING FIELDS OF TABLE LT_T001.

        SORT LT_T001 BY BUKRS .

        LOOP AT it_data INTO wa_data.
          IF wa_data-ZZPS_PSP_PNR IS NOT INITIAL.
          CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'
                                EXPORTING
                                  INPUT         = wa_data-ZZPS_PSP_PNR
                               IMPORTING
                                  OUTPUT        = wa_data-ZZWBSID .
          ENDIF.
          READ TABLE LT_T001 INTO LS_T001 WITH KEY  BUKRS = wa_data-RBUKRS BINARY SEARCH ."根据表ZHBSJ和T001的相同字段RBUKRS,在T001中查找对应的本位币货币码WAERS
              IF SY-SUBRC = 0 .
                 wa_data-WAERS = LS_T001-WAERS .
              ENDIF.
          APPEND wa_data TO e_t_data.
          CLEAR wa_data.
        ENDLOOP.


        S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.

      ENDIF.              "Initialization mode or data extraction ?

    ENDFUNCTION.


    Step5:TCODE:RSO2 创建数据源

    数据源名:ZDS_ZHBSJ

    这次的数据源我们以事务数据作为数据源


    填写应用程序组件/简要描述/中间的说明/长文本描述信息


    点击保存图标后,跳到如下界面,将有查询条件的字段在“选择”上选中,然后点击保存,这时候数据源就新增完成了


    Step6:TCODE:RSA3 测试数据源

    输入我们要测试的数据源名称,然后点击“提取”按钮,就可以提取到满足条件的数据记录

    好,到这里,所有的工作都完成了!


    注意:

    数据源创建完成后,在数据结构中若需要新增字段,此新增字段在数据源会默认为字段隐藏,这时候请一定不要忘记取消隐藏!


    展开全文
  • 把excel当成数据源,查询数据,

    千次阅读 2018-07-25 18:27:32
    最近在做将excel数据导出数据库,于是自己查了下资料方法介绍了很多种,尝试自己写了数据的查询的domel,写的比较简陋。 using System; using System.Collections.Generic; using System.ComponentModel; ...

     最近在做将excel表的数据导出数据库,于是自己查了下资料方法介绍了很多种,尝试自己写了数据的查询的domel,写的比较简陋。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.OleDb;
    using System.Drawing;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                var path = @"C:\Users\Administrator\Desktop\test.xlsx";
                dataGridView1.DataSource = null; //每次打开清空内容         
                DataTable dt = Getdata(path, "Sheet1").Tables[0];
                ///加载到dataGridView中
                dataGridView1.DataSource = dt;
                ///获取所有的工作薄
                List<string> tableName = GetTableName(path);
                ///DataTable转化成集合
                IList<Man> users = ModelConvertHelper<Man>.ConvertToModel(dt);
            }
        
            /// <summary>
            ///连接数据源
            /// </summary>
            /// <returns></returns>
            public OleDbConnection OleDbConnection(string path)
            {
                //判断文件后缀         
                string fileSuffix = System.IO.Path.GetExtension(path);
                if (string.IsNullOrEmpty(fileSuffix))
                return null;
                string connString = "";
                //判断Excel文件是2003版本还是2007版本
                if (fileSuffix == ".xls")
                    connString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
                else
                    connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + path + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
                OleDbConnection conn = new OleDbConnection(connString);
                conn.Open();
                return conn;
                           
            }
            /// <summary>
            /// 读取数据源
            /// </summary>
            /// <param name="path">excel文件</param>
            /// <param name="tableName">表名</param>
            /// <returns></returns>
            public DataSet Getdata(string path, string tableName)
            {
                OleDbConnection conn = OleDbConnection(path);
                using (DataSet ds = new DataSet())
                {
                    try
                    {
                        
                        string sql_select = " SELECT * FROM" + "["+ tableName + "$]";
                        using (OleDbDataAdapter cmd = new OleDbDataAdapter(sql_select, conn))
                        {
                            cmd.Fill(ds);
                            conn.Close();
                        }
                        if (ds == null || ds.Tables.Count <= 0) return null;
                    }
                    catch (Exception ex)
                    {             
                        Console.WriteLine("Getdata()", ex.Message);
                    }
                    return ds;
                }
            }
            /// <summary>
            ///  获取工作表名
            /// </summary>
            /// <param name="path">excel文件</param>
            /// <returns></returns>
            public List<string> GetTableName(string path)
            {
                List<string> tableName = new List<string>();
                try
                {
                    OleDbConnection conn = OleDbConnection(path);
                    DataTable sheetNames = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                    for (int i = 0; i < sheetNames.Rows.Count; i++)
                    {
                        DataRow row = sheetNames.Rows[i];
                        for (int j = 0; j < row.ItemArray.Length; j++)
                        {
                            var type = row.ItemArray[j].GetType().Name;
                            if (type != "DBNull")
                            {
                                string name = Convert.ToString(row.ItemArray[j]);
                                if (name.EndsWith("$"))
                                {
                                    tableName.Add(name);
                                }
                            }
                        }
                    }
                    conn.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("GetTableName()", ex.Message);
                }
                return tableName;
            }
            public class ModelConvertHelper<T> where T : new()  // 此处一定要加上new()
            {
                public static IList<T> ConvertToModel(DataTable dt)
                {
                    IList<T> ts = new List<T>();// 定义集合
                    Type type = typeof(T); // 获得此模型的类型
                    string tempName = "";
                    foreach (DataRow dr in dt.Rows)
                    {
                        T t = new T();
                        // 获得此模型的公共属性
                        PropertyInfo[] propertys = t.GetType().GetProperties();
            
                        foreach (PropertyInfo pi in propertys)
                        {
                            tempName = pi.Name;
                            // 检查DataTable是否包含此列
                            if (dt.Columns.Contains(tempName))
                            {
                                if (!pi.CanWrite) continue;
                                object value = dr[tempName];
                                if (value != DBNull.Value)
                                pi.SetValue(t, value, null);
                            }
                        };                   
                        ts.Add(t);
                    }
                    return ts;
                }
            }   
        }
        public class Man
        {
            public double Id { get; set; }
    
            public string Name { get; set; }
            public double Age { get; set; }
        }
    }
    

     

    展开全文
  • Tableau工作表2.1 Tableau工作表2.2 Tableau编辑元数据3. Tableau字段操作3.1 合并字段3.2 字段分层3.3 字段分组3.4 字段拆分3.5 计算字段3.6 集4. Tableau函数与计算4.1 Tableau中的运算符4.2 Tableau函数(1)...

    1. Tableau数据提取

    1.1 先准备要导入tableau的数据

    tableau中的数据提取从数据源创建数据 子集,这有助于通过应用筛选器来提高性能,它还有助于将tableau的某些功能应用于数据源中可能不可用的数据,例如在数据中查找不同的值。但数据提取功能最常用于创建要存储在本地驱动器中的提取,以供tableau脱机访问。数据的提取通过遵循菜单【数据->编辑数据源筛选器】
    在这里插入图片描述
    提取华北及东北地区的家具销售利润低于5000的数据

    1. 先筛选“地区”

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    1. 再筛选“类别”
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    2. 最后筛选“利润”
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    2. Tableau工作表

    2.1 Tableau工作表

    • 在tableau中添加工作表
    • 在tableau中重命名工作表
    • 在tableau中保存和删除工作表
    • 在tableau中重新排序和移动工作表
      在这里插入图片描述

    2.2 Tableau编辑元数据

    1. 检查元数据
      将“订单”表拖动到数据画布,显示列名称及其数据类型。
      字符串数据类型显示为Abc,数字数据类型显示为#

    在这里插入图片描述
    2. 更改数据类型
    连接到数据源,tableau将捕获源的元数据详细信息,如列及其数据类型,这用于创建视图使用的维度,度量和计算字段,我们可浏览元数拓并更改其某些特定要求的某些属性
    在这里插入图片描述 3. 列的重命名和隐藏
    可以使用重命名选项更改列名称。另外,我们可以隐藏一个列,使它不会出现在我们创建的数据视图中。通过单击元数据网格中的数据类型图标可以获得这些选项。可以试着修改"订单ID"列名为"订单编号",或尝试隐藏该列

    在这里插入图片描述
    4. 列别名
    可以为数据源的每一列分配一个别名,以帮助更好的了解列的性质。我们可以从上面的步骤中选择别名选项,然后出现用于创建或编辑别名选项。

    可以尝试着为"省/自治区"的"上海"这一列数据修改别名为:“上海市”
    在这里插入图片描述
    在这里插入图片描述

    3. Tableau字段操作

    3.1 合并字段

    我们可以组合两个维度字段来创建一个字段。此组合字段的名称是单个字段的组合。通过将两个字符串连接成一个以逗号分隔的字符串,维度中的值将合并为单个值。但是可以使用重命名字段操作更改此默认名称

    例如:将“国家”,“地区”,“城市”合并为一个“地址”字段

    第一步:创建(按住CTRL选中要创建的内容)
    在这里插入图片描述
    第二步:编辑
    在这里插入图片描述
    第三步:改名
    在这里插入图片描述

    第四步:效果
    在这里插入图片描述

    3.2 字段分层

    某些情况下,我们需要对几个变量创建一个分层结构。以便在制图或数据分析时随时向下钻取数据

    例如:将【类别,子类别,产品名称】作为一个分层结构,并命名为【产品类别】,以方便 向下查看

    创建分层
    在这里插入图片描述

    在这里插入图片描述
    拖拽“产品分类”到“行”,显示结果
    在这里插入图片描述
    在这里插入图片描述

    3.3 字段分组

    按文件夹分组
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    3.4 字段拆分

    如果数据中有包含多个信息单元的字符串字段(例如客户的名字和姓氏),在将该字段中的值拆分为多个单独的字段的情况下,数据分析起来将更为轻松
    在这里插入图片描述
    在这里插入图片描述

    3.5 计算字段

    如果基础数据未包括你实际工作中所需的所有字段,你可以在tableau中创建新字段,然后将其保存为数据源的一部分。
    在实际的业务中,我们可能更关心“实际销售额”(实际销售额)=销售额*(1-折扣),但现在表中没有这个字段,只能创建一个名叫“实际销售额”的计算字段

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3.6 集


    实际工作中,如果我比较关注两块数据,如在示例超市表中,我希望了解利润亏损的产品情况和利润大于5000的产品情况,这个该怎么实现呢???

    例子1:利用Tableau集实现使用销售数据计算至少买过5000元商品的客户占总客户的百分比

    1. 创建集
      在这里插入图片描述

    2. 设置参数
      在这里插入图片描述
      在这里插入图片描述

    3. 添加行和列显示
      在这里插入图片描述

    4. 计算百分比,构建工作表
      在这里插入图片描述
      在这里插入图片描述

    5. 更改标题
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    6. 显示标签值
      在这里插入图片描述

    7. 利用占比表现
      在这里插入图片描述
      在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    例2:示例中多少客户在2016年和2017年都购买过我们的产品

    1. 把客户名称、订单日期、销售额放到相应的地方。
      在这里插入图片描述
    2. 筛选2016
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    3. 筛选2017
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    4. 创建合并集

    在这里插入图片描述
    在这里插入图片描述
    5. 用新工作表看效果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4. Tableau函数与计算

    4.1 Tableau中的运算符

    运算符是一个符号,通知编译器执行特定的数学或逻辑操作。tableau有多个运算符用于创建计算字段和公式。

    运算符类型

    • 常规运算符
    • 算术运算符
    • 关系运算符
    • 逻辑运算符

    常规运算符
    在这里插入图片描述
    算术运算符
    在这里插入图片描述
    比较运算符
    在这里插入图片描述

    逻辑运算符
    在这里插入图片描述
    算术符优先级
    在这里插入图片描述

    4.2 Tableau函数

    (1)数字函数

    在这里插入图片描述
    例如
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    结果
    在这里插入图片描述
    将"abs(-10)"拖拽到列
    在这里插入图片描述

    (2)字符串函数

    在这里插入图片描述

    例子
    在这里插入图片描述
    在这里插入图片描述

    (3)日期函数

    在这里插入图片描述
    例子
    在这里插入图片描述

    (4) 逻辑函数

    在这里插入图片描述
    在这里插入图片描述

    IIF判断

    在这里插入图片描述
    例1 :IIF(7>5, “Seven is greater than five”, “Seven is less than five”)
    在这里插入图片描述
    例2:利用利润,增加一列为利润评价
    (1)新建字段
    在这里插入图片描述
    (2)切换到数据源查看
    在这里插入图片描述

    IF判断

    在这里插入图片描述
    例子3 :增加一列数量评价
    在这里插入图片描述
    在这里插入图片描述
    多分支判断
    在这里插入图片描述
    在这里插入图片描述

    case

    在这里插入图片描述

    例子:增加邮寄方式这一列
    在这里插入图片描述
    在这里插入图片描述

    复合写法
    在这里插入图片描述

    (5)聚合函数

    在这里插入图片描述
    例子:求和及求平均
    在这里插入图片描述
    在这里插入图片描述
    例子:求统计
    在这里插入图片描述
    在这里插入图片描述

    (6)类型转换函数

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    (7)Tableau计算字段

    Tableau中的数值计算使用公式编辑器中提供的大量内置函数完成。在本例中,我们将看到如何对字段应用计算。计算可以简单地减去两个字段的值或将聚合函数应用于单个字段。

    如:接下来的我们的目标是研究不同运输方式的产品的利润和折扣之间的差异。因此我们创建一个公式,从利润中减去折扣

    颜色含义:函数(淡蓝色) 字段(橙色)运算符(黑色)参数(紫色)注释(绿色)

    例子:邮寄方式和利润折扣关系
    在这里插入图片描述
    在这里插入图片描述

    例子:平均销售额与邮寄方式的关系
    在这里插入图片描述
    在这里插入图片描述

    (8) 字符串计算

    例子:查看包含"安"字的城市的销售情况
    在这里插入图片描述
    在这里插入图片描述

    (9)Tableau日期计算

    例子:每种商品的“订单日期”与“发货日期”的时间总间隔
    在这里插入图片描述
    在这里插入图片描述
    例子:列出“类别”与“利润”与(订单和发货日期时间差)的关系

    在这里插入图片描述

    (10)表计算

    tableau函数与计算中最后一个知识点是:表计算。表计算是一种转换,基于详细级别中的维度将该转换应用于视图中单一度量的值。

    对于任何tableau视图,都有一个由视图中的维度确定的虚拟表。此表不会与数据源中的表混淆。具体来说,虚拟表同“详细信息级别”内的维度来决定,这意味着由tableau工作表中任何以下工作区或卡上的维度来决定

    表计算可以理解为是一种功能更强大的计算字段

    表计算类型

    • 差异计算
    • 百分比差异计算
    • 百分比计算
    • 总额百分比计算
    • 排名计算
    • 百分位计算
    • 汇总计算
    • 移动计算

    差异计算

    对于视图中的每个标记,“差异”表计算将计算表中当前值与另一个值之间的差异
    例如:查看销售额每年中逐月增加或逐月减小的幅度

    1. 先列出某年某季某月的销售额(原始视图)
      在这里插入图片描述

    2. 复制一份原始数据并改名为“差异计算”

    3. 添加"差异计算"
      在这里插入图片描述
      在这里插入图片描述

    4. 一个月比前一个月,点击编辑差异计算
      在这里插入图片描述
      在这里插入图片描述

    5. 二月比一月的差异
      在这里插入图片描述
      在这里插入图片描述

    百分比差异计算

    “百分比差异”表计算将计算表中当前值与另一个值之间的百分比差异。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    百分比计算

    “百分比”表计算会将值计算为某 个其他值的百分比—通常计算为表中前一个值的百分比。如按年分类(从左至右)和按季度和月分类(从上到下)的总销售额
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    45.3%

    总额百分比计算

    "总额百分比"表计算会将值计算为当前分区中所有值的百分比

    1. 复制原始数据
      在这里插入图片描述
    2. 添加表计算
      在这里插入图片描述
      在这里插入图片描述

    排名计算

    给定年度内每个月在总销售额中从最高销售额(排在第1位)到最低销售额(排在第12位)的排名情况
    “排名”表计算将计算分区中每个值的排名

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    百分位计算

    “百分位”表计算在分区中计算每个值的百分位排名
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    想要了解给定年度每个月的值(以百分位表示),而不是了解绝对销售值。对于此类表计算,分配给最低排名值的百分位为0,分配给最高排名值的百分位为100(假设计算按升序进行,这是默认值)。系统会按排为把有其他值分配百分位。因为,对于1,3,22,67这一组的四个值,百分位将分别为0%,33%,67%和100%

    在这里插入图片描述

    汇总计算

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    移动计算

    "移动计算"表计算(有时称为滚动计算)会对当值之前和/或之后指定数目的值执行聚合(总计值、平均值、最小值、最大值)来确定视图中的标记值。移动计算通常用于平滑短期数据婆动,这样可以查看长期趋势。例如:对于证券数据,市场每天都在波动,很难通过每日的上升和下降把握全局。可以使用移动计算来定义一系列值通过所选聚合进行汇总

    要了解总销售额在一段时间内的趋势,如:我想查看每一年每一季季末的平均销售额,而不是季末那一个月的销售额(如:我想查看2013年10月份的数据是:前两个月,即8月,9月及10月的平均销售额,而不是10月份的销售,其他的依此类推)

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    对比【移动计算后的数据】与【原始数据】,验证数据的正确性。
    如:2013年的第一季的最后一个月:三月的原始销售额为:167.17373,移动计算后值为:167,902.57=(231,597.62+104,936.37+167,173.73)/3
    再如:2013年第一季度的第二个月:二月的原始销售额为
    104936.37,移动计算后值为:168266.99=(231597.62+104936.37)/2
    再如:2013年第二季度的第一个月:四月份的原始销售额为:96984.69移动计算后值为:123031.60=(104936.37+167173.73+96984.69)/3
    在这里插入图片描述

    快速表计算

    快速表计算是一个单步骤过程,在此过程中,您可以从列表中选择常用的表计算类型。tableau会为该计算类型自动应用最典型的设置

    快速表计算的步骤:

    1. 单击视图中的度量从上下文菜单中选择“快速表计算”
    2. 从子菜单中选择计算类型
      如果结果令人满意,就表示您完成操作。否则,可以再次单击该度量并选择“编辑表计算”以继续使用计算

    可用快速计算类型的列表与您在“表计算”对话框中看到的默认计算类型的列表并不完全匹配。例如,“复合增长率”快速表计算是选择了“计算复利率”选项的“百分比差异”表计算。如果想要知道如何定义任何给定的快速表计算,请添加计算,然后回去编辑该计算,以查看它在“表计算”对话框中的配置方式。

    临时计算

    临时计算是您在处理视图中功能区上的字段时可创建和更新的计算
    临时计算也称为调用类型输入计算或内联计算

    在这里插入图片描述

    展开全文
  •  c、在数据块的属性面板中选择“查询数据源类型”为“from子句查询”,然后在“查询数据源名称”中写入select查询语句。  d、根据需要创建数据项,并用相关数据库项目的名称来为每个数据项命名。然后...

    1、创建from子句查询的步骤:

             a、手工创建一个数据块。

             b、在数据块的属性面板中选择“数据库数据块”为“是”。

             c、在数据块的属性面板中选择“查询数据源类型”为“from子句查询”,然后在“查询数据源名称”中写入select查询语句。

            d、根据需要创建数据项,并用相关数据库项目的名称来为每个数据项命名。然后修改数据项的“数据类型”、“长度”等属性。

            e、设置数据块的某一个数据项为“主键”。

            f、数据块的属性设置好后,就可以通过布局向导将数据块的内容显示到画布上了。

            g、运行测试,ok,完成。

    2、使用from子句的优缺点

            优点:from子句查询实际上和使用视图没有什么差别。但是from子句查询更可取,因为它保留在表单中而不是在数据库中。如果数据库视图(它完全独立于表单)被删除、移动或者权限被收回,那么这个表单就无效了。将select语句放在表单中而不是作为一个视图放在数据库中,这可以消除许多问题。它还可以使数据库更整洁,不会因为只用于表单的数据库视图而变得很混乱。

           缺点:数据块向导不能用于创建数据块,必须手工设置数据块、它的项目和所有必需的属性。这都需要大量的工作,但是一旦设置了数据块,就可以使用布局向导来完成格式化工作了。

    3、from子句中的查询条件于default_where的关系

            子查询中的Where条件和Default_Where条件不是一个层次,可以共同叠加作用于查询结果。常规表数据源的实际SQL为 select ..,rowid from tname where; 子查询实际SQL为select ..,rowid from (select ... from tname where ..) where .. 其中子查询中的Where为查询字符串中的where,后面一个则为Forms的Default_Where...并不冲突。条件放在子查询中可能效率较高,但同时面临着不易修改数据源的尴尬。

    展开全文
  • Spark SQL-数据源

    千次阅读 2019-11-21 08:38:04
    Spark SQL的DataFrame接口支持多种数据源的操作。一个DataFrame可以进行RDDs方式的操作,也可以被注册为临时。把DataFrame注册为临时之后,就可以对该DataFrame执行SQL查询。 Spark SQL的默认数据源为Parquet...
  • BW系列之数据源

    千次阅读 2016-12-14 09:53:52
    BW系列之数据源
  • 往常使用GridView显示数据时数据源是执行SQL语句返回的数据。其实将自己定义的DataTable类型作为GridView的数据源是和上面那种情况是一样。昨天发现我的设计很不合里,但碍于成型的设计和代码,对课程工作量标准的...
  • SpringBoot 多数据源

    千次阅读 2019-11-08 17:30:36
    实现 1、建库建表 首先,我们在本地新建三个数据库名分别为master,slave1,slave2,我们的目前就是写入操作都是在master,查询是 slave1,slave2...我们在master slave1 slave2中都创建user 其中初始化salve1库的u...
  • 其中 master 数据源一定是要配置 作为我们的默认数据源,其次cluster集群中,其他的数据不配置也不会影响程序员运行,如果你想添加新的一个数据源 就在cluster下新增一个数据源即可,其中key为必须项,用于数据源的...
  • 关注微信公众号:八爪鱼大数据...今天我为大家收集汇总互联网上各类公开数据源,以后就不用到别处找了,赶紧收藏下来吧!! PS:本文会一直更新,建议收藏哦!更新时间:2019-4-19 城市交通 1、高德交通 ...
  • grafana使用MYSQL数据源展示

    千次阅读 2020-08-05 15:20:13
    新增数据源 Grafana支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。 官方支持以下数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,...
  • BW 上传文件数据源

    千次阅读 2010-12-27 20:08:00
    文件数据源也可以做增量抽取设置,但我们一般不这样使用,会其他方式替代;在我们的应用中,一方面用文件数据源来做测试;一方面上载一些比较固定的数据,供数据模型使用,这样就不用在R3系统中创建数据源了。如果...
  • 前言:我们经常会遇到系统标准的数据源,或者我们自建的数据源无法满足要求的情况,这...准备工作(自建数据源)1)RSO2 创建一个简单的数据源:SFLIGHT 业务数据选择一个应用程序组件,填写文本信息,直接到数据库SF
  • springboot 链接多数据库,动态获取数据源信息

    千次阅读 热门讨论 2019-04-09 18:12:32
    springboot 链接多数据库,动态获取数据源信息 前言 最近公司有个需求需要后端访问多个数据库,在网上查了半天资料,结果发现大部分都是配置的主从库这种数据源固定的情况,不符合我的需求,假设我们有这样一种...
  • 数据库与数据源的区别

    万次阅读 多人点赞 2018-02-27 14:44:33
    数据库与数据源的区别jdbc基础1.什么是数据源?答:数据源定义的是连接到实际数据库的一条路径而已,数据源中并无真正的数据,它仅仅记录的是你连接到哪个数据库,以及如何连接的,如odbc数据源。也就是说数据源仅仅...
  • 1、独立数据库,通过动态切换数据源来实现多租户,安全性最高,但成本也高。 2、共享数据库,隔离数据架构,比如使用oracle用多个schema。 3、共享数据库,共享数据库,使用字段来区分不同租户,此...
  •   如何在spring框架中解决多数据源的问题[转贴] 在我们的项目中遇到这样一个问题:我们的项目需要连接多个数据库,而且不同的客户在每次访问中...我们以往在spring和hibernate框架中总是配置一个数据源,因而sess
  • 最近在工作上用到了kettle,目前这个开源的ETl工具相对来说比较火,用做数据抽取清洗工作很方便也很快捷。当然也还有不少的问题,比如使用过程中会发生闪退(测试了几个版本都存在),还有建好的Job和Transfer保存...
  • Excel如何实现两个工作表数据的对比

    千次阅读 2018-12-25 17:53:00
    https://jingyan.baidu.com/article/63f236281f17650208ab3d97.html Sub 数据对比() Dim i As Integer Dim j As Integer For i = 2 To 3225 '员工基础报表数据范围 For j = 2 To 2028 '员工待遇...
  • Grafana配置数据源,自定义查询语法

    万次阅读 2019-08-20 15:38:17
    1.概述--美观、强大的可视化监控指标展示工具 grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大...每个数据源...
  • Spring Data JPA 多数据源的使用

    万次阅读 2019-03-15 14:24:33
    项目中使用多个数据源在以往工作中比较常见,微服务架构中不建议一个项目使用多个数据源。在微服务架构下,一个微服务拥有自己独立的一个数据库,如果此微服务要使用其他数据库的数据,需要调用对应库的微服务接口来...
  • Power BI基础知识——连接数据源

    万次阅读 2019-09-18 19:21:23
    点击上方SQL数据库开发,关注获取SQL视频教程SQL专栏SQL数据库基础知识汇总SQL数据库高级知识汇总连接数据源Power BI作为一个数据可视化平台,不具备存储数据...
  • BW标准数据源

    千次阅读 2010-08-13 15:58:00
    中会这些字段可作为数据清洗条件,“隐藏字段”则表示从数据源中排除,则再后续操作中不可使用,“转换”即表示如果有冲销操作,则会 *-1 冲销数据; 如果此时的“更新”显示“未激活”,则点击即可激活。 ...
  • 有时候需要在一个工作簿中建立多个工作表,并且需要自定义工作表的名称,手动的一个个双击表名去修改非常麻烦,特别是这次我需要建立一百多个表的时候。。。。 方法一:使用数据透视表功能 方法二 使用VB写模块...
  • 使用MFC访问ODBC数据源的方法

    千次阅读 2015-11-19 13:20:06
    MFC访问ODBC数据源定义了几个数据库类。在利用ODBC编程时,经常要使用到CDatabase(数据库类),CRecordSet(记录集类)和CRecordView(可视记录集类)。 其中: CDatabase类对象提供了对数据源的连接,通过它你可以对...
  • JavaWeb中的多数据源开发

    千次阅读 2016-11-15 21:20:08
    从我们接触Javaweb开始,ssh框架或者ssm等或许是惊叹于框架的强大之处还是自身的迷茫,一直没有注意到一个问题就是:...多数据源的配置和使用。 在实际的开发中有很多时候我们是要与其他公司进行合作,有的合作公司会
  • SAP财务常用数据源概览

    千次阅读 2016-03-31 21:26:51
    一. 0FI_GL_10总分类账:领先分类账余额 Delta Update : AIED ...After Images Marked for Deletion via Extractor (FI-GL/AP/AR) ...数据源内容如下图所示: Field in Extraction Structur
  • 基于多数据源的知识图谱构建方法研究 摘要:针对多数据源的融合应用,构建了基于多数据源的知识图谱。首先,对不同领域内的数据源构建相应本体库,并将不同本体库通过数据融合映射到全局本体库,然后,利用实体对齐...
  • Spark系列--SparkSQL(六)数据源

    千次阅读 2018-07-24 12:25:14
    SparkSQL的数据源:结构化的文件(json,parquet),或者是Hive的,或者是外部的数据库(mysql),也或者是已经存在的RDD。 Spark SQL的DataFrame接口支持多种数据源的操作。一个DataFrame可以进行RDDs方式的操作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 338,064
精华内容 135,225
关键字:

以工作表作为数据源