Missing join in workbook
Client exported a business prior to making modifications. The modifications were not going well, so they restored by importing the business area. During import, the selection was made to rename the existing objects. So now there are 2 BAs "BA" and "BA 1". BA is the pre-modification business area, and "BA 1" contains the modifications. The client then deleted "BA 1" thinking everything would be restored prior to the modifications.
They aren't. To further complicate things, several folders in the business area were shared with other business areas (so now there are "Folder 1" objects all over the place). When users open workbooks, they are getting the error:
Cannot join tables used in the workbook. Join "" not found in the EUL.
Running the workbook dump utility (d51wkdmp) throws:
DCEException - Internal EUL Error: InvalidId - Failed to find EUL element by id
Any ideas on how to find out which join(s) are missing, or a way to gracefully back out the export/import that took place?
Boy, what a mess. I am thinking if it would be possible to delete business areas BA and BA1, then reimport the pre-modification business area. The concern I would have is if the folders in this business area BA are also used in other business areas. If just BA and BA1, then I think you would be okay. But if used in BA, BAC, BAD, BAE, and so forth, then you have to be careful.
When they deleted business area BA1, do they remember what option they selected? Was it delete the business area and its folders option? Kind of sounds like that is what happened. If you do that and the folders are used in other business areas, they should not get removed. But since you did the rename option on the import, those existing folders would have been renamed and if not used in any other business area, would have been deleted.
The problem is that Discoverer tends to work off its internal id values, not the names. So the original folders and joins and stuff would have had unique internal id values that your workbooks are looking for. The reimported business area, though it has the right names, would have new internal id values, that the workbooks do not know about, and thus the problems you are having now.
Now I admit that is guessing on my part. I know the internal id values are there and would be unique. Exactly how Discoverer tracks its join usage in workbooks, that part I have never seen any documentation on.
This may be something where you want to log a service request with Oracle support and see what they suggest on how to best recover from this situation. Those would be the folks who would best understand the internal (behind the scene) workings of Discoverer.
Good luck.
John Dickey
Similar Messages
-
[nQSError: 14044] Missing join between logical tables
Hi All,
I have three physical tables:
A- Dimension (Contact) B- Helper (Con-Prod) C- Dimension (Product). 'A' joins to facts.
Relationships are:
A:B=1:M and B:C=N:1
Currently a column of B table has been implemented as MLOV. As a result now I have one additional MLOV physical table 'D' that joins to 'B' (Since its B.MLOV_WID=D.MLOV_WID , its not a foreign key join).
The Logical Layer has three Logical tables: A, B and C as in the Physical Layer. B table has got one new LTS for 'D'.
Now the Problem is when I take a column that is sourced from D and another from C, it generates an error in Answers: Missing join between logical tables B and C. I have verified that the Logical and Physical joins exist.
I think this is something with the Logical level setup. So here's some more information on hierarchy setup. I have one Hierarchy (Contact) for all those Logical tables. I have setup Level for the MLOV column. I don't have level setup for most of the non-MLOV columns.
Can you please share your thoughts? I would like to avoid implicit join method.Hi,
It seems like you are pulling a report from 2 tables with NO physical join.
Please check the physical layer diagram and join the 2 tables.
Thanks,
Vineeth -
How to join two workbooks in one?
Hi Gurus,
Is it possible to mix two workbooks without loose BW Connection ?
I created one workbook (Called "X") and another workbook (Called "Y"). Each of them is based on the same query.
I used the function copy sheet but after the copy the sheet only have an excel-function
Could you please help finding the solution?
Thank you in advance
CheersHi Gilo,
You can't mix the workbooks since they are created seperately and having different workbook IDs,but you can mix the worksheets.
If your requirement is showing the same query in different pages,then you can create a single workbook and have multiple worksheets.Each worksheet will have a same query in different formats.
You can make a copy of the worksheet without losing BW Connection and options.
To perform this,you can go to Tools->Copy Sheet of Analysis Toolbox.This will create an exact copy of worksheet to new sheet,so that you will have same query in different worksheets.I mean Sheet1 and Sheet2 will have same query.
Let me know in case of any clarifications.
Rgds,
Murali -
The basis team installed the Enchancement Package on BW Sandbox last month. When I tried to open the workbook, it only show only one role, but it should be showing others roles. Also, when I tried to save a workbook and assign to a role, I do see the complete list of the roles.
On the SAP menu (backend tools), I do see complete list of the roles on the user menu. I did check the user setting and its roles, and the roles are active (not expired).
I am wondering how to fix the problem, and I am wondering will the latest support pack for frontend will solve it or what other thing we need to do?Hi Glenn,
Please check the following:
The settings in SSM_CUST defines a compress mechanism for the user menu
known as "Redundancy avoidance" and described in notes 357877 and 357693
Redundancy avoidance deletes easy access menu entries for doubled
transaction codes whenever SSM_CUST contains
1. an entry CONDENSE_MENU with PATH = 'YES' and
2. either an entry DELETE_DOUBLE_TCODE with PATH = 'YES' or no entry
DELETE_DOUBLE_TCODES, at all.
If you don't want doubled transaction codes to be deleted, then simply
add an entry DELETE_DOUBLE_TCODES with PATH = 'NO' into table SSM_CUST.
Please enter
DELETE_DOUBLE_TCODES with PATH = 'NO' into table SSM_CUST
and retest this issue...
many thanks
Orla. -
One of our home computers does not display the Join Tracks function when trying to copy from a CD. It was there before but it just sort of 'went away'. The function works fine on the other home computer. The computer that does not work runs Windows 7 Pro 64 bit O/S.
Make sure the CD is displayed with the tracks in numerical order, and that the tracks you want to join are highlighted. Then click on Options, and it will appear as pictured below.
-
I have the following query which has an outer join and it works perfectly and shows publication paragraph which don't have any maintenance records with a value of 0.
However when I add to the where clause conditions such as lpm.fac_ident and lpm.start_date, the null values no longer show up in the query(see second SQL statement).
I am new at SQL and am just trying to make this outer join work. Any help would be appreciated.
-- THIS WORKS
SELECT m.publication_paragraph, pm.description, pm.frequency, count(l.publication_paragraph) ACTIVITIES_PERFORMED
FROM lpm_paragraph_mapping_table m, lpm l, pm_requirements_table pm
WHERE m.paragraph_alias_mapping = l.publication_paragraph (+)
GROUP BY m.publication_paragraph, pm.description, pm.frequency
order by count(l.publication_paragraph);
-- THIS DOES NOT WORK
SELECT m.publication_paragraph, pm.description, pm.frequency, count(l.publication_paragraph) ACTIVITIES_PERFORMED
FROM lpm_paragraph_mapping_table m, lpm l, pm_requirements_table pm
WHERE m.paragraph_alias_mapping = l.publication_paragraph (+)
AND l.fac_ident = 'EWR' AND TO_CHAR(l.start_date, 'YYYY') = '2010'
GROUP BY m.publication_paragraph, pm.description, pm.frequency
order by count(l.publication_paragraph);
Edited by: George Heller on Jun 30, 2011 9:47 AMfabio_silva wrote:
Hi,
I just didn't get. The table (pm_requirements_table pm) haven't any join ???
Regards,Forgive the ASCII art, but your query looks like:
---------- JOIN ----------
| Alias M | ====> | Alias L |
| Alias PM |
----------- The table pm_requirements_table is not joined at all. Unless it has only a single row, then your resultset will have 1 row for each row in lpm_paragraph_mapping_table (because of the outer join) times the number of rows in pm_requirements_table. Consider this simplified example.
SQL> select * from t;
ID DESCR
1 T 1
2 T 2
SQL> select * from t1;
ID DESCR
1 T1 1
2 T1 2
3 T1 3
4 T1 4
SQL> select 1.id, t.descr, t1.descr
2 from t, t1;
ID DESCR DESCR
1 T 1 T1 1
1 T 1 T1 2
1 T 1 T1 3
1 T 1 T1 4
1 T 2 T1 1
1 T 2 T1 2
1 T 2 T1 3
1 T 2 T1 4Here, my table t is the result from your join between lpm_paragraph_mapping_table and lpm. My table t1 is your pm_requirements_table. You need something more like:
SQL> select 1.id, t.descr, t1.descr
2 from t, t1
3 where t.id = t1.id;
ID DESCR DESCR
1 T 1 T1 1
1 T 2 T1 2Assuming you fix that join, you can use a sub-query to apply the predicates to the lpm as Centinul showed, or, if you are on a current version of Oracle, use ANSI join syntax wich would look something like:
SELECT m.publication_paragraph, pm.description, pm.frequency,
count(l.publication_paragraph) ACTIVITIES_PERFORMED
FROM lpm_paragraph_mapping_table m,
LEFT JOIN lpm l,
ON m.paragraph_alias_mapping = l.publication_paragraph and
l.fac_ident = 'EWR' AND
TO_CHAR(l.start_date, 'YYYY') = '2010'
JOIN pm_requirements_table pm
on something
GROUP BY m.publication_paragraph, pm.description, pm.frequency
ORDER BY count(l.publication_paragraph);Leaving aside the missing join, the reason why your query as posted does not work is that when there is not a match on m.paragraph_alias_mapping = l.publication_paragraph Oracle will "make up" rows form lpm with all null columns for each row in lpm_paragraph_mapping_table where there is no match. So, when you compare those made up rows from lpm, you are effectively saying where NULL = 'EWR' and TO_CHAR(NULL, 'yyyy') = '2010'. Null is never equal to anything. Any comparision against null is unknown, so the made up rows get filtered out by your predicate.
John -
Default parameters are missing in the cloned EUL
we have discoverer up and running perfectly on our existing instance - SIGMA
now we have a new instance - ALPHA,
we cloned the whole EUL from old instance(SIGMA),
IN ALPHA every thing is working fine, we have all the BA,folders and all the workbooks seem to work fine, but we have a issue with the default parameters.
the default parameters are missing from the workbooks, now this has become an big issue, because we have hundreds of reports and user want need them all with the default parameters
could somebody please help me on this issue
few questions:
when cloned does the default parameters get erased??
Does the default parameters entered in the workbook get saved anywhere in the EUL_Tables??
Could you please give me a best approach to bring in thoese default parameters??
any thoughts are highly appreciated
note: i can edit the worksheet and enter the default parameter and save the worksheet but we have got some hundreds of workbooksHi,
when cloned does the default parameters get erased??I would be surprised if the default parameters are erased. More likely is that they are not being used because the default value is not valid anymore or because Discoverer is trying to use the last parameter value. Check the value of the SaveLastUsedParamValue preference setting. Is this the same on Desktop, viewer and Plus?
Does the default parameters entered in the workbook get saved anywhere in the EUL_Tables??The default parameters will be save along with the workbook in the EUL5_DOCUMENTS table. The field is of type LONG RAW so you won't easily be able to see this field. You can use the workbook dump utility to check whether there are default parameters actually set up in the workbook.
Could you please give me a best approach to bring in thoese default parameters??You could try exporting and importing the workbooks into the new environment to see whether this fixes the issue.
Rod West -
Matching HR and AD records on 2 attributes, then modify the join attribute?
Hi,
We are introducing FIM into an environment consisting of an HR system and AD, with no so happy data. I know that data integrity is key, but there are people above that want some results....so....
The only match between the existing HR and AD data we can find is the 'firstname' & 'surname' attributes. Lets assume for now that there are no duplicate 'firstname' & 'surname' attributes in HR and AD...could we join the records on 2 attributes
of 'firstname' & 'surname'?
Once the records are joined, we would then flow the 'employeeID' attribute from HR to AD.
Could we then remove the 'firstname' & 'surname' join rule and replace it with 'employeeID' attribute join rule?
Thank you,
SKYes, or even leave the name-based join there but lower in precedence than the employeeID one. In practice the problem with name-based joins is not just the obvious one of duplicates but more often that the entry in AD has been created with a preferred
first name (e.g. Dave) whereas the HR one has the legal first name (e.g. David), leading to missed joins. -
Hello all
I have a query here: For each country in "America", give the highest mountain and its height; ordered by height. and tables:
encompasses : country,continent
geo_mountain: mountain,country
mountain:name,height
i wrote so:
select co.country,mo.name, max(mo.height) as mheight
from mountain mo, encompasses co
join geo_mountain gmo
on mo.name=gmo.mountain
where gmo.country=any (select country from encompasses where continent='America')
GROUP BY co.country,mo.name
order by mheight;but i get a lot of results, please rewrite my query if possible
-- File created - Wednesday-May-01-2013
-- DDL for Table ENCOMPASSES
CREATE TABLE "INTERN"."ENCOMPASSES" ("COUNTRY" CHAR(2), "CONTINENT" VARCHAR2(20), "PERCENTAGE" NUMBER)
COMMENT ON COLUMN "INTERN"."ENCOMPASSES"."COUNTRY" IS 'the country code'
COMMENT ON COLUMN "INTERN"."ENCOMPASSES"."CONTINENT" IS 'the continent name'
COMMENT ON COLUMN "INTERN"."ENCOMPASSES"."PERCENTAGE" IS 'percentage, how much of the area of a country belongs to the
continent'
COMMENT ON TABLE "INTERN"."ENCOMPASSES" IS 'information to which continents a country belongs'
REM INSERTING into INTERN.ENCOMPASSES
SET DEFINE OFF;
Insert into INTERN.ENCOMPASSES (COUNTRY,CONTINENT,PERCENTAGE) values ('ag','America',100);
Insert into INTERN.ENCOMPASSES (COUNTRY,CONTINENT,PERCENTAGE) values ('tt','America',100);
Insert into INTERN.ENCOMPASSES (COUNTRY,CONTINENT,PERCENTAGE) values ('us','America',100);
-- File created - Wednesday-May-01-2013
-- DDL for Table GEO_MOUNTAIN
CREATE TABLE "intern"."GEO_MOUNTAIN" ("MOUNTAIN" VARCHAR2(30), "COUNTRY" CHAR(2), "PROVINCE" VARCHAR2(40))
COMMENT ON COLUMN "intern"."GEO_MOUNTAIN"."MOUNTAIN" IS 'the name of the mountain'
COMMENT ON COLUMN "intern"."GEO_MOUNTAIN"."COUNTRY" IS 'the country code where it is located'
COMMENT ON COLUMN "intern"."GEO_MOUNTAIN"."PROVINCE" IS 'the province of this country'
COMMENT ON TABLE "intern"."GEO_MOUNTAIN" IS 'geographical information about mountains'
REM INSERTING into intern.GEO_MOUNTAIN
SET DEFINE OFF;
Insert into intern.GEO_MOUNTAIN (MOUNTAIN,COUNTRY,PROVINCE) values ('Mt Elbert','us','Colorado');
Insert into intern.GEO_MOUNTAIN (MOUNTAIN,COUNTRY,PROVINCE) values ('Mauna Kea','us','Hawaii');
Insert into intern.GEO_MOUNTAIN (MOUNTAIN,COUNTRY,PROVINCE) values ('Borah Peak','us','Idaho');
Insert into intern.GEO_MOUNTAIN (MOUNTAIN,COUNTRY,PROVINCE) values ('Granite Peak','us','Montana');
-- File created - Wednesday-May-01-2013
-- DDL for Table MOUNTAIN
CREATE TABLE "intern"."MOUNTAIN" ("NAME" VARCHAR2(30), "HEIGHT" NUMBER)
COMMENT ON COLUMN "intern"."MOUNTAIN"."NAME" IS 'the name of the mountain'
COMMENT ON COLUMN "intern"."MOUNTAIN"."HEIGHT" IS 'the height of the mountain'
COMMENT ON TABLE "intern"."MOUNTAIN" IS 'information about mountains'
REM INSERTING into intern.MOUNTAIN
SET DEFINE OFF;
Insert into intern.MOUNTAIN (NAME,HEIGHT) values ('Borah Peak',3859);
Insert into intern.MOUNTAIN (NAME,HEIGHT) values ('Mauna Kea',4205);
Insert into intern.MOUNTAIN (NAME,HEIGHT) values ('Mt Elbert',4399);im using oracle 11g, ubintu 12.4
thank you so much
best,
davidHi,
there is also a missing join between encompasses and geo_mountain tables.
If you want to find the highest mountain for each country you can use an analytic function in a subquery and select only the top first for each country in the outer query.
You have just posted one country (us) so the query is just giving one row in this case:
SELECT country, name, height
FROM
SELECT co.country, mo.name, mo.height
, ROW_NUMBER() OVER (PARTITION BY co.country ORDER BY mo.height DESC) rn
FROM mountain mo
JOIN geo_mountain gmo
ON mo.name = gmo.mountain
JOIN encompasses co
ON co.country = gmo.country
WHERE co.continent = 'America'
WHERE rn=1;
COUNTRY NAME HEIGHT
us Mt Elbert 4399You can also use the WITH clause if you prefer. I normally do for readability:
WITH got_ranks AS
SELECT co.country, mo.name, mo.height
, ROW_NUMBER() OVER (PARTITION BY co.country ORDER BY mo.height DESC) rn
FROM mountain mo
JOIN geo_mountain gmo
ON mo.name = gmo.mountain
JOIN encompasses co
ON co.country = gmo.country
WHERE co.continent = 'America'
SELECT country, name, height
FROM got_ranks
WHERE rn=1;
COUNTRY NAME HEIGHT
us Mt Elbert 4399Regards.
Al -
.Dis Files getting errored out while migrating
Hi
During migration of a .dis file from one instance to another instance
while opening a .dis file i am facing this error :
Cannot join tables used in the workbook.Item dependency "" not found in the EUL.
Please help me.
Regards
Nakul VenkataramanFirst thing to check is that the EULs on both instances are the same. I would suspect that there is a missing join in the target instance between folders.
-
C# Script to open and read an Excel spreadsheet with multiple worksheets
Can someone provide me the C# syntax and Edit Script to open an Excel spreadsheet with multiple worksheets and then using the data to create and output a .csv file? The multiple worksheets contain different data elements that I'll need to parse out and then
store as a .csv file that will then be read to pump data into our SQL Server Database.
Thanks for your review and am hopeful for a reply.
PSULionRPI think this code originally came from Joel, who comes here quite a bit. I'm not a C# expert, like Joe is, but I think this is pretty close to what you want.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;
using System.IO;
namespace WindowsFormsApplication2
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
Main();
public void Main()
string filePath = "C:\\Users\\Ryan\\Desktop\\MainExcel.xlsx";
Microsoft.Office.Interop.Excel.Application xlobj = new Microsoft.Office.Interop.Excel.Application();
Workbook w = default(Workbook);
Workbook w1 = default(Workbook);
Worksheet s = default(Worksheet);
Worksheet s1 = default(Worksheet);
Worksheet xlsht = default(Worksheet);
xlobj.Visible = true;
int intItem = 1;
DirectoryInfo dirSrc = new DirectoryInfo(@"C:\Users\Ryan\Desktop\Test_Folder\");
foreach (FileInfo ChildFile in dirSrc.GetFiles())
try
// Renaming the excel sheet
w = xlobj.Workbooks._Open(ChildFile.FullName,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
w1 = xlobj.Workbooks._Open(filePath,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
//this doesn't make any sense
//w1 = xlobj.Workbooks.Open(filePath);
//if (intItem > 3)
Excel.Worksheet lastSht =
(Excel.Worksheet)w1.Worksheets[w1.Worksheets.Count];
xlsht = (Excel.Worksheet)w1.Worksheets.Add(Type.Missing,
lastSht,
Type.Missing, Type.Missing);
s = (Excel.Worksheet)w.Worksheets[1];
s1 = (Excel.Worksheet)w1.Worksheets[intItem];
s1.Name = ChildFile.Name;
// it will copy and paste sheet from one to another with formula
s.UsedRange.Copy(Type.Missing);
Excel.Range r = s1.get_Range("A1", Type.Missing);
r.PasteSpecial(Excel.XlPasteType.xlPasteValues,
Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone,
Type.Missing, Type.Missing);
s1.UsedRange.Formula = s.UsedRange.Formula;
// Renaming the excel sheet
//w.Save();
w.Close(false, Type.Missing, Type.Missing);
w1.Close(false, Type.Missing, Type.Missing);
catch (Exception ex)
//w.Save();
w1.Save();
w.Close(false, Type.Missing, Type.Missing);
w1.Close(false, Type.Missing, Type.Missing);
intItem = intItem + 1;
//Dts.TaskResult = ScriptResults.Success
Do you need help getting everything into a CSV, or can you take it from here???
Knowledge is the only thing that I can give you, and still retain, and we are both better off for it. -
Distribute eps objects with file list and quantity
Hello everyone,
Here's a script i wrote so I share it for the contribution.
Here's my purpose. Every year, for a customer of our company, we have to print several description plates for their products. They give us about 30 or more texts, traduced in about 7 languages, and an excel file with quantities that each retail seller of each country do want to receive.
We print these aluminium plates on a uv cured ink printing machine which have a table dimension of about 60x40cm. Preparing manually every files of 60x42cm to print was way too much time devouring, so i wrote that script.
Before running this script you have to create a folder with your text files in eps, and create a new document with the dimension you want.
Don't hesitate if you want more precisions with the process.
#target illustrator
#targetengine session
This script allows you to import EPS files as linked files. It distributes them and centers the all according to the dimension of the artboard of your document, then it saves the file.
You can define everything in the start list : target folder, basename of the destination files, how much objects per sheet you want, the roation if necessary, spacing between each objects, number of culumn for the distribution.
If you want to distribute a number of objects that is bigger thant the limit of objects per sheet, the script reports the remaining in a new sheet after saving the previous one.
The first 2 arrays contains the filenames to use in the source folder and their respective quantity.
var doc = app.activeDocument;
doc.rulerOrigin = [0,0];
var xtimes = 0;
var countName;
var folder;
var folder2;
//var folder = 'C:\\Documents and Settings\\Administrateur\\Bureau\\BBB\\';
// array for filenames
var listEx=new Array (
"File1.eps",
"File2.eps",
"File3.eps",
// array for quantity for each filenames
var listqte=new Array (
15,
8,
19,
//-------------UI CODE------------
var win = new Window ("dialog");
win.alignChildren = "left";
// ------Folders selection panel
var foldPanel = win.add("panel");
foldPanel.alignChildren = "right";
// source folder for files
var panelGrp1 = foldPanel.add("group");
var btnSource = panelGrp1.add("button",undefined,"Source Folder :");
var txtSource = panelGrp1.add("edittext",undefined);
txtSource.characters = 40;
btnSource.onClick = function()
folder2 = Folder.selectDialog ("Select Source folder..."); // get the source folder
txtSource.text = folder2.fsName; // show the file Path here
// destination folder
var panelGrp2 = foldPanel.add("group");
var btnSave = panelGrp2.add("button",undefined,"Save Folder :");
var txtSave = panelGrp2.add("edittext",undefined);
txtSave.characters = 40;
btnSave.onClick = function()
folder = Folder.selectDialog ("Select Destination folder..."); // get the source folder
txtSave.text = folder.fsName; // show the file Path here
// Base name for destination files
var panelGrp3 = foldPanel.add("group");
panelGrp3.alignment = "left";
var bfn = panelGrp3.add("statictext",undefined,"Basename of target file :");
var txtbfn = panelGrp3.add("edittext",undefined,"Description plates - UK");
txtbfn.characters = 20;
// other parameters
var grp = win.add("group");
grp.alignChildren = "left";
grp.orientation = "column";
// counter
var wincount = grp.add("group");
var textcount = wincount.add("edittext",undefined,0);
textcount.characters=2;
wincount.add("statictext",undefined,"Start count");
//Limit number of placeditems to distribute in one file
var winlimit = grp.add("group");
var textlimit = winlimit.add("edittext",undefined,0);
textlimit.characters=2;
winlimit.add("statictext",undefined,"Limit");
//number of Columns for the distribution
var wincolon = grp.add("group");
var textcolon = wincolon.add("edittext",undefined,0);
textcolon.characters=2;
wincolon.add("statictext",undefined,"Nb of columns");
// Spacing values between each objects in mm
var winspace = grp.add("panel",undefined,"Spacing in mm");
winspace.orientation = "row";
winspace.add("statictext",undefined,"X");
var Xspace=winspace.add("edittext",undefined,0);
Xspace.characters=7;
winspace.add("statictext",undefined,"Y",undefined,0);
var Yspace=winspace.add("edittext");
Yspace.characters=7;
// rotation angle
var winrotate = grp.add("group");
var textangle = winrotate.add("edittext",undefined,0);
textangle.characters=3;
winrotate.add("statictext",undefined,"Rotation in °");
// Dropdownlist of presets
var winPreset =grp.add ("dropdownlist", undefined, [ "Description plates","Trapezes plates","-","Perso"]);
winPreset.onChange = function ()
switch (winPreset.selection.text)
case "Description plates":
textlimit.text=8;
textcolon.text=4;
Xspace.text=6.4;
Yspace.text=27;
textangle.text=0;
break;
case "Trapezes plates":
textlimit.text=18;
textcolon.text=6;
Xspace.text=9;
Yspace.text=9;
textangle.text=0;
break;
case "Perso":
textlimit.text=0;
textcolon.text=0;
Xspace.text=0;
Yspace.text=0;
textangle.text=0;
break;
//winPreset.selection=1;
var runBT=grp.add("button",undefined,"Run !");
runBT.onClick = function()
win.close();
moteur();
win.show();
//--------------------End of UI CODE----------------
//---------------------------------fonction Placement of objects
function place()
var paddingx = parseFloat(Xspace.text)*2.834; //spacing in mm between each column (for a value in points just suppress the *2.834)
var paddingy = parseFloat(Yspace.text)*2.834; //spacing in mm between each line
var gridCols = textcolon.text; // number of columns
var newGroup = doc.groupItems.add();
var sel = doc.placedItems;
// set the position of the first element, assuming that the group of all elements are centered in X and Y in the artboard
var originX = (doc.width - ((doc.width - ((sel[0].width * gridCols) + (paddingx) * (gridCols-1)))/2))-sel[0].width
var originY =((doc.height - (( sel[0].height * (textlimit.text/gridCols) ) + ( paddingy*( (textlimit.text/gridCols)-1 ) )))/2)+sel[0].height
var currentX= originX
var currentY = originY
for(var e=0, slen=sel.length;e<slen;e++)
// :::SET POSITIONS:::
sel[e].top = currentY;
sel[e].left = currentX;
// :::DEFINE X POSITION:::
currentX += -(sel[e].width + paddingx);
if((e % gridCols) == (gridCols - 1))
currentX = originX
// :::DEFINE Y POSITION:::
currentY += sel[e].height+paddingy;
// ::Add to group
sel[e].moveToBeginning (newGroup );
redraw()
//----------------------function Save
function sauve()
var fich = txtbfn.text; //Basename of the destination file
// embed elements (for my case these are eps placeditem files)
for (var i = doc.placedItems.length-1; i >= 0; i-- )
app.activeDocument.placedItems[i].embed();
// draw a rectangle with the dimensions of the artboard and centered to it, with no fill color neither stroke color
doc.rulerOrigin = [0,0]; // rulers to the origin
var artboardRef = doc.artboards[0];
// read dimensions oh the artboard to position therectangle
var top=artboardRef.artboardRect[1] ;
var left=artboardRef.artboardRect[0];
var width=artboardRef.artboardRect[2]-artboardRef.artboardRect[0];
var height=artboardRef.artboardRect[1]-artboardRef.artboardRect[3];
var rect = doc.pathItems.rectangle (top, left, width, height);
rect.stroked = false;
rect.filled = false;
countName ++;
// when several files are saved, the ten first files are numbered like this : 01, 02, 03... instead of 1,2,3
var countName2 = countName;
if (countName<=9) { countName2 = ("0" + countName)};
if (xtimes != 0) // saves in eps, basename of file + number of times to repeat if necessary (it's to avoid to save several but identical files. For ex. if i have an object to print 100 times and i place 50 objects per file, the mention "2 times" will be mentionned in the name of the destination file )
var dest= new File(folder + '/' + fich + ' ' + countName2 + ' - ' + xtimes + ' times' + '.eps');
else
var dest= new File(folder+ '/' + fich + ' ' + countName2 + '.eps') ;
var options = new EPSSaveOptions();
options.preview = EPSPreview.None;
//options.compatibility = Compatibility.ILLUSTRATOR14;
//options.overprint = PDFOverprint.DISCARDPDFOVERPRINT
//options.embedAllFonts = false;
//options.includeDocumentThumbnails = false
doc.saveAs(dest, options);
//-------------------- function moteur
function moteur()
var limite = textlimit.text; // max number of objects to distribute in one sheet
var couchangl = textangle.text; // rotation angle of the element
//--------------Searches and signals if there is missing files in the source folder. If so, the script stops and displays which files are missing
var miss=new Array();
for (var i=0,len1=listEx.length;i<len1;i++)
var myfile = new File(folder2+'/'+listEx[i]);
if (myfile.exists==false)
miss.push(listEx[i]);
if (miss.length != 0)
alert (miss.length+" missing files : "+"\r"+miss.join(", "+"\r")+"\r"+"\r"+" Please correct and try again");
return;
//--------------end of verification
var start = new Date(); // starts chrono
countName = textcount.text; // start of the counter to number the name of the file to save
//-------------disctribution of the object on the sheet
for (var i=0,howmuch = 0,len1=listEx.length;i<len1;i++)
for (var j =0; j<listqte[i];j++)
if (howmuch==0)
if ((listqte[i]-j)/limite>=2) //activate "xtimes" if quantity is twice or more bigger than "limit"
xtimes = parseInt ((listqte[i]-j)/limite);
j += limite*(xtimes-1);
myfile = new File(folder2+'/'+listEx[i]);
var thisPlacedItem = doc.placedItems.add();
thisPlacedItem.file = myfile;
// rotate if necessary
if (couchangl !=0) thisPlacedItem.rotate(couchangl);
howmuch ++;
if (howmuch == limite)
place();
sauve();
doc.pageItems.removeAll();
howmuch = 0;
xtimes = 0;
place();
sauve();
redraw();
alert("time spent : "+((new Date() - start)/1000)+" secondes");Hello,
The Windows Desktop Perfmon and Diagnostic tools forum is to discuss performance monitor (perfmon), resource monitor (resmon), and task manager, focusing on HOW-TO, Errors/Problems, and usage scenarios.
As the question is off topic here, I am moving it to the
Where is the Forum... forum.
Karl
When you see answers and helpful posts, please click Vote As Helpful, Propose As Answer, and/or Mark As Answer.
My Blog: Unlock PowerShell
My Book:
Windows PowerShell 2.0 Bible
My E-mail: -join ('6F6C646B61726C406F75746C6F6F6B2E636F6D'-split'(?<=\G.{2})'|%{if($_){[char][int]"0x$_"}}) -
Importing multiple Word docs into InDesign
Hi there
Is it possible to import multiple Word documents into a single InDesign text frame all at once?
I have 20 files that all flow sequentially so was wondering if -- by selecting them all in Place window -- they would all be brought in one after the other, without each one creating its own new text frame.
Any help gratefully received.
Thanks
DanI use the script, below, for that. It's a bit scruffy, it should be tarted up. But it works fine. When you start it you type a path/file mask, using the formats illustrated in the dialog.
It sets a few import preferences, these are the only ones I'm interested in. But it'll pick up the other options from their current settings.
Peter
// Description: Place multiple textfiles as one story
#target indesign
preset = '/d/test/*.rtf';
app.wordRTFImportPreferences.useTypographersQuotes = true;
app.wordRTFImportPreferences.convertPageBreaks = ConvertPageBreaks.none;
app.wordRTFImportPreferences.importEndnotes = true;
app.wordRTFImportPreferences.importFootnotes = true;
app.wordRTFImportPreferences.importIndex = true;
app.wordRTFImportPreferences.importTOC = false;
app.wordRTFImportPreferences.importUnusedStyles = false;
mask = prompt ('Enter a file path/mask.\r\r' +
'Examples:\r' +
'd:\\books\\test\\*.rtf /d/books/test/*.rtf', preset);
if (mask == null) exit(); // Cancel pressed
ff = Folder (File (mask).path).getFiles (File (mask).name);
if (ff.length > 0)
placed = [];
missed = [];
tframe = app.documents.add().textFrames.add({geometricBounds : [36, 36, 400, 400]});
placedstory = tframe.parentStory;
app.scriptPreferences.userInteractionLevel =
UserInteractionLevels.neverInteract;
pb = initprogressbar (ff.length, 'Loading');
for (i = 0; i < ff.length; i++)
pb.value = i;
try
placedstory.insertionPoints[-1].place (ff[i]);
placedstory.insertionPoints[-1].contents = '\r\r';
placed.push (ff[i].name);
catch (_)
missed.push( ff[i].name );
app.scriptPreferences.userInteractionLevel =
UserInteractionLevels.interactWithAll;
inform = '';
if (placed.length > 0)
inform = 'Placed ' + ff.length + ' files (in this order):\r\r' + placed.join ('\r');
if (missed.length > 0)
inform += '\r\rCould not place:\r\r' + missed.join ('\r');
delete_empty_frames ();
alert( inform );
else
alert (mask + ' not found.');
// End
function delete_empty_frames ()
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat = '\\A\\Z';
var empties = app.activeDocument.findGrep (true);
for (var i = 0; i < empties.length; i++)
empties[i].parentTextFrames[0].remove()
function initprogressbar (stop, title)
progresswindow = new Window('palette', title);
progressbar = progresswindow.add ('progressbar', undefined, 1, stop);
progressbar.preferredSize = [200,20];
progresswindow.show ()
return progressbar; -
Problem creating hierarchy based on 2 physical dimension tables
I'm having a problem creating 1 logical dimension with a drill-down hierarchy, based on two separate physical dimension tables. The errors I receive when navigating the drill-down hierarchy is:
"Cannot find logical table source coverage for logical columns" &
"Missing join between logical tables".
I'm using OBIEE 10.1.3.4
Here are the details of what I have setup sofar:
Physical layer:
Dimension table DIM_ORG with columns:
-dimension_key
-org_total_code
-org_total_description
-org_detail_code
-org_detail_description
Dimension table DIM_DEPT with columns:
-dimension_key
-dept_total_code
-dept_total_description
-dept_detail_code
-dept_detail_description
Fact table FACT_SALES with columns:
-fk_org
-fk_dept
-sum_sales
Physical Joins:
FACT_SALES.fk_org = DIM_ORG_dimension_key
FACT_SALES.fl_dept = DIM_DEPT.dimension_key
Business Model & Mapping layer:
I created a logical dimension ORG_DEPT. It contains two logical table sources (DIM_ORG & DIM_DEPT) and the following logical columns:
- All Departments (mapped to dept_total_code)
- Organisation (mapped to org_detail_description)
- Organisation Number (mapped to org_detail_code)
- Department (mapped to dept_detail_description)
- Department Code (mapped to dept_detail_code)
The business logical key is based on the combination of Organisation Number & Department Code
The hierarchy I need is: All Departments -> Organisation -> Department so I created the following hierarchy for ORG_DEPT:
- Total Level containing: All Departments
- Organisation Level containing: Organisation Number (defined as the Logical level key) & Organisation (defined als the Drill level key)
- Detail Department Level containing: Department Code (defined as Logical level key) and Department (defined as Drill level key).
In the LTS of the dimension ORG_DEPT I've set the Content levels for the sources:
DIM_ORG : Organisation Level
DIM_DEPT: Detail Department Level
In the LTS no -inner- joins have been added against related physical tables.
I created a logical fact table SALES (based on the physical fact table) and joined it against the logical dimension table ORG_DEPT.
In the LTS the Content level for ORG_DEPT is set against the Detail Department Level. No - inner- joins have been aded against related physical tables.
When I create a report in Answers to test the hierachy and select only 'All Departments' I get the correct dimension value returned. When I try to drill to the next level I get the following ODBC error:
"Cannot find logical table source coverage for logical columns: [All Departments]. Please check more detailed level keys are mapped correctly".
When I create a report in Answers and select both 'All Departments' and 'Sales' I get the correct result. When I try to drill to the next level I get a different ODBC error:
"Missing join between logical tables DIM_DEPT and DIM_DEPT: There must be at least one physical join link between the underlying physical tables".
Any suggestions are welcome!
Thanks!Hello Robert,
Your suggestions were known to me but I still wanted to combine the two physical dimension tables in one logical dimension. So I've played around a bit more and found the solution: In my original setup I had two seperate logical table sources (one for each physical dimension table). The solution was to combine the two logical table sources in one logical table source. I achieved that by logical joining the DIM_DEPT table to the FACT_SALES table and subsequently to the DIM_ORG within the 1 LTS and using inner joins.
Then I created the logical table key (a combination of org_detail_code & dept_detail_code). After that I could create the hierarchy with no problem.
Edited by: The_Dutchman on Nov 4, 2011 9:43 PM -
Importing and flowing multiple text docs into InDesign CS3
I have multiple plain text files where each runs several pages long that I want to import into one document in ID CS3. I want to import them and have them flow in a single threaded text frame one after another over multiple pages. With a single multi-page text doc all I have to do is select Place and hold down the shift key and InDesign will add the necessary pages and flow the copy until the end of the doc. However, if I shift select the docs and try import them into a text frame by holding down the shift key, it will just flow the first doc in the group with no indication of overset text. I have tried placing multiple text docs holding down the shift and command key and that brings in all my docs on the first page but in separate text boxes with overset text for each doc. Is there a way to do this in InDesign or perhaps a plugin that can do this?
Thanks
RandyI tried to find this. It was posted 4/21/08 by Peter Kahrel (I can tell, because I can see my side of the discussion in my Sent folder) in response to a post I made entitled "Multiple Files". Maybe I'm not searching the forum archives properly, or maybe this was during the time last year when Adobe was trying (and failing) to update the forums. In any case, I'm sure at this point that Peter posted this for public consumption, so I don't think he's going to mind if I post it again:
// Description: Place multiple textfiles as one story
#target indesign
preset = "/d/books/test/*.doc";
app.wordRTFImportPreferences.useTypographersQuotes = false;
app.wordRTFImportPreferences.convertPageBreaks = ConvertPageBreaks.none;
app.wordRTFImportPreferences.importEndnotes = true;
app.wordRTFImportPreferences.importFootnotes = true;
app.wordRTFImportPreferences.importIndex = true;
app.wordRTFImportPreferences.importTOC = false;
app.wordRTFImportPreferences.importUnusedStyles = false;
mask = prompt( 'Enter a file path/mask.\r\r' +
'Examples:\r' +
'd:\\books\\test\\*.rtf /d/books/test/*.rtf', preset );
if( mask == null ) exit(); // Cancel pressed
ff = Folder( File(mask).path ).getFiles( File(mask).name );
if( ff.length > 0 )
placed = [];
missed = [];
tframe = app.documents.add().textFrames.add(
{ geometricBounds : [36, 36, 400, 400] } );
placedstory = tframe.parentStory;
app.scriptPreferences.userInteractionLevel =
UserInteractionLevels.neverInteract;
pb = initprogressbar( ff.length, 'Loading');
for( i = 0; i < ff.length; i++ )
pb.value = i;
try
placedstory.insertionPoints[-1].contents = '£0';
placedstory.insertionPoints[-1].place( ff[i] );
placedstory.insertionPoints[-1].contents = '\r\r';
placed.push( ff[i].name );
catch(_)
missed.push( ff[i].name );
app.scriptPreferences.userInteractionLevel =
UserInteractionLevels.interactWithAll;
inform = '';
if( placed.length > 0 )
inform = 'Placed ' + ff.length + ' files (in this order):\r\r' + placed.join('\r');
if( missed.length > 0 )
inform += '\r\rCould not place:\r\r' + missed.join('\r');
delete_empty_frames ();
alert( inform );
else
alert( mask + ' not found.' );
// End
function delete_empty_frames ()
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat = '\\A\\Z';
var empties = app.activeDocument.findGrep (true);
for (var i = 0; i < empties.length; i++)
empties[i].parentTextFrames[0].remove()
function initprogressbar( stop, title)
var progresswindow = new Window('palette', title);
var progressbar = progresswindow.add( 'progressbar', undefined, 1, stop );
progressbar.preferredSize = [200,20];
progresswindow.show()
return progressbar;
Copy and paste everything between the hyphen lines (not including the hyphen lines) into a text editor and save with a .js extension and put it in your scripts folder. Should be something like:
D:\Program Files\Adobe\InDesign CS3\Adobe InDesign CS3\Scripts\Scripts Panel
After alphabetizing your files and putting them in their own folder, copy the path and run the script. It will make a new folder and place all your files in one continuous story. I don't know how it will work with .txt files.
Ken Benson
Maybe you are looking for
-
I have recently bought a Logitech R800 presenter which works very well with Keynote on a MacBook Pro. The start/stop presentation key does not work but that can be easily fixed by assigning F5 to "Start presentation" for Keynote in the keyboard syste
-
I wanted to ask if anyone using a Mac Pro running Mountain Lion, Parallels 8, and Windows 7 Pro could run XP Mode? My experience has not been encouraging in that I progress to the end of the final mile, that is configuring XP Mode for first use, the
-
SAP Web Dispatcher does not start as windows service
Hi, I have successfully installed and configured SAP Web Dispatcher. When I start the web dispatcher from command prompt, it works fine. I created a windows service for web dispatcher using the command ntscmgr install sapwebdisp -b "c:\program files\
-
Need a free app for iPhone5 to control spam email.
Need a free app for iPhone5 to control spam email. I am getting rid of SpamDrain very soon.. tired of paying for the app. Any ideas? Suggestions?
-
i have my i tunes on my macbook and want to transfer it to my new ipad. how?