1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
| // 为维度表中的字段创建子例程 SUB ExtendWhere(Name, ValVarName) LET T = Name & '_COLNAME'; LET ColName = $(T); LET Values = $(ValVarName); IF len(Values) > 0 THEN IF len(WHERE_PART) > 0 THEN LET WHERE_PART = '$(WHERE_PART) AND $(ColName) IN ( $(Values) )'; ELSE LET WHERE_PART = ' WHERE $(ColName) IN ( $(Values) )'; ENDIF ENDIF END SUB; SET PRODUCTYTPE = ;
// 右侧字段应该与Load字段匹配 SET PRODUCTYTPE = $(ods_Product Type);
// 右侧字段应与数据库字段匹配 SET PRODUCTYTPE_COLNAME='p.producttype'; SET CUSTOMERNAME = ;
// 右侧字段应该与Load字段匹配 SET CUSTOMERNAME = $(ods_Customer Name);
// 右侧字段应与数据库字段匹配 SET CUSTOMERNAME_COLNAME='ct.customername';
SET WHERE_PART = ''; FOR EACH fldname IN 'PRODUCTYTPE', 'CUSTOMERNAME' LET vallist = $($(fldname)); WHEN (IsNull(vallist)) LET vallist = ''; IF len(vallist) > 0 THEN CALL ExtendWhere('$(fldname)','vallist'); ENDIF NEXT fldname TRACE Generated WHERE clause: ; TRACE $(WHERE_PART);
// 为Date字段创建自定义子例程 SUB ExtendWhere1(Name, ValVarName) LET T = Name & '_COLNAME'; LET ColName = $(T); LET Values = $(ValVarName); IF len(Values) > 0 THEN IF len(WHERE_PART1) > 0 THEN LET WHERE_PART1 = '$(WHERE_PART1) AND ( $(Values) )'; ELSE LET WHERE_PART1 = ' $(Values) '; ENDIF ENDIF END SUB;
//在加载左侧PURCHASEDATE中提到了第一、第二和第三组变量名 SET PURCHASEDATE = ;
// SET 语句右侧 $() 中的字段必须与 from selection app 中的字段匹配 SET PURCHASEDATE = $(ods_Purchase Date); SET PURCHASEDATE_COLNAME = 'PURCHASEDATE'; SET WHERE_PART1 = '';
LET vallist = $($(fldname)); WHEN (IsNull(vallist)) LET vallist = ''; IF len(vallist) > 0 THEN CALL ExtendWhere1('$(fldname)','vallist'); ENDIF NEXT fldname; TRACE Generated WHERE clause: ; TRACE $(WHERE_PART1);
// 为FactTable中的其他字段创建子例程 SUB ExtendWhere2(Name, ValVarName) LET T = Name & '_COLNAME'; LET ColName = $(T); LET Values = $(ValVarName); IF len(Values) > 0 THEN IF len(WHERE_PART2) > 0 THEN LET WHERE_PART2 = '$(WHERE_PART2) AND $(ColName) IN ( $(Values) )'; ELSE LET WHERE_PART2 = ' WHERE $(ColName) IN ( $(Values) )'; ENDIF ENDIF END SUB; SET PRODUCTID =;
// 右侧字段应该与Load -UI字段匹配 SET PRODUCTID= $(ods_Product);
// 右侧字段应与数据库字段匹配 SET PRODUCTID_COLNAME='pp.productid'; SET STORENAME =;
// 右侧字段应该与Load -UI字段匹配 SET STORENAME = $(ods_Store Name);
// 右侧字段应与数据库字段匹配 SET STORENAME _COLNAME='s.storename'; SET PRICE =;
// 右侧字段应该与Load -UI字段匹配 SET PRICE = $(ods_Price);
// 右侧字段应与数据库字段匹配 SET PRICE_COLNAME='pp.price'; SET WHERE_PART2 = ''; FOR EACH fldname IN 'PRODUCTID ', 'STORENAME ', 'PRICE' LET vallist = $($(fldname)); WHEN (IsNull(vallist)) LET vallist = ''; IF len(vallist) > 0 THEN CALL ExtendWhere2('$(fldname)','vallist'); ENDIF NEXT fldname
TRACE Generated WHERE clause: ; TRACE $(WHERE_PART2);
ODBC Connect to '<your_db_link>';
FactTable: Load PURCHASEDATE as [Purchase Date] PRODUCTID as Product, STORENAME as [Store Name], STOREDESCRIPTION as [Store Description], PRICE as Price, TAX as Tax, 1 as TOTAL_LINES ; sql select to_chat(pp.purchasedate,'DD/MM/YYYY') as purchasedate, pp.productid, s.storename, s.storedescription, Sum(pp.price) as price, Sum(pp.tax) as tax from product_Price pp inner join store s on s.storeid = pp.storeid $(WHERE_PART2) and pp.purchasedate <= to_Date($(WHERE_PART1),'DD/MM/YYYY'); Left Keep(FactTable)
DimensionTable: Load PRODUCTID as Product, PRODUCTYTPE as [Product Type], PRODUCTDESCRIPTION as [Product Description], CUSTOMERNAME as [Customer Name], CUSTOMERADDRESS as [Customer Address] ; sql select p.productid, p.producttype, c.productdescription, ct.customername, ct.customeraddress from product_account p inner join product_company c on c.productcompanyid = a.productcompanyid inner join product_customer_type ct on ct.productcustomertypeid = a.productcustomertypeid $(WHERE_PART);
|