Making manually-added cells automatically move along with imported ranges in Google Sheets? - database

For data analysis purposes, I need to manually add information in the columns right beside an imported range. It generally doesn't cause any issues and works well. However, whenever the imported data shifts rows (i.e. a new row was added in the middle of the original sheet), the manually-added info no longer matches the data -it either ends up in one row above or below. Basically, it's not in-sync with the needed data.
Is there a way to kind of "fixate" the manually-added information to the same row as the imported data? So that if the order changes in the original sheet, it won't mess up the new one.
I've been using the code shared by #Mogsdad here. However, it is only syncing the info on the "key column" and not the rest of the data in the columns after it.
Attaching screenshots for reference:
This is how it usually looks (the third column is the "key")2
And this is what happens when the rows in the imported range change:3
The code seems to be working, just not for all the columns.

Related

Excel dynamic offset table with results criteria

I am looking for a way to make a dynamically updated table in excel using a linked data source with filtered results.
What I currently have is a form control scrollbar that is linked to a random cell. That random cell drives an offset function (below) to pull results from the linked data table in another worksheet. All of this works wonderful but I am looking to strip out rows that meet a certain criteria, which I already have calculating to a true/false result in the table itself to make it simple. What I cannot figure out is how to modify my current offset lookup to filter out the results that are false in my calculated column.
=OFFSET(Sheet1!$C2,$I$99,0,1,1)
Sheet1 is where the linked data table is located.
$I$99 is where the cell link for my scrollbar is.
As the scrollbar moves the value in the cell link changes thus updating the offset lookup down the table. I should also state there are 14 rows in my table as well. I will need to filter out the false results but also in turn omit the blank rows as there are over 400 rows in the source table and only about 30 true results in the calculated column.
I unfortunately cannot provide the workbook I am using as it has company sensitive data in it but if it is absolutely needed I can create a filler document with made up data to provide something to work with.
I have looked at advanced filters already and they will not do the trick as they are not dynamic in nature. I would like a non VBA solution as this is a dashboard project that I will be distributing to my team here at work and macros are disabled on our network for security reasons every time an excel is opened so it will become a nuisance.
Let me know if you all need anything else from me.
Figured it out with a little help from a friend, coded each cell to function as an array part and it works like a charm.
{=IFERROR(INDEX(Dashboard_Data[Summary],SMALL(IF(LEFT(Dashboard_Data[Stale],1)="T",IF(Dashboard_Data[Visible],ROW(Dashboard_Data[Visible])-1,""),""),ROW(A1)+$K$18)),"")}

SSRS: Show images from multiple rows at once

From a database I get information about collaborators. The collaborators can have a different number of images. E.g. one collaborator has four images, another one only one. In this example I would get 5 rows in total. Four for the first collaborator, differing only in the image and one row for the other collaborator.
My report should treat all images belonging to the same collaborator as the same result row. So the first collaborator will have four images on its report and the other one only one. At the moment one report per row is created.
How can I tell SSRS that all rows which differ only in the image column belong together and how can I add these images to the report?
I must admit I haven't tried much yet because I don't know where to start. I've read about the previous() function (https://social.msdn.microsoft.com/Forums/sqlserver/en-US/397c92f5-e533-47be-9e07-56ea0b19f9a7/merge-data-from-multiple-rows-into-one-in-ssrs) and the instr() function (multiple images in SSRS Table Cell) but both are so far I see not what I need.
If necessary I guess I could merge the rows already in MSSQL to have one row per collaborator with comma separated images.
The images are not stored as file names but in binary form.
You should be able to utilize groupings to keep the images of the same collaborator together.

Import data from .xls to table by removing unwanted columns? [duplicate]

I need to import sheets which look like the following:
March Orders
***Empty Row
Week Order # Date Cust #
3.1 271356 3/3/10 010572
3.1 280353 3/5/10 022114
3.1 290822 3/5/10 010275
3.1 291436 3/2/10 010155
3.1 291627 3/5/10 011840
The column headers are actually row 3. I can use an Excel Sourch to import them, but I don't know how to specify that the information starts at row 3.
I Googled the problem, but came up empty.
have a look:
the links have more details, but I've included some text from the pages (just in case the links go dead)
http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/97144bb2-9bb9-4cb8-b069-45c29690dfeb
Q:
While we are loading the text file to SQL Server via SSIS, we have the
provision to skip any number of leading rows from the source and load
the data to SQL server. Is there any provision to do the same for
Excel file.
The source Excel file for me has some description in the leading 5
rows, I want to skip it and start the data load from the row 6. Please
provide your thoughts on this.
A:
Easiest would be to give each row a number (a bit like an identity in
SQL Server) and then use a conditional split to filter out everything
where the number <=5
http://social.msdn.microsoft.com/Forums/en/sqlintegrationservices/thread/947fa27e-e31f-4108-a889-18acebce9217
Q:
Is it possible during import data from Excel to DB table skip first 6 rows for example?
Also Excel data divided by sections with headers. Is it possible for example to skip every 12th row?
A:
YES YOU CAN. Actually, you can do this very easily if you know the number columns that will be imported from your Excel file. In
your Data Flow task, you will need to set the "OpenRowset" Custom
Property of your Excel Connection (right-click your Excel connection >
Properties; in the Properties window, look for OpenRowset under Custom
Properties). To ignore the first 5 rows in Sheet1, and import columns
A-M, you would enter the following value for OpenRowset: Sheet1$A6:M
(notice, I did not specify a row number for column M. You can enter a
row number if you like, but in my case the number of rows can vary
from one iteration to the next)
AGAIN, YES YOU CAN. You can import the data using a conditional split. You'd configure the conditional split to look for something in
each row that uniquely identifies it as a header row; skip the rows
that match this 'header logic'. Another option would be to import all
the rows and then remove the header rows using a SQL script in the
database...like a cursor that deletes every 12th row. Or you could
add an identity field with seed/increment of 1/1 and then delete all
rows with row numbers that divide perfectly by 12. Something like
that...
http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/847c4b9e-b2d7-4cdf-a193-e4ce14986ee2
Q:
I have an SSIS package that imports from an Excel file with data
beginning in the 7th row.
Unlike the same operation with a csv file ('Header Rows to Skip' in
Connection Manager Editor), I can't seem to find a way to ignore the
first 6 rows of an Excel file connection.
I'm guessing the answer might be in one of the Data Flow
Transformation objects, but I'm not very familiar with them.
A:
Question Sign in to vote 1 Sign in to vote rbhro, actually there were
2 fields in the upper 5 rows that had some data that I think prevented
the importer from ignoring those rows completely.
Anyway, I did find a solution to my problem.
In my Excel source object, I used 'SQL Command' as the 'Data Access
Mode' (it's drop down when you double-click the Excel Source object).
From there I was able to build a query ('Build Query' button) that
only grabbed records I needed. Something like this: SELECT F4,
F5, F6 FROM [Spreadsheet$] WHERE (F4 IS NOT NULL) AND (F4
<> 'TheHeaderFieldName')
Note: I initially tried an ISNUMERIC instead of 'IS NOT NULL', but
that wasn't supported for some reason.
In my particular case, I was only interested in rows where F4 wasn't
NULL (and fortunately F4 didn't containing any junk in the first 5
rows). I could skip the whole header row (row 6) with the 2nd WHERE
clause.
So that cleaned up my data source perfectly. All I needed to do now
was add a Data Conversion object in between the source and destination
(everything needed to be converted from unicode in the spreadsheet),
and it worked.
My first suggestion is not to accept a file in that format. Excel files to be imported should always start with column header rows. Send it back to whoever provides it to you and tell them to fix their format. This works most of the time.
We provide guidance to our customers and vendors about how files must be formatted before we can process them and it is up to them to meet the guidlines as much as possible. People often aren't aware that files like that create a problem in processing (next month it might have six lines before the data starts) and they need to be educated that Excel files must start with the column headers, have no blank lines in the middle of the data and no repeating the headers multiple times and most important of all, they must have the same columns with the same column titles in the same order every time. If they can't provide that then you probably don't have something that will work for automated import as you will get the file in a differnt format everytime depending on the mood of the person who maintains the Excel spreadsheet. Incidentally, we push really hard to never receive any data from Excel (only works some of the time, but if they have the data in a database, they can usually accomodate). They also must know that any changes they make to the spreadsheet format will result in a change to the import package and that they willl be charged for those development changes (assuming that these are outside clients and not internal ones). These changes must be communicated in advance and developer time scheduled, a file with the wrong format will fail and be returned to them to fix if not.
If that doesn't work, may I suggest that you open the file, delete the first two rows and save a text file in a data flow. Then write a data flow that will process the text file. SSIS did a lousy job of supporting Excel and anything you can do to get the file in a different format will make life easier in the long run.
My first suggestion is not to accept a file in that format. Excel files to be imported should always start with column header rows. Send it back to whoever provides it to you and tell them to fix their format. This works most of the time.
Not entirely correct.
SSIS forces you to use the format and quite often it does not work correctly with excel
If you can't change he format consider using our Advanced ETL Processor.
You can skip rows or fields and you can validate the data the way you want.
http://www.dbsoftlab.com/etl-tools/advanced-etl-processor/overview.html
Sky is the limit
You can just use the OpenRowset property you can find in the Excel Source properties.
Take a look here for details:
SSIS: Read and Export Excel data from nth Row
Regards.

SSIS Package that removes or ignores multiple rows in flat file

I'm learning how to develop SSIS packages for ETL systems this week. One of my first objectives is to discover different ways to import flat files into a database. As this is pretty straight forward for the most part, I've been playing around with different flat files that contain a variety of data.
One issue I ran into today was with a Excel document that contained data in the first row, the header information in the second row and foot information in the last couple of rows. What I want to import into the database is the header and all the rows leading up to the footer. I do not want the first row and I do not want the footer.
My current solution is to create a Data Flow task in Advance Settings and OpenRowSet with "Sheet1$A2:I20000". This allows me to open the sheet I want, select the second row (where my header resides) and then select all other rows that are between A2 and I20000.
This solution also allows me to read the header information (which I want) and all the rows that follow for importation. Unfortunately, this also selects the footer rows and doesn't seem optimize for good performance as the package has to scan a massive range of rows regardless if there is data in those rows or not.
The screenshot below contains the Excel sheet that I'm trying to import based on the MS SQL sample database. The rows I want to remove or ignore are circles with the red box. Everything else not circled is what I want to import.
Any thoughts on how I can ignore the first row, read the second row for my header information, read the rows that follow the header for my data set and then ignore the last couple of rows that I'm deeming as the footer?
Addition Information About This File
The first row will never change.
The header row will never change.
The data set after the header will change values, not data types.
The first column of footer will never change.
The second column of footer will change values, not data types.
The rest of the footer columns will never change.
I figured out the solution to my own question.
I used the Conditional Split as shown in my diagram to filter out the rows I didn't need. For example, I put a condition that checks if the first column of data (member_no) was < (less than) a number. If TRUE, it goes to my OLE DB. If False, it goes nowhere. This prevented the "SUM TOTAL" from being passed to the database.
I also edited my start range with 'Sheet1$A2:I' as opposed to 'Sheet1$A2:I20000'. That way the package scans until there is no records to scan and stops (I assume).

Hide row of data in matrix by field value

I need to know how to code this. I am working with program numbers and there is one that I do not want to be displayed. I am trying:
=Fields!NoProg.Value="08007"
But then I do not know how to tell it:
(pseudocode)
if NoProg = 08007, then do not display.
As I see it, you have two options:
Filter out the row you don't want in your resulting dataset at the database side. This has the advantage of using indexes if you have them set up. This involves putting a WHERE clause into your query. If you cannot change the query or need the row to be in the resulting dataset but simply hidden, choose this option.
SELECT ...
FROM ...
WHERE NoProg <> '08007'
Hide the row in the report, as you are already doing. This has the advantage of keeping the data in the resulting dataset but hiding it from that section of the report. If you are performing aggregation and need to include the row elsewhere but just hide the detail from view, choose this option. Keep in mind, this will not use any database indexes, so it requires one comparison for every row in the resulting dataset.
<Hidden>=Fields!NoProg.Value="08007"</Hidden>

Resources