全部文档
文档中心图表操作数据准备Python数据源描述

Python数据源描述

  • 指定Python脚本元素的元数据字段

  • 基于元数据字段,构建Python脚本的业务数据

用户需要在继承的struct类中,定义该脚本元素可用的元数据字段。

支持的数据类型包括:

  • Text ,文本

  • Date,日期

  • Number,数字

  • SmartList,值列表

  • Dimension,维度

指定元数据时,各类型数据需要包含信息示例如下:

class TableX(Struct):
    
    # Text,Date,Number,SmartList,Dimension类型:字段描述description(非必填,图表组件需要,建议赋值)
    channelType: Text = Text(description='channelType_description')
    time: Date = Date(description='time_description')
    cost: Number = Number(description='cost_description')
    # SmarList类型的必填字段:element_name,path
    # 业务必填字段:value_field(前端组件需要),含义为该字段对应的值列表,例:value_field=['已读','未读']
    read: SmartList = SmartList(element_name='read_sml', path='/yjx',value_field=value_field,
                                                   description=description)

    # Dimension类型的必填字段:element_name,path
    # 业务必填字段:value_key(前端组件需要),含义为:该字段对应的维度表达式,例:value_key="staff{IDescendant(#root,0)}"
    staff: Dimension = Dimension(element_name='staff_dim', path='/yjx',value_key=value_key,
                                                   description=description)

@as_datasource(struct=TableX)

在定义好元数据字段后,用户需要基于元数据字段,构建业务数据。

业务数据可以是来自先胜云平台的数据表、财务模型、业务模型,也可以是来自其它非结构化数据的读入。

但是,构建的业务数据字段必须与元数据中定义字段相同,可用的平台Python API 参见平台Python API

def main(p1, p2):

    new_cube = DataTableMySQL(element_name='Order_detail',path='/map_dimension/zhouliufab/Demo_data/Demo_data/yewu/Data')
    df = new_cube.select(columns=['orderdate','cost','number','sales'])
    print("数据库查询出来的信息为:", df)
    # warnings!!!:df 必须是DataFrame格式
    return df

场景示例1:读取数据表中部分字段

class TableX(Struct):
    orderdate: Date = Date(description='订单日期')
    cost: Number = Number(description='成本')
    number: Number = Number(description='数量')
    sales: Number = Number(description='销售额')
@as_datasource(struct=TableX)

def main(p1, p2):

    new_cube = DataTableMySQL(element_name='Order_detail',path='/map_dimension/zhouliufab/Demo_data/Demo_data/yewu/Data')
    df = new_cube.select(columns=['orderdate','cost','number','sales'])
    print("数据库查询出来的信息为:", df)
    # warnings!!!:df 必须是DataFrame格式
    return df

场景示例2:读取数据表中全部字段

salary_model = BusinessModel(element_name='New_Cube1', path='/A_Python')
dict_fields = {}

for col in salary_model.meta.logicTable.columns:
    print("=====================")
    print(col.logicInfo)
    if not col.logicInfo:
        continue
    value_type = col.logicInfo.get('valueType')
    if value_type == 8:  # Dimension
        # field_name = col.logicInfo.get('elementDetail').get('elementName')
        field_name = col.baseInfo.name
        element_name = col.logicInfo.get('dimensionName')
        path = col.logicInfo.get('elementDetail').get('path')
        description = col.baseInfo.description
        dict_fields[field_name]: Dimension = Dimension(element_name=element_name, path=path, description=description)
    elif value_type == 3:  # SmartList
        # field_name = col.logicInfo.get('elementDetail').get('elementName')
        field_name = col.baseInfo.name
        element_name = col.logicInfo.get('valueKey')
        path = col.logicInfo.get('elementDetail').get('path')
        description = col.baseInfo.description
        dict_fields[field_name]: SmartList = SmartList(element_name=element_name, path=path, description=description)
    elif value_type == 15:  # Number
        field_name = col.baseInfo.name
        description = col.baseInfo.description
        dict_fields[field_name]: Number = Number(field_name, description=description)
    elif value_type == 1:  # Text
        field_name = col.baseInfo.name
        description = col.baseInfo.description
        dict_fields[field_name]: Text = Text(field_name, description=description)
    elif value_type == 11:  # Date
        field_name = col.baseInfo.name
        description = col.baseInfo.description
        dict_fields[field_name]: Date = Date(field_name, description=description)
Table = StructMeta('TableX', (), dict_fields)
@as_datasource(struct=Table)
def main(p1, p2):
    new_cube = DataTableMySQL(element_name='table_68e3',path='/A_Python')

    df = new_cube.select()
    print("数据库查询出来的信息为:", df)

    # warnings!!!:df 必须是DataFrame格式
    return df

回到顶部

咨询热线

400-821-9199

我们使用 ChatGPT,基于文档中心的内容以及对话上下文回答您的问题。

ctrl+Enter to send